From a35b90072ea28da02568d8421d607680a8fed5f7 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Mon, 13 May 2024 09:51:02 +0200 Subject: [PATCH 01/54] name export test --- .gitignore | 3 +- .../randomizer/settings/NamingSettings.java | 162 ++++++++++++++++++ .../settings/RandomizerSettings.java | 38 ++-- 3 files changed, 185 insertions(+), 18 deletions(-) create mode 100644 src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java diff --git a/.gitignore b/.gitignore index 4d6e1c7..4f3bded 100644 --- a/.gitignore +++ b/.gitignore @@ -13,4 +13,5 @@ # Testing stuff config.yml -*.cci \ No newline at end of file +*.cci +/.vscode \ No newline at end of file diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java new file mode 100644 index 0000000..0810c95 --- /dev/null +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -0,0 +1,162 @@ +package net.digimonworld.decode.randomizer.settings; + +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.HashMap; +import java.util.List; +import java.util.ListIterator; +import java.util.Map; +import java.util.Optional; +import java.util.Random; +import java.util.stream.Collectors; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.lang.reflect.Method; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; + +import org.controlsfx.control.CheckTreeView; + +import com.amihaiemil.eoyaml.YamlMapping; +import com.amihaiemil.eoyaml.YamlSequence; + +import net.digimonworld.decodetools.data.keepdata.Digimon; +import net.digimonworld.decodetools.data.keepdata.GlobalKeepData; +import net.digimonworld.decodetools.data.keepdata.LanguageKeep; +import net.digimonworld.decodetools.data.keepdata.enums.Level; +import net.digimonworld.decodetools.res.payload.BTXPayload; +import net.digimonworld.decodetools.res.payload.BTXPayload.BTXEntry; +import javafx.beans.property.BooleanProperty; +import javafx.beans.property.SimpleBooleanProperty; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.geometry.Pos; +import javafx.scene.control.CheckBoxTreeItem; +import javafx.scene.control.Button; +import javafx.scene.control.TitledPane; +import javafx.scene.layout.VBox; +import net.digimonworld.decode.randomizer.RandoLogger.LogLevel; +import net.digimonworld.decode.randomizer.RandomizationContext; +import net.digimonworld.decode.randomizer.utils.JavaFXUtils; + +public class NamingSettings implements Setting { + + private BooleanProperty enabled = new SimpleBooleanProperty(); + private Map propertyMap = new HashMap<>(); + + public void onSaveCsv() { + }; + + @Override + public TitledPane create(GlobalKeepData data, LanguageKeep language) { + VBox vbox = new VBox(8); + TitledPane pane = new TitledPane("Namings", vbox); + vbox.setAlignment(Pos.TOP_LEFT); + pane.setCollapsible(false); + pane.setPrefHeight(400); + EventHandler handler = new EventHandler() { + public void handle(ActionEvent event) { + + ArrayList methodList = new ArrayList(); + + Method[] methods = language.getClass().getMethods(); + for (int i = 0; i < methods.length; i++) { + String methodName = methods[i].getName(); + if (methodName.contains("Names")) + methodList.add(methodName); + } + + System.out.println(methodList); + + methodList.forEach(s -> { + ArrayList myList = new ArrayList(); + try { + + BTXPayload fiba = (BTXPayload) language.getClass().getMethod(s).invoke(language); + fiba.getEntries().stream() + .forEach(e -> myList.add(e.getValue().getString())); + } catch (Exception e) { + + } + + File destFile = new File("./" + s.substring(3) + ".csv"); + try (BufferedWriter writer = new BufferedWriter(new FileWriter(destFile, StandardCharsets.UTF_8))) { + writer.write("original;replace\n"); + String string = myList.stream().collect(Collectors.joining(";\n")) + ";"; + + writer.write(string); + } catch (IOException e) { + e.printStackTrace(); + } + }); + + event.consume(); + + } + }; + Button ponk = new Button("Export name CSVs"); + ponk.setOnAction(handler); + vbox.getChildren().add(ponk); + + return pane; + } + + @Override + public void randomize(RandomizationContext context) { + List list = propertyMap.entrySet().stream().filter(a -> a.getValue().get()).map(Map.Entry::getKey) + .collect(Collectors.toList()); + + if (!enabled.get() || list.isEmpty()) + return; + + context.logLine(LogLevel.ALWAYS, "Randomizing starter Digimon..."); + Random rand = new Random(context.getInitialSeed() * "Starter".hashCode()); + + int starterRina = list.get(rand.nextInt(list.size())); + int starterTaiga = list.get(rand.nextInt(list.size())); + int starterTaigaNGP = list.get(rand.nextInt(list.size())); + + context.addASM(".org 0x12CCC4"); + context.addASM(String.format(".byte 0x%02X", starterRina)); + + context.addASM(".org 0x12D6A0"); + context.addASM(String.format(".byte 0x%02X", starterTaigaNGP)); + + context.addASM(".org 0x27AA18"); + context.addASM(String.format(".byte 0x%02X", starterTaiga)); + + context.logLine(LogLevel.CASUAL, + String.format("Randomized Rina's Starter to %s.", + context.getLanguageKeep().getDigimonNames().getStringById(starterRina + 1))); + context.logLine(LogLevel.CASUAL, + String.format("Randomized Taiga's Starter to %s.", + context.getLanguageKeep().getDigimonNames().getStringById(starterTaiga + 1))); + context.logLine(LogLevel.CASUAL, + String.format("Randomized Taiga's BG+ Starter to %s.", + context.getLanguageKeep().getDigimonNames().getStringById(starterTaigaNGP + 1))); + + } + + @Override + public Map serialize() { + Map map = new HashMap<>(); + map.put("enabled", enabled.get()); + map.put("checked", propertyMap.entrySet().stream().filter(a -> a.getValue().get()).map(Map.Entry::getKey) + .collect(Collectors.toList())); + return map; + } + + @Override + public void load(YamlMapping map) { + if (map == null) + return; + + YamlSequence list = map.yamlSequence("checked"); + List activeList = list == null ? new ArrayList<>() + : list.values().stream().map(a -> Integer.parseInt(a.asScalar().value())).collect(Collectors.toList()); + propertyMap.forEach((a, b) -> b.set(activeList.contains(a))); + enabled.set(Boolean.parseBoolean(map.string("enabled"))); + } +} diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/RandomizerSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/RandomizerSettings.java index 49b3ced..9308db3 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/RandomizerSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/RandomizerSettings.java @@ -29,7 +29,8 @@ public class RandomizerSettings { private WorldSettings worldSettings = new WorldSettings(); private PatchSettings patchSettings = new PatchSettings(); private PlayerSettings playerSettings = new PlayerSettings(); - + private NamingSettings namingSettings = new NamingSettings(); + public void randomize(RandomizationContext context) { logSettings(context); @@ -39,27 +40,27 @@ public void randomize(RandomizationContext context) { evolutionSettings.randomize(context); starterSettings.randomize(context); worldSettings.randomize(context); + namingSettings.randomize(context); playerSettings.randomize(context); } - + private void logSettings(RandomizationContext context) { context.logLine(LogLevel.ALWAYS, "Randomizer Settings: "); - + Map configMap = new HashMap<>(); configMap.put("seed", context.getInitialSeed()); configMap.put("settings", serialize()); configMap.put("raceLogging", context.isRaceLogging()); - + try (StringWriter writer = new StringWriter()) { Yaml.createYamlPrinter(writer).print(Yaml.createYamlDump(configMap).dump()); context.logLine(LogLevel.ALWAYS, writer.toString()); - } - catch (IOException e) { + } catch (IOException e) { // should never happen e.printStackTrace(); } - - context.logLine(LogLevel.ALWAYS, ""); + + context.logLine(LogLevel.ALWAYS, ""); } public List create(GlobalKeepData inputData, LanguageKeep languageKeep) { @@ -70,19 +71,22 @@ public List create(GlobalKeepData inputData, LanguageKeep languageKeep) { generalPane.setPadding(new Insets(10)); generalPane.setOrientation(Orientation.VERTICAL); generalPane.setPrefWrapLength(400); - + for (Setting setting : a.getValue()) generalPane.getChildren().add(setting.create(inputData, languageKeep)); - + return new Tab(a.getKey(), generalPane); }).collect(Collectors.toList()); } - + private List>> getSettingsMap() { - return List.of(Tuple.of("General", Arrays.asList(digimonSettings, evolutionSettings, skillSettings, worldSettings, patchSettings)), - Tuple.of("New Game", Arrays.asList(starterSettings, playerSettings))); + return List.of( + Tuple.of("General", + Arrays.asList(digimonSettings, evolutionSettings, skillSettings, worldSettings, patchSettings)), + Tuple.of("New Game", Arrays.asList(starterSettings, playerSettings)), + Tuple.of("Translation", Arrays.asList(namingSettings))); } - + public Map serialize() { Map map = new HashMap<>(); map.put("skillSettings", skillSettings.serialize()); @@ -92,14 +96,14 @@ public Map serialize() { map.put("worldSettings", worldSettings.serialize()); map.put("patchSettings", patchSettings.serialize()); map.put("playerSettings", playerSettings.serialize()); - + return map; } - + public void load(YamlMapping map) { if (map == null) return; - + skillSettings.load(map.yamlMapping("skillSettings")); digimonSettings.load(map.yamlMapping("digimonSettings")); evolutionSettings.load(map.yamlMapping("evolutionSettings")); From 003cbfa77c297c8a3fee5475c6cae42615e044a6 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Mon, 13 May 2024 14:55:38 +0200 Subject: [PATCH 02/54] subfolders --- .../randomizer/settings/NamingSettings.java | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index 0810c95..888d9d3 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -10,6 +10,7 @@ import java.util.Random; import java.util.stream.Collectors; import java.io.BufferedWriter; +import java.nio.file.Files; import java.io.File; import java.io.FileWriter; import java.io.IOException; @@ -27,6 +28,7 @@ import net.digimonworld.decodetools.data.keepdata.LanguageKeep; import net.digimonworld.decodetools.data.keepdata.enums.Level; import net.digimonworld.decodetools.res.payload.BTXPayload; +import net.digimonworld.decodetools.core.DeleteDirectoryFileVisitor; import net.digimonworld.decodetools.res.payload.BTXPayload.BTXEntry; import javafx.beans.property.BooleanProperty; import javafx.beans.property.SimpleBooleanProperty; @@ -37,12 +39,16 @@ import javafx.scene.control.Button; import javafx.scene.control.TitledPane; import javafx.scene.layout.VBox; +import javafx.scene.Scene; +import javafx.stage.FileChooser; import net.digimonworld.decode.randomizer.RandoLogger.LogLevel; import net.digimonworld.decode.randomizer.RandomizationContext; import net.digimonworld.decode.randomizer.utils.JavaFXUtils; +import net.digimonworld.decode.randomizer.MainWindowController; public class NamingSettings implements Setting { + private List skippable = List.of("", "None", "Unused Item", "???", "NO DATA"); private BooleanProperty enabled = new SimpleBooleanProperty(); private Map propertyMap = new HashMap<>(); @@ -55,7 +61,6 @@ public TitledPane create(GlobalKeepData data, LanguageKeep language) { TitledPane pane = new TitledPane("Namings", vbox); vbox.setAlignment(Pos.TOP_LEFT); pane.setCollapsible(false); - pane.setPrefHeight(400); EventHandler handler = new EventHandler() { public void handle(ActionEvent event) { @@ -67,9 +72,18 @@ public void handle(ActionEvent event) { if (methodName.contains("Names")) methodList.add(methodName); } - System.out.println(methodList); + try { + File csvDir = new File("./renamingPresets/"); + Files.walkFileTree(csvDir.toPath(), new DeleteDirectoryFileVisitor()); + csvDir.mkdir(); + + } catch (IOException exc) { + exc.printStackTrace(); + return; + } + methodList.forEach(s -> { ArrayList myList = new ArrayList(); try { @@ -81,10 +95,13 @@ public void handle(ActionEvent event) { } - File destFile = new File("./" + s.substring(3) + ".csv"); + File destFile = new File("./renamingPresets/" + s.substring(3) + ".csv"); try (BufferedWriter writer = new BufferedWriter(new FileWriter(destFile, StandardCharsets.UTF_8))) { + writer.write("original;replace\n"); - String string = myList.stream().collect(Collectors.joining(";\n")) + ";"; + String string = myList.stream().filter(str -> !skippable.contains(str)) + .map(str -> str + ";" + str).collect(Collectors.joining(";\n")) + + ";"; writer.write(string); } catch (IOException e) { From e993d42b101d6dd32f8bf4583b358562080bbd21 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Tue, 14 May 2024 21:32:06 +0200 Subject: [PATCH 03/54] implementing replacement stuff --- .gitignore | 3 +- .../randomizer/settings/NamingSettings.java | 444 +++++++-- .../settings/RandomizerSettings.java | 2 +- .../camelCase/AccessoryNames.csv | 133 +++ .../renamingPresets/camelCase/CardNames1.csv | 589 ++++++++++++ .../renamingPresets/camelCase/CardNames2.csv | 589 ++++++++++++ .../camelCase/CardSetNames.csv | 100 ++ .../camelCase/CharacterNames.csv | 45 + .../camelCase/DigimonNames.csv | 219 +++++ .../camelCase/FinisherNames.csv | 235 +++++ .../camelCase/GlossaryNames.csv | 97 ++ .../renamingPresets/camelCase/ItemNames.csv | 402 ++++++++ .../camelCase/KeyItemNames.csv | 128 +++ .../renamingPresets/camelCase/MedalNames.csv | 101 ++ .../renamingPresets/camelCase/NatureNames.csv | 16 + .../renamingPresets/camelCase/SkillNames.csv | 62 ++ .../renamingPresets/camelCase/keep-15.csv | 861 ++++++++++++++++++ 17 files changed, 3942 insertions(+), 84 deletions(-) create mode 100644 src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/AccessoryNames.csv create mode 100644 src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/CardNames1.csv create mode 100644 src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/CardNames2.csv create mode 100644 src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/CardSetNames.csv create mode 100644 src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/CharacterNames.csv create mode 100644 src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/DigimonNames.csv create mode 100644 src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/FinisherNames.csv create mode 100644 src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/GlossaryNames.csv create mode 100644 src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/ItemNames.csv create mode 100644 src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/KeyItemNames.csv create mode 100644 src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/MedalNames.csv create mode 100644 src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/NatureNames.csv create mode 100644 src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/SkillNames.csv create mode 100644 src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/keep-15.csv diff --git a/.gitignore b/.gitignore index 4f3bded..56849cb 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,5 @@ # Testing stuff config.yml *.cci -/.vscode \ No newline at end of file +/.vscode +/renamingPresets \ No newline at end of file diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index 888d9d3..fc830c5 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -1,165 +1,445 @@ package net.digimonworld.decode.randomizer.settings; import java.util.ArrayList; -import java.util.EnumMap; import java.util.HashMap; import java.util.List; -import java.util.ListIterator; import java.util.Map; import java.util.Optional; import java.util.Random; import java.util.stream.Collectors; import java.io.BufferedWriter; +import java.nio.file.StandardCopyOption; import java.nio.file.Files; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.lang.reflect.Method; -import java.nio.charset.Charset; +import java.net.URL; import java.nio.charset.StandardCharsets; -import org.controlsfx.control.CheckTreeView; +import org.controlsfx.control.ToggleSwitch; import com.amihaiemil.eoyaml.YamlMapping; import com.amihaiemil.eoyaml.YamlSequence; -import net.digimonworld.decodetools.data.keepdata.Digimon; import net.digimonworld.decodetools.data.keepdata.GlobalKeepData; import net.digimonworld.decodetools.data.keepdata.LanguageKeep; -import net.digimonworld.decodetools.data.keepdata.enums.Level; +import net.digimonworld.decodetools.res.kcap.NormalKCAP; import net.digimonworld.decodetools.res.payload.BTXPayload; + import net.digimonworld.decodetools.core.DeleteDirectoryFileVisitor; +import net.digimonworld.decodetools.core.Tuple; +import net.digimonworld.decodetools.core.Utils; import net.digimonworld.decodetools.res.payload.BTXPayload.BTXEntry; import javafx.beans.property.BooleanProperty; import javafx.beans.property.SimpleBooleanProperty; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.geometry.Pos; -import javafx.scene.control.CheckBoxTreeItem; +import javafx.beans.binding.When; import javafx.scene.control.Button; import javafx.scene.control.TitledPane; +import javafx.scene.control.Accordion; import javafx.scene.layout.VBox; -import javafx.scene.Scene; -import javafx.stage.FileChooser; -import net.digimonworld.decode.randomizer.RandoLogger.LogLevel; import net.digimonworld.decode.randomizer.RandomizationContext; import net.digimonworld.decode.randomizer.utils.JavaFXUtils; -import net.digimonworld.decode.randomizer.MainWindowController; +import net.digimonworld.decode.randomizer.DecodeRandomizer; public class NamingSettings implements Setting { - private List skippable = List.of("", "None", "Unused Item", "???", "NO DATA"); - private BooleanProperty enabled = new SimpleBooleanProperty(); + private List skippable = List.of("", "None", "Unused Item", "???", "NO DATA", "n"); + private BooleanProperty renameEnabled = new SimpleBooleanProperty(); + private BooleanProperty randomizeEnabled = new SimpleBooleanProperty(); + private BooleanProperty camelCase = new SimpleBooleanProperty(); + private BooleanProperty manualCsv = new SimpleBooleanProperty(); + private BooleanProperty replaceAll = new SimpleBooleanProperty(); + private BooleanProperty pickle = new SimpleBooleanProperty(); + private BooleanProperty orge = new SimpleBooleanProperty(); private Map propertyMap = new HashMap<>(); - public void onSaveCsv() { - }; + private Accordion mainAc; + // The tuple inside the ArrayList works like this: [0] + public Map> replacmentMap = new HashMap<>(); + + private class Replacement { + public String original; + public String replacement; + private List excludedTerms; + private List disabledPaths; + private int matchLength; + private int index = -1; + public boolean global = true; + + private class PathPosition { + public int line = 0; + public int col = 0; + public String path = ""; + public boolean valid = true; + + public PathPosition(String pathDescriptor) { + if (pathDescriptor.equals("")) { + this.valid = false; + return; + } else { + + String[] splitter = pathDescriptor.split(":", -1); + this.path = splitter[0]; + this.line = Integer.parseInt(splitter[1]); + if (splitter[2] == null) + this.col = 0; + else + this.col = Integer.parseInt(splitter[2]); + } + } + } + + public Replacement(String index, String original, String replacement, String rawExcludedTerms, + String rawDisabledPaths) { + this.index = Integer.parseInt(index); + this.original = original; + this.replacement = replacement; + this.matchLength = original.length(); + this.excludedTerms = List.of(rawExcludedTerms.split(",")); + String[] pathos = rawDisabledPaths.split(","); + for (int i = 0; i < pathos.length; i++) { + String p = pathos[i]; + if (p.toLowerCase().equals("all")) + this.global = false; + else if (!p.equals("")) + this.disabledPaths.add(new PathPosition(rawDisabledPaths)); + } + } + + public void replaceExact(BTXPayload btx) { + BTXEntry entry = btx.getEntryById(index).get(); + entry.setString(replacement); + } + + private int realPosition(String path, int index) { + ArrayList repls = replacmentMap.get(path); + if (repls == null) + return index; + int finalOffset = 0; + for (int i = 0; i < repls.size(); i++) { + int[] current = repls.get(i); + int start = current[0]; + int offset = current[2]; + if (start > index) + break; + finalOffset += offset; + } + return index + finalOffset; + } + + private boolean isOverlapping(String path, int index) { + ArrayList repls = replacmentMap.get(path); + if (repls == null) + return false; + int pos = realPosition(path, index); + for (int i = 0; i < repls.size(); i++) { + int[] current = repls.get(i); + int start = current[0]; + int end = current[1]; + if (start > pos) + break; + if (end < pos) + return true; + + } + return false; + } + + private void insertRepData(String path, int start, int end, int offset) { + ArrayList repls = replacmentMap.get(path); + int[] entry = new int[] { start, end, offset }; + if (repls == null) { + ArrayList newList = new ArrayList<>(); + newList.add(entry); + replacmentMap.put(path, newList); + return; + } + for (int i = 0; i < entry.length; i++) { + int current = repls.get(i)[0]; + if (current > start) { + repls.add(i, entry); + return; + } + } + repls.add(entry); + } + + private boolean termExclusion(String text, int index) { + for (int i = 0; i < excludedTerms.size(); i++) { + String term = excludedTerms.get(i); + int exDex = text.indexOf(term); + if (exDex == -1) + continue; + int subDex = term.indexOf(original); + if (exDex + subDex == index) + return true; + } + return false; + } + + private boolean pathExclusion(String text, String path, int index) { + int[] posData = getLinePos(text, realPosition(path, index)); + int line = posData[0]; + int col = posData[1]; + for (int i = 0; i < disabledPaths.size(); i++) { + PathPosition p = disabledPaths.get(i); + if (p.path == path && p.line == line && (p.col == 0 || p.col == col)) + return true; + } + return false; + } + + private int[] getLinePos(String text, int index) { + String subtext = text.substring(0, index); + List splitlist = List.of(subtext.split("\n", -1)); + int lineNo = splitlist.size(); + int linePos = index - subtext.lastIndexOf("\n"); + + return new int[] { lineNo, linePos }; + } + + private boolean findInText(String text, String path) { + int idx = text.indexOf(original); + if (idx == -1 || termExclusion(text, idx) || pathExclusion(text, path, idx) || isOverlapping(path, idx)) + return false; + return true; + } + + } + + private ArrayList getNameListMethods(LanguageKeep lang) { + ArrayList methodList = new ArrayList(); + Method[] methods = lang.getClass().getMethods(); + for (int i = 0; i < methods.length; i++) { + String methodName = methods[i].getName(); + if (methodName.contains("Names")) + methodList.add(methodName); + } + return methodList; + } + + boolean clearExportDir(File dir) { + try { + if (dir.exists()) + Files.walkFileTree(dir.toPath(), new DeleteDirectoryFileVisitor()); + } catch (IOException exc) { + exc.printStackTrace(); + return false; + } + dir.mkdir(); + return true; + } + + private EventHandler buildHandler(String resourcePath, File targetDir) { + return new EventHandler<>() { + public void handle(ActionEvent e) { + e.consume(); + clearExportDir(targetDir); + URL origin = DecodeRandomizer.class.getResource(resourcePath); + if (origin == null) + return; + List fls = Utils.listFiles(new File(origin.getFile())); + fls.forEach(f -> { + try { + Files.copy(f.toPath(), new File(targetDir.toString() + "/" + f.getName()).toPath(), + StandardCopyOption.REPLACE_EXISTING); + } catch (IOException exc) { + exc.printStackTrace(); + return; + } + }); + } + }; + } @Override public TitledPane create(GlobalKeepData data, LanguageKeep language) { - VBox vbox = new VBox(8); - TitledPane pane = new TitledPane("Namings", vbox); - vbox.setAlignment(Pos.TOP_LEFT); - pane.setCollapsible(false); - EventHandler handler = new EventHandler() { - public void handle(ActionEvent event) { - ArrayList methodList = new ArrayList(); + mainAc = new Accordion(); - Method[] methods = language.getClass().getMethods(); - for (int i = 0; i < methods.length; i++) { - String methodName = methods[i].getName(); - if (methodName.contains("Names")) - methodList.add(methodName); - } - System.out.println(methodList); + VBox restoreBox = new VBox(8); + VBox randoBox = new VBox(8); - try { - File csvDir = new File("./renamingPresets/"); - Files.walkFileTree(csvDir.toPath(), new DeleteDirectoryFileVisitor()); - csvDir.mkdir(); + restoreBox.setAlignment(Pos.TOP_LEFT); + randoBox.setAlignment(Pos.TOP_LEFT); - } catch (IOException exc) { - exc.printStackTrace(); - return; - } + TitledPane pane = new TitledPane("Edit Names", mainAc); + TitledPane restorePane = new TitledPane("Restore original names", restoreBox); + restorePane.setId("restore"); + mainAc.setExpandedPane(restorePane); + TitledPane randoPane = new TitledPane("Randomize names", randoBox); + randoPane.setId("random"); + + camelCase.set(true); + pane.setCollapsible(false); + File csvDir = new File("./renamingPresets/"); + manualCsv.set(csvDir.exists() && csvDir.isDirectory() && csvDir.listFiles().length != 0); + ToggleSwitch camel = JavaFXUtils.buildToggleSwitch("camelCase names", Optional.empty(), Optional.of(camelCase)); + ToggleSwitch manCs = JavaFXUtils.buildToggleSwitch("use Manual CSV", Optional.empty(), Optional.of(manualCsv)); + ToggleSwitch repAll = JavaFXUtils.buildToggleSwitch("Replace terms in ALL text", Optional.empty(), + Optional.of(replaceAll)); + + manCs.disableProperty().bind(renameEnabled.not()); + repAll.disableProperty().bind(renameEnabled.not()); + camel.disableProperty().bind(new When(renameEnabled).then(manualCsv).otherwise(renameEnabled.not())); + + EventHandler rawExportHandler = new EventHandler() { + public void handle(ActionEvent event) { + event.consume(); + ArrayList methodList = getNameListMethods(language); + + System.out.println(methodList); + clearExportDir(csvDir); methodList.forEach(s -> { - ArrayList myList = new ArrayList(); + ArrayList> myList = new ArrayList<>(); try { - - BTXPayload fiba = (BTXPayload) language.getClass().getMethod(s).invoke(language); - fiba.getEntries().stream() - .forEach(e -> myList.add(e.getValue().getString())); + BTXPayload btx = (BTXPayload) language.getClass().getMethod(s).invoke(language); + btx.getEntries().stream() + .forEach(e -> myList + .add(new Tuple(e.getKey(), e.getValue().getString()))); } catch (Exception e) { - + e.printStackTrace(); } File destFile = new File("./renamingPresets/" + s.substring(3) + ".csv"); try (BufferedWriter writer = new BufferedWriter(new FileWriter(destFile, StandardCharsets.UTF_8))) { - writer.write("original;replace\n"); - String string = myList.stream().filter(str -> !skippable.contains(str)) - .map(str -> str + ";" + str).collect(Collectors.joining(";\n")) - + ";"; + writer.write("index;original;replace;excludeTerms;excludePaths\n"); + String string = myList.stream() + .filter(str -> !skippable.contains(str.getValue())) + .map(str -> str.getKey().toString() + ';' + str.getValue() + ";" + str.getValue()) + .collect(Collectors.joining(";;\n")) + + ";;"; writer.write(string); } catch (IOException e) { e.printStackTrace(); + return; } }); - - event.consume(); - } }; - Button ponk = new Button("Export name CSVs"); - ponk.setOnAction(handler); - vbox.getChildren().add(ponk); + Button camelExp = new Button("Export CSVs for CamelCase names"); + Button spaceExp = new Button("Export CSVs for spaced names"); + Button curExp = new Button("Export CSVs for current names"); + curExp.setOnAction(rawExportHandler); + camelExp.setOnAction(buildHandler("renamingPresets/camelCase/", csvDir)); + spaceExp.setOnAction(buildHandler("renamingPresets/space/", csvDir)); + + restoreBox.getChildren().addAll( + JavaFXUtils.buildToggleSwitch("Enabled", Optional.empty(), Optional.of(renameEnabled)), + manCs, + camel, + repAll, + curExp, + camelExp, + spaceExp); + randoBox.getChildren().addAll( + JavaFXUtils.buildToggleSwitch("Enabled", Optional.empty(), Optional.of(randomizeEnabled))); + + mainAc.getPanes().addAll(restorePane, randoPane); return pane; } + private class PathResolver { + private RandomizationContext context; + public Map shortcuts = new HashMap<>(); + public Map keepMap = new HashMap<>(); + + public PathResolver(RandomizationContext context) { + this.context = context; + this.shortcuts.put("keep", "Keep/LanguageKeep_jp.res"); + this.shortcuts.put("map", "map/text"); + this.keepMap.put("DigimonNames", "11"); + this.keepMap.put("ItemNames", "0"); + this.keepMap.put("KeyItemNames", "3"); + this.keepMap.put("AccessoryNames", "5"); + this.keepMap.put("SkillNames", "7"); + this.keepMap.put("CharacterNames", "13"); + this.keepMap.put("NatureNames", "16"); + this.keepMap.put("MedalNames", "17"); + this.keepMap.put("GlossaryNames", "25"); + this.keepMap.put("CardNames1", "27"); + this.keepMap.put("CardNames2", "28"); + this.keepMap.put("CardSetNames", "30"); + } + + public BTXPayload resolve(String path) { + ArrayList frag = new ArrayList<>( + List.of((keepMap.containsKey(path) ? ("keep-" + keepMap.get(path)) : path).split("-"))); + int btxIndex = Integer.parseInt(frag.remove(frag.size() - 1)); + String finalPath = "part0/arcv/" + frag.stream() + .map(s -> shortcuts.containsKey(s) ? shortcuts.get(s) : s) + .collect(Collectors.joining("/")); + NormalKCAP pk = (NormalKCAP) context.getFile(finalPath).get(); + if (frag.get(frag.size() - 1).equals("keep")) + pk = (NormalKCAP) pk.get(0); + return (BTXPayload) pk.get(btxIndex); + } + } + + private void targetedBtxReplacement(BTXPayload btx, File f) { + System.out.println(f.getName()); + try { + List lines = Files.readAllLines(f.toPath(), StandardCharsets.UTF_8); + ArrayList reps = new ArrayList<>(); + for (int i = 0; i < lines.size(); i++) { + if (i == 0) + continue; + String[] entries = lines.get(i).split(";", -1); + if (entries[1].equals(entries[2])) + continue; + Replacement rep = new Replacement(entries[0], entries[1], entries[2], entries[3], entries[4]); + rep.replaceExact(btx); + if (replaceAll.get() && rep.global) + reps.add(rep); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + @Override public void randomize(RandomizationContext context) { - List list = propertyMap.entrySet().stream().filter(a -> a.getValue().get()).map(Map.Entry::getKey) - .collect(Collectors.toList()); - - if (!enabled.get() || list.isEmpty()) + String mode = mainAc.getExpandedPane().getId(); + if (!(mode.equals("restore") ? renameEnabled.get() : randomizeEnabled.get())) return; - context.logLine(LogLevel.ALWAYS, "Randomizing starter Digimon..."); - Random rand = new Random(context.getInitialSeed() * "Starter".hashCode()); - - int starterRina = list.get(rand.nextInt(list.size())); - int starterTaiga = list.get(rand.nextInt(list.size())); - int starterTaigaNGP = list.get(rand.nextInt(list.size())); - - context.addASM(".org 0x12CCC4"); - context.addASM(String.format(".byte 0x%02X", starterRina)); - - context.addASM(".org 0x12D6A0"); - context.addASM(String.format(".byte 0x%02X", starterTaigaNGP)); + PathResolver res = new PathResolver(context); + if (mode.equals("restore")) { + File manualCsvDir = new File("./renamingPresets/"); + File origin; + if (manualCsv.get() && manualCsvDir.exists()) { + origin = manualCsvDir; + } else { + String resourcePath = "renamingPresets/" + (camelCase.get() ? "camelCase" : "space") + "/"; + origin = new File(DecodeRandomizer.class.getResource(resourcePath).getFile()); + } + List presets = List.of(origin.listFiles()); + presets.stream().filter(f -> f.getName().contains("-")).forEach(p -> { + String pName = p.getName(); + BTXPayload foundBtx = res.resolve(pName.substring(0, pName.length() - 4)); + targetedBtxReplacement(foundBtx, p); + }); - context.addASM(".org 0x27AA18"); - context.addASM(String.format(".byte 0x%02X", starterTaiga)); + if (!replaceAll.get()) + return; - context.logLine(LogLevel.CASUAL, - String.format("Randomized Rina's Starter to %s.", - context.getLanguageKeep().getDigimonNames().getStringById(starterRina + 1))); - context.logLine(LogLevel.CASUAL, - String.format("Randomized Taiga's Starter to %s.", - context.getLanguageKeep().getDigimonNames().getStringById(starterTaiga + 1))); - context.logLine(LogLevel.CASUAL, - String.format("Randomized Taiga's BG+ Starter to %s.", - context.getLanguageKeep().getDigimonNames().getStringById(starterTaigaNGP + 1))); + return; + } } @Override public Map serialize() { Map map = new HashMap<>(); - map.put("enabled", enabled.get()); + map.put("enabled", renameEnabled.get()); map.put("checked", propertyMap.entrySet().stream().filter(a -> a.getValue().get()).map(Map.Entry::getKey) .collect(Collectors.toList())); return map; @@ -174,6 +454,6 @@ public void load(YamlMapping map) { List activeList = list == null ? new ArrayList<>() : list.values().stream().map(a -> Integer.parseInt(a.asScalar().value())).collect(Collectors.toList()); propertyMap.forEach((a, b) -> b.set(activeList.contains(a))); - enabled.set(Boolean.parseBoolean(map.string("enabled"))); + renameEnabled.set(Boolean.parseBoolean(map.string("enabled"))); } } diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/RandomizerSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/RandomizerSettings.java index 9308db3..f543027 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/RandomizerSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/RandomizerSettings.java @@ -84,7 +84,7 @@ private List>> getSettingsMap() { Tuple.of("General", Arrays.asList(digimonSettings, evolutionSettings, skillSettings, worldSettings, patchSettings)), Tuple.of("New Game", Arrays.asList(starterSettings, playerSettings)), - Tuple.of("Translation", Arrays.asList(namingSettings))); + Tuple.of("Patch Names", Arrays.asList(namingSettings))); } public Map serialize() { diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/AccessoryNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/AccessoryNames.csv new file mode 100644 index 0000000..445664f --- /dev/null +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/AccessoryNames.csv @@ -0,0 +1,133 @@ +index;original;replace;excludeTerms;excludePaths +1;Red Ribbon;Red Ribbon;; +4;Angel Ribbon;Angel Ribbon;; +8;Rose Bow;Rose Bow;; +10;Grey Tail;Grey Tail;; +12;Guil Tail;Guil Tail;; +15;Baste Tail;Baste Tail;; +16;Wanya Tail;Wanya Tail;; +18;Rena Tail;Rena Tail;; +19;Top Hat;Top Hat;; +25;Soul Hat;Soul Hat;; +26;Santa Hat;Santa Hat;; +27;Phantom Turban;Phantom Turban;; +28;Tao Eboshi;Tao Eboshi;; +29;Golden Crown;Golden Crown;; +30;Silver Tiara;Silver Tiara;; +31;Wizard Hat;Wizard Hat;; +32;Burger Hat;Burger Hat;; +33;Chef Hat;Chef Hat;; +35;Antyla Ears;Andira Ears;; +37;Guil Ears;Guil Ears;; +38;Baste Ears;Baste Ears;; +39;Wanya Ears;Wanya Ears;; +41;Rena Ears;Rena Ears;; +43;Grey Horn;Grey Horn;; +44;GeoGrey Horn;GeoGrey Horn;; +47;Reindeer Horns;Reindeer Horns;; +48;Ete Shades;Ete Shades;; +50;Joe's Glasses;Joe's Glasses;; +54;Bike Goggles;Bike Goggles;; +55;Tai's Goggles;Taichi's Goggles;; +56;Davis' Goggles;Daisuke's Goggles;; +57;Takato's Goggles;Takato's Goggles;; +58;Takuya's Goggles;Takuya's Goggles;; +59;Taiki's Goggles;Taiki's Goggles;; +61;Doruru Drill;Doruru Drill;; +62;Red Scarf;Red Scarf;; +63;Bandana;Bandana;; +66;Rena Scarf;Rena Scarf;; +68;Aegis;Aegis;; +73;Red Nose;Red Nose;; +74;Moni Satchel;Moni Satchel;; +75;Red Satchel;Red Satchel;; +76;Black Satchel;Black Satchel;; +77;Forehead Axe;Forehead Axe;; +79;Shinobi Shuriken;Shinobi Shuriken;; +83;Floating Swim Ring;Floating Swim Ring;; +84;Strawberry Doughnut;Strawberry Doughnut;; +85;Yellow Poo;Yellow Poo;; +87;Kingpin;Kingpin;; +89;Boko Belly Band;Boko Belly Band;; +90;Angel Wings;Angel Wings;; +91;Bat Wings;Bat Wings;; +92;Tai's Digivice;Taichi's Digivice;; +93;Pirate Hat;Pirate Hat;; +94;V-Dragon Wings;V-Dragon Wings;; +95;V-Dragon Mark;V-Dragon Mark;; +97;V-Dragon Horn;V-Dragon Horn;; +98;Pirate Gun;Pirate Gun;; +99;Jolly Roger;Jolly Roger;; +100;Golden Skull;Golden Skull;; +101;Rouge Ribbon;Rouge Ribbon;; +102;Swirl Glasses;Swirl Glasses;; +103;Eye Patch;Eye Patch;; +104;Myotis Mask;Vam Mask;; +105;Medical Eye Patch;Medical Eye Patch;; +106;Black Cloak;Black Cloak;; +107;Red Cloak;Red Cloak;; +108;King's Crown;King's Crown;; +109;Shakkou Coronet;Shakkou Coronet;; +110;T.K.'s Cap;Takeru's Cap;; +111;Graduate Cap;Graduate Cap;; +112;Puppet Cap;Pinocchi Cap;; +113;Samurai Helmet;Samurai Helmet;; +114;Mohican Hair;Mohican Hair;; +115;Regent Head;Regent Head;; +116;Mush Hat;Mush Hat;; +117;Bears Cap;Bears Cap;; +118;Digimon World Cap;Digimon World Cap;; +119;Big Cap;Big Cap;; +120;Safety Helmet;Safety Helmet;; +121;Teacher Beret;Teacher Beret;; +122;Student Cap;Student Cap;; +123;Straw Hat;Straw Hat;; +124;Jester Hat;Jester Hat;; +125;Afro Head;Afro Head;; +126;Dandy Hat;Dandy Hat;; +127;Olympia Sword;Olympia Sword;; +128;MacField Mic;MacField Mic;; +129;Wizard Rod;Wizard Rod;; +130;Elder's Rod;Elder's Rod;; +131;Thor's Hammer;Thor's Hammer;; +132;Shinobi Blade;Shinobi Blade;; +133;Party Pumpkin;Party Pumpkin;; +134;Xros Loader;Xros Loader;; +135;Plant Decoration;Plant Decoration;; +136;Secret Scroll;Secret Scroll;; +137;White Swan;White Swan;; +138;Intravenous Drip;Intravenous Drip;; +139;Star Emblem;Star Emblem;; +140;Angel Halo;Angel Halo;; +141;Lollipop;Lollipop;; +142;Genie's Waistband;Genie's Waistband;; +143;Ballet Skirt;Ballet Skirt;; +144;Toilet Paper Roll;Toilet Paper Roll;; +145;Rubber Plunger;Rubber Plunger;; +146;Bandage;Bandage;; +147;Digimon Mini;Digimon Mini;; +148;Sashimono Banner;Sashimono Banner;; +149;Fishing Rod;Fishing Rod;; +150;Old Camera;Old Camera;; +151;Champion Belt;Champion Belt;; +152;Kiss Mark;Kiss Mark;; +153;Face Mask;Face Mask;; +154;Patterned Bandage;Patterned Bandage;; +155;Banner Flag;Banner Flag;; +156;Grey Backhorn;Grey Backhorn;; +157;Geo Backhorn;Geo Backhorn;; +158;White Tie;White Tie;; +159;Purple Scarf;Purple Scarf;; +160;Gas Mask;Gas Mask;; +161;Hockey Mask;Hockey Mask;; +163;Mjolnir;Mjolnir;; +164;Ouryuken;Ouryuken;; +165;Sphinx Wings;Sphinx Wings;; +166;Ancient Volcano;Ancient Volcano;; +167;Infinity Cannon;Infinity Cannon;; +168;Hyper Infinity Cannon;Hyper Infinity Cannon;; +169;Dera Bush;Delu Bush;; +170;Shogun Horn;Shogun Horn;; +171;Banana Hair;Banana Hair;; +172;Shout Headphones;Shout Headphones;; +173;Pegasus Mix Mori;Pegasus Mix Mori;; \ No newline at end of file diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/CardNames1.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/CardNames1.csv new file mode 100644 index 0000000..926efba --- /dev/null +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/CardNames1.csv @@ -0,0 +1,589 @@ +index;original;replace;excludeTerms;excludePaths +1;Botamon;Botamon;; +2;Dodomon;Dodomon;; +3;Yuramon;Yuramon;; +4;Poyomon;Poyomon;; +5;Jyarimon;Jyarimon;; +6;Koromon;Koromon;; +7;Wanyamon;Wanyamon;; +8;Budmon;Budmon;; +9;Tokomon;Tokomon;; +10;Gigimon;Gigimon;; +11;Agumon;Agumon;; +12;Gaomon;Gaomon;; +13;Biyomon;Biyomon;; +14;Veemon;Veemon;; +15;Hagurumon;Hagurumon;; +16;Candlemon;Candlemon;; +17;Chuumon;Chuumon;; +18;Tsukaimon;Tsukaimon;; +19;Kamemon;Kamemon;; +20;Kudamon;Kudamon;; +21;Lalamon;Lalamon;; +22;Impmon;Impmon;; +23;Guilmon;Guilmon;; +24;Patamon;Patamon;; +25;DemiDevimon;DemiDevimon;; +26;BlackGabumon;BlackGabumon;; +27;Psychemon;Psychemon;; +28;Goburimon;Goburimon;; +29;SnowAgumon;SnowAgumon;; +30;BlackAgumon;BlackAgumon;; +31;Gabumon;Gabumon;; +32;Solarmon;Solarmon;; +33;Tentomon;Tentomon;; +34;Gomamon;Gomamon;; +35;Palmon;Palmon;; +36;Dorumon;Dorumon;; +37;Commandramon;Commandramon;; +38;Greymon;Greymon;; +39;Gaogamon;Gaogamon;; +40;Birdramon;Birdramon;; +41;ExVeemon;ExVeemon;; +42;Meramon;Meramon;; +43;Airdramon;Airdramon;; +44;Garurumon;Garurumon;; +45;Bakemon;Bakemon;; +46;BlackGatomon;BlackGatomon;; +47;GeoGreymon;GeoGreymon;; +48;Sunflowmon;Sunflowmon;; +49;Numemon;Numemon;; +50;Leomon;Leomon;; +51;Growlmon;Growlmon;; +52;Angemon;Angemon;; +53;Growlmon (Orange);Growlmon (Orange);; +54;Gatomon;Gatomon;; +55;Devimon;Devimon;; +56;BlackGrowlmon;BlackGrowlmon;; +57;IceDevimon;IceDevimon;; +58;BlackGarurumon;BlackGarurumon;; +59;Gururumon;Gururumon;; +60;Geremon;Geremon;; +61;Kabuterimon;Kabuterimon;; +62;Sukamon;Sukamon;; +63;Ikkakumon;Ikkakumon;; +64;Guardromon;Guardromon;; +65;Seadramon;Seadramon;; +66;Togemon;Togemon;; +67;Sealsdramon;Sealsdramon;; +68;MetalGreymon;MetalGreymon;; +69;MachGaogamon;MachGaogamon;; +70;Garudamon;Garudamon;; +71;Paildramon;Paildramon;; +72;MagnaAngemon;MagnaAngemon;; +73;LadyDevimon;LadyDevimon;; +74;Monzaemon;Monzaemon;; +75;RizeGreymon;RizeGreymon;; +76;Lilamon;Lilamon;; +77;Myotismon;Myotismon;; +78;MegaSeadramon;MegaSeadramon;; +79;WarGrowlmon;WarGrowlmon;; +80;BlackWarGrowlmon;BlackWarGrowlmon;; +81;WereGarurumon;WereGarurumon;; +82;Angewomon;Angewomon;; +83;BlueMeramon;BlueMeramon;; +84;BlackWereGarurumon;BlackWereGarurumon;; +85;WarGrowlmon (Orange);WarGrowlmon (Orange);; +86;MegaKabuterimon;MegaKabuterimon;; +87;Etemon;Etemon;; +88;Andromon;Andromon;; +89;Zudomon;Zudomon;; +90;MetalTyrannomon;MetalTyrannomon;; +91;Megadramon;Megadramon;; +92;MetalGreymon (Virus);MetalGreymon (Virus);; +93;Tankdramon;Tankdramon;; +94;WarGreymon;WarGreymon;; +95;MirageGaogamon;MirageGaogamon;; +96;Phoenixmon;Phoenixmon;; +97;BlackWarGreymon;BlackWarGreymon;; +98;ShineGreymon;ShineGreymon;; +99;VictoryGreymon;VictoryGreymon;; +100;MarineAngemon;MarineAngemon;; +101;Rosemon;Rosemon;; +102;PlatinumNumemon;PlatinumNumemon;; +103;BanchoLeomon;BanchoLeomon;; +104;Darkdramon;Darkdramon;; +105;Chaosmon;Chaosmon;; +106;MetalGarurumon;MetalGarurumon;; +107;BlackMetalGarurumon;BlackMetalGarurumon;; +108;ZeedGarurumon;ZeedGarurumon;; +109;HerculesKabuterimon;HerculesKabuterimon;; +110;MetalEtemon;MetalEtemon;; +111;Vikemon;Vikemon;; +112;ChaosGallantmon;ChaosGallantmon;; +113;MaloMyotismon;MaloMyotismon;; +114;Murmukusmon;Murmukusmon;; +115;Ghoulmon;Ghoulmon;; +116;Vikaralamon;Vikaralamon;; +117;Kumbhiramon;Kumbhiramon;; +118;Vajramon;Vajramon;; +119;Mihiramon;Mihiramon;; +120;Antylamon;Antylamon;; +121;Majiramon;Majiramon;; +122;Sandiramon;Sandiramon;; +123;Indramon;Indramon;; +124;Pajiramon;Pajiramon;; +125;Makuramon;Makuramon;; +126;Shinduramon;Shinduramon;; +127;Caturamon;Caturamon;; +128;Chaosdramon;Chaosdramon;; +129;Machinedramon;Machinedramon;; +130;MetalSeadramon;MetalSeadramon;; +131;GigaSeadramon;GigaSeadramon;; +132;NeoMyotismon;NeoMyotismon;; +133;Dorbickmon;Dorbickmon;; +134;Splashmon;Splashmon;; +135;Zamielmon;Zamielmon;; +136;Olegmon;Olegmon;; +137;Gravimon;Gravimon;; +138;WarGreymon X;WarGreymon X;; +139;BlackWarGreymon X;BlackWarGreymon X;; +140;Seraphimon;Seraphimon;; +141;Ophanimon;Ophanimon;; +142;Cherubimon;Cherubimon;; +143;Lucemon FM;Lucemon FM;; +144;Leviamon;Leviamon;; +145;Beelzemon;Beelzemon;; +146;Lilithmon;Lilithmon;; +147;Belphemon Rage Mode;Belphemon Rage Mode;; +148;Barbamon;Barbamon;; +149;Daemon;Daemon;; +150;Goldramon;Goldramon;; +151;Magnadramon;Magnadramon;; +152;Megidramon;Megidramon;; +153;Azulongmon;Azulongmon;; +154;Baihumon;Baihumon;; +155;Zhuqiaomon;Zhuqiaomon;; +156;Ebonwumon;Ebonwumon;; +157;AncientGreymon;AncientGreymon;; +158;AncientGarurumon;AncientGarurumon;; +159;AncientBeetlemon;AncientBeetlemon;; +160;AncientKazemon;AncientKazemon;; +161;AncientMegatheriummon;AncientMegatheriummon;; +162;AncientMermaidmon;AncientMermaidmon;; +163;AncientTroymon;AncientTroymon;; +164;AncientWisemon;AncientWisemon;; +165;AncientSphinxmon;AncientSphinxmon;; +166;AncientVolcamon;AncientVolcamon;; +167;Apocalymon;Apocalymon;; +168;Huanglongmon;Huanglongmon;; +169;Imperialdramon;Imperialdramon;; +170;Imperialdramon FM;Imperialdramon FM;; +171;Imperialdramon PM;Imperialdramon PM;; +172;Omegamon;Omegamon;; +173;Gallantmon;Gallantmon;; +174;Magnamon;Magnamon;; +175;Dynasmon;Dynasmon;; +176;Crusadermon;Crusadermon;; +177;UlforceVeedramon;UlforceVeedramon;; +178;Craniamon;Craniamon;; +179;Kentaurosmon;Kentaurosmon;; +180;Leopardmon;Leopardmon;; +181;Examon;Examon;; +182;Alphamon;Alphamon;; +183;Marsmon;Marsmon;; +184;Neptunemon;Neptunemon;; +185;Merukimon;Merukimon;; +186;Venusmon;Venusmon;; +187;Minervamon;Minervamon;; +188;Vulcanusmon;Vulcanusmon;; +189;Clockmon;Clockmon;; +190;Jijimon;Jijimon;; +191;PawnChessmon (White);PawnChessmon (White);; +192;PawnChessmon (Black);PawnChessmon (Black);; +193;KnightChessmon (White);KnightChessmon (White);; +194;KnightChessmon (Black);KnightChessmon (Black);; +195;BishopChessmon;BishopChessmon;; +196;RookChessmon;RookChessmon;; +197;QueenChessmon;QueenChessmon;; +198;KingChessmon;KingChessmon;; +199;Agumon X;Agumon X;; +200;SkullScorpiomon X;SkullScorpiomon X;; +201;UlforceVeedramon X;UlforceVeedramon X;; +202;Allomon X;Allomon X;; +203;Ebemon X;Ebemon X;; +204;Okuwamon X;Okuwamon X;; +205;Omegamon X;Omegamon X;; +206;Samudramon;Samudramon;; +207;Chaosdramon X;Chaosdramon X;; +208;Gazimon X;Gazimon X;; +209;Crabmon X;Crabmon X;; +210;Gabumon X;Gabumon X;; +211;Garudamon X;Garudamon X;; +212;Garurumon X;Garurumon X;; +213;Guilmon X;Guilmon X;; +214;Growlmon X;Growlmon X;; +215;GranDracmon;GranDracmon;; +216;Greymon X;Greymon X;; +217;Kuwagamon X;Kuwagamon X;; +218;Cerberusmon X;Cerberusmon X;; +219;Kokuwamon X;Kokuwamon X;; +220;Goldramon X;Goldramon X;; +221;Gotsumon X;Gotsumon X;; +222;Gomamon X;Gomamon X;; +223;Sangloupmon;Sangloupmon;; +224;Thundermon X;Thundermon X;; +225;Seadramon X;Seadramon X;; +226;SkullBaluchimon;SkullBaluchimon;; +227;SkullMammothmon X;SkullMammothmon X;; +228;Starmon X;Starmon X;; +229;TigerVespamon;TigerVespamon;; +230;Dinorexmon;Dinorexmon;; +231;Gatomon X;Gatomon X;; +232;Tylomon X;Tylomon X;; +233;DexDorugamon;DexDorugamon;; +234;DexDoruGreymon;DexDoruGreymon;; +235;Dexmon;Dexmon;; +236;Gallantmon X;Gallantmon X;; +237;Dynasmon X;Dynasmon X;; +238;Leopardmon X;Leopardmon X;; +239;Togemon X;Togemon X;; +240;Dracmon;Dracmon;; +241;Triceramon X;Triceramon X;; +242;Nefertimon X;Nefertimon X;; +243;Hagurumon X;Hagurumon X;; +244;Palmon X;Palmon X;; +245;IceLeomon X;IceLeomon X;; +246;PrinceMamemon X;PrinceMamemon X;; +247;Plesiomon X;Plesiomon X;; +248;Salamon X;Salamon X;; +249;Vademon X;Vademon X;; +250;Betamon X;Betamon X;; +251;Beelzemon X;Beelzemon X;; +252;Magnadramon X;Magnadramon X;; +253;Magnamon X;Magnamon X;; +254;Matadormon;Matadormon;; +255;Mamemon X;Mamemon X;; +256;Mantaraymon X;Mantaraymon X;; +257;Mammothmon X;Mammothmon X;; +258;MegaSeadramon X;MegaSeadramon X;; +259;WarGrowlmon X;WarGrowlmon X;; +260;Megidramon X;Megidramon X;; +261;MetalGarurumon X;MetalGarurumon X;; +262;MetalGreymon X;MetalGreymon X;; +263;MetalTyrannomon X;MetalTyrannomon X;; +264;MetalMamemon X;MetalMamemon X;; +265;MedievalGallantmon;MedievalGallantmon;; +266;Monochromon X;Monochromon X;; +267;Lillymon X;Lillymon X;; +268;Leomon X;Leomon X;; +269;Rosemon X;Rosemon X;; +270;WereGarurumon X;WereGarurumon X;; +271;Tyrannomon;Tyrannomon;; +272;DarkTyrannomon;DarkTyrannomon;; +273;ExTyrannomon;ExTyrannomon;; +274;MasterTyrannomon;MasterTyrannomon;; +275;MameTyramon;MameTyramon;; +276;RustTyrannomon;RustTyrannomon;; +277;Kokuwamon;Kokuwamon;; +278;Okuwamon;Okuwamon;; +279;GranKuwagamon;GranKuwagamon;; +280;GrandisKuwagamon;GrandisKuwagamon;; +281;BladeKuwagamon;BladeKuwagamon;; +282;MetallifeKuwagamon;MetallifeKuwagamon;; +283;Kimeramon;Kimeramon;; +284;Dorugamon;Dorugamon;; +285;DoruGreymon;DoruGreymon;; +286;Dorugoramon;Dorugoramon;; +287;DexDorugoramon;DexDorugoramon;; +288;Raptordramon;Raptordramon;; +289;Grademon;Grademon;; +290;Ryudamon;Ryudamon;; +291;Ginryumon;Ginryumon;; +292;Hisyaryumon;Hisyaryumon;; +293;Ouryumon;Ouryumon;; +294;Shoutmon;Shoutmon;; +295;Shoutmon X2;Shoutmon X2;; +296;Shoutmon X3;Shoutmon X3;; +297;Shoutmon X4;Shoutmon X4;; +298;Shoutmon X4B;Shoutmon X4B;; +299;Shoutmon X5;Shoutmon X5;; +300;Shoutmon X5B;Shoutmon X5B;; +301;OmegaShoutmon;OmegaShoutmon;; +302;Shoutmon DX;Shoutmon DX;; +303;Shoutmon X7;Shoutmon X7;; +304;Gumdramon;Gumdramon;; +305;Arresterdramon;Arresterdramon;; +306;ToyAgumon;ToyAgumon;; +307;Omekamon;Omekamon;; +308;ShineGreymon BM;ShineGreymon BM;; +309;MirageGaogamon BM;MirageGaogamon BM;; +310;Rosemon BM;Rosemon BM;; +311;Ravemon BM;Ravemon BM;; +312;Aurumon;Aurumon;; +313;Swanmon;Swanmon;; +314;Sethmon;Sethmon;; +315;Pipismon;Pipismon;; +316;Pteramon;Pteramon;; +317;Halsemon;Halsemon;; +318;Elephantmon;Elephantmon;; +319;Kongoumon;Kongoumon;; +320;Peacockmon;Peacockmon;; +321;Maildramon;Maildramon;; +322;Rhinomon;Rhinomon;; +323;Goatmon;Goatmon;; +324;Sagittarimon;Sagittarimon;; +325;Sheepmon;Sheepmon;; +326;Bullmon;Bullmon;; +327;Pegasusmon;Pegasusmon;; +328;Moosemon;Moosemon;; +329;Kabukimon;Kabukimon;; +330;Shurimon;Shurimon;; +331;Nohemon;Nohemon;; +332;Frogmon;Frogmon;; +333;Ponchomon;Ponchomon;; +334;Yasyamon;Yasyamon;; +335;Archelomon;Archelomon;; +336;Orcamon;Orcamon;; +337;Submarimon;Submarimon;; +338;Tylomon;Tylomon;; +339;Depthmon;Depthmon;; +340;Mantaraymon;Mantaraymon;; +341;Searchmon;Searchmon;; +342;Digmon;Digmon;; +343;Butterflymon;Butterflymon;; +344;Honeybeemon;Honeybeemon;; +345;Flybeemon;Flybeemon;; +346;Mothmon;Mothmon;; +347;Gargomon;Gargomon;; +348;Quetzalmon;Quetzalmon;; +349;Seahomon;Seahomon;; +350;Nefertimon;Nefertimon;; +351;Harpymon;Harpymon;; +352;Manbomon;Manbomon;; +353;Opossummon;Opossummon;; +354;Chamelemon;Chamelemon;; +355;Kangarumon;Kangarumon;; +356;Toucanmon;Toucanmon;; +357;Pucchiemon;Pucchiemon;; +358;Pucchiemon (Green);Pucchiemon (Green);; +359;Prairiemon;Prairiemon;; +360;Allomon;Allomon;; +361;Salamandermon;Salamandermon;; +362;Shadramon;Shadramon;; +363;Baromon;Baromon;; +364;FlameWizardmon;FlameWizardmon;; +365;Flamedramon;Flamedramon;; +366;Boarmon;Boarmon;; +367;Lynxmon;Lynxmon;; +368;Kenkimon;Kenkimon;; +369;Thunderbirdmon;Thunderbirdmon;; +370;Stegomon;Stegomon;; +371;Sepikmon;Sepikmon;; +372;Togemogumon;Togemogumon;; +373;Rabbitmon;Rabbitmon;; +374;Raidramon;Raidramon;; +375;Linkmon;Linkmon;; +376;GoldVeedramon;GoldVeedramon;; +377;Rapidmon (Armor);Rapidmon (Armor);; +378;Agunimon;Agunimon;; +379;Aldamon;Aldamon;; +380;BurningGreymon;BurningGreymon;; +381;EmperorGreymon;EmperorGreymon;; +382;Flamemon;Flamemon;; +383;Calmaramon;Calmaramon;; +384;Ranamon;Ranamon;; +385;Daipenmon;Daipenmon;; +386;Kumamon;Kumamon;; +387;Korikakumon;Korikakumon;; +388;JetSilphymon;JetSilphymon;; +389;Zephyrmon;Zephyrmon;; +390;Kazemon;Kazemon;; +391;Beetlemon;Beetlemon;; +392;MetalKabuterimon;MetalKabuterimon;; +393;RhinoKabuterimon;RhinoKabuterimon;; +394;Arbormon;Arbormon;; +395;Petaldramon;Petaldramon;; +396;Gigasmon;Gigasmon;; +397;Grumblemon;Grumblemon;; +398;Sakkakumon;Sakkakumon;; +399;Mercurymon;Mercurymon;; +400;Lobomon;Lobomon;; +401;KendoGarurumon;KendoGarurumon;; +402;BeoWolfmon;BeoWolfmon;; +403;MagnaGarurumon;MagnaGarurumon;; +404;Strabimon;Strabimon;; +405;JagerLoweemon;JagerLoweemon;; +406;Duskmon;Duskmon;; +407;Velgemon;Velgemon;; +408;Rhihimon;Rhihimon;; +409;Loweemon;Loweemon;; +410;Yggdrasill_7D6;Yggdrasill_7D6;; +411;Wizardmon;Wizardmon;; +412;Garbagemon;Garbagemon;; +413;Kuwagamon;Kuwagamon;; +414;Centarumon;Centarumon;; +415;Shellmon;Shellmon;; +416;Cherrymon;Cherrymon;; +417;Digitamamon;Digitamamon;; +418;Deramon;Deramon;; +419;ShogunGekomon;ShogunGekomon;; +420;Drimogemon;Drimogemon;; +421;Nanimon;Nanimon;; +422;Mojyamon;Mojyamon;; +423;Monochromon;Monochromon;; +424;Frigimon;Frigimon;; +425;Lillymon;Lillymon;; +426;Salamon;Salamon;; +427;WaruMonzaemon;WaruMonzaemon;; +428;Kuramon;Kuramon;; +429;Tsumemon;Tsumemon;; +430;Keramon;Keramon;; +431;Chrysalimon;Chrysalimon;; +432;Infermon;Infermon;; +433;Diaboromon;Diaboromon;; +434;Sunmon;Sunmon;; +435;Coronamon;Coronamon;; +436;Firamon;Firamon;; +437;Flaremon;Flaremon;; +438;Apollomon;Apollomon;; +439;Moonmon;Moonmon;; +440;Lunamon;Lunamon;; +441;Lekismon;Lekismon;; +442;Crescemon;Crescemon;; +443;Dianamon;Dianamon;; +444;Babamon;Babamon;; +445;Agumon (2006);Agumon (2006);; +446;ProfessorAgumon;ProfessorAgumon;; +447;Stingmon;Stingmon;; +448;Wormmon;Wormmon;; +449;Aquilamon;Aquilamon;; +450;Armadillomon;Armadillomon;; +451;Wendigomon;Wendigomon;; +452;Gwappamon;Gwappamon;; +453;Sakuyamon;Sakuyamon;; +454;Shawjamon;Shawjamon;; +455;Shakkoumon;Shakkoumon;; +456;Silphymon;Silphymon;; +457;Taomon;Taomon;; +458;Chirinmon;Chirinmon;; +459;Gallantmon Crimson Mode;Gallantmon Crimson Mode;; +460;Falcomon;Falcomon;; +461;Peckmon;Peckmon;; +462;Monodramon;Monodramon;; +463;Crowmon;Crowmon;; +464;Ravemon;Ravemon;; +465;Reppamon;Reppamon;; +466;SkullGreymon;SkullGreymon;; +467;Hawkmon;Hawkmon;; +468;Ankylomon;Ankylomon;; +469;Terriermon;Terriermon;; +470;Gargomon;Gargomon;; +471;Lopmon;Lopmon;; +472;Cherubimon (Evil);Cherubimon (Evil);; +473;Rapidmon;Rapidmon;; +474;MegaGargomon;MegaGargomon;; +475;Renamon;Renamon;; +476;Kyubimon;Kyubimon;; +477;Cyberdramon;Cyberdramon;; +478;Justimon (Blitz Arm);Justimon (Blitz Arm);; +479;Beelzemon Blast Mode;Beelzemon Blast Mode;; +480;Mamemon;Mamemon;; +481;MetalMamemon;MetalMamemon;; +482;PrinceMamemon;PrinceMamemon;; +483;Ogremon;Ogremon;; +484;Veedramon;Veedramon;; +485;AeroVeedramon;AeroVeedramon;; +486;Piedmon;Piedmon;; +487;Vegiemon;Vegiemon;; +488;Woodmon;Woodmon;; +489;Puppetmon;Puppetmon;; +490;Gigadramon;Gigadramon;; +491;Piximon;Piximon;; +492;Vademon;Vademon;; +493;Betamon;Betamon;; +494;Hi-Andromon;Hi-Andromon;; +495;Lucemon;Lucemon;; +496;Boltmon;Boltmon;; +497;SkullMeramon;SkullMeramon;; +498;GrapLeomon;GrapLeomon;; +499;SaberLeomon;SaberLeomon;; +500;IceLeomon;IceLeomon;; +501;Pabumon;Pabumon;; +502;Motimon;Motimon;; +503;Lucemon Satan Mode;Lucemon Satan Mode;; +504;Whamon;Whamon;; +505;Parrotmon;Parrotmon;; +506;Gekomon;Gekomon;; +507;Susanoomon;Susanoomon;; +508;Fake ProfessorAgumon;Fake ProfessorAgumon;; +509;Lucemon Larva;Lucemon Larva;; +510;Alphamon Ouryuken;Alphamon Ouryuken;; +511;Millenniummon;Millenniummon;; +512;ZeedMillenniummon;ZeedMillenniummon;; +513;MoonMillenniummon;MoonMillenniummon;; +514;Belphemon Sleep Mode;Belphemon Sleep Mode;; +515;KingEtemon;KingEtemon;; +516;ShogunMamemon;ShogunMamemon;; +517;BigMamemon;BigMamemon;; +518;CatchMamemon;CatchMamemon;; +519;Fugamon;Fugamon;; +520;Shamanmon;Shamanmon;; +521;GoldNumemon;GoldNumemon;; +522;PlatinumSukamon;PlatinumSukamon;; +523;SkullScorpiomon;SkullScorpiomon;; +524;Ebemon;Ebemon;; +525;Gazimon;Gazimon;; +526;Crabmon;Crabmon;; +527;Cerberusmon;Cerberusmon;; +528;Gotsumon;Gotsumon;; +529;Thundermon;Thundermon;; +530;SkullMammothmon;SkullMammothmon;; +531;Starmon;Starmon;; +532;Titamon;Titamon;; +533;Triceramon;Triceramon;; +534;Plesiomon;Plesiomon;; +535;Mammothmon;Mammothmon;; +536;UltimateBrachiomon;UltimateBrachiomon;; +537;Fanbeemon;Fanbeemon;; +538;TobuCatmon;TobuCatmon;; +539;Dinotigermon;Dinotigermon;; +540;ClavisAngemon;ClavisAngemon;; +541;MetalPiranimon;MetalPiranimon;; +542;Rhinomon X;Rhinomon X;; +543;Pteramon X;Pteramon X;; +544;Otamamon X;Otamamon X;; +545;Gesomon X;Gesomon X;; +546;Syakomon X;Syakomon X;; +547;Dobermon X;Dobermon X;; +548;Otamamon;Otamamon;; +549;Gesomon;Gesomon;; +550;Syakomon;Syakomon;; +551;Dobermon;Dobermon;; +552;Elecmon;Elecmon;; +553;Penguinmon;Penguinmon;; +554;Kunemon;Kunemon;; +555;Tsunomon;Tsunomon;; +556;Punimon;Punimon;; +557;Tanemon;Tanemon;; +558;Kokatorimon;Kokatorimon;; +559;Unimon;Unimon;; +560;Ninjamon;Ninjamon;; +561;Coelamon;Coelamon;; +562;Giromon;Giromon;; +563;Nyokimon;Nyokimon;; +564;Yokomon;Yokomon;; +565;Pichimon;Pichimon;; +566;Bukamon;Bukamon;; +567;Nyaromon;Nyaromon;; +568;YukimiBotamon;YukimiBotamon;; +569;Chibomon;Chibomon;; +570;DemiVeemon;DemiVeemon;; +571;Pururumon;Pururumon;; +572;Poromon;Poromon;; +573;Tsubumon;Tsubumon;; +574;Upamon;Upamon;; +575;Leafmon;Leafmon;; +576;Minomon;Minomon;; +577;Zerimon;Zerimon;; +578;Gummymon;Gummymon;; +579;Relemon;Relemon;; +580;Viximon;Viximon;; +581;Conomon;Conomon;; +582;Kokomon;Kokomon;; +583;MetalKoromon;MetalKoromon;; +584;Kotemon;Kotemon;; +585;Chapmon;Chapmon;; +586;DemiMeramon;DemiMeramon;; +587;Calumon;Calumon;; +588;Kapurimon;Kapurimon;; \ No newline at end of file diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/CardNames2.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/CardNames2.csv new file mode 100644 index 0000000..926efba --- /dev/null +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/CardNames2.csv @@ -0,0 +1,589 @@ +index;original;replace;excludeTerms;excludePaths +1;Botamon;Botamon;; +2;Dodomon;Dodomon;; +3;Yuramon;Yuramon;; +4;Poyomon;Poyomon;; +5;Jyarimon;Jyarimon;; +6;Koromon;Koromon;; +7;Wanyamon;Wanyamon;; +8;Budmon;Budmon;; +9;Tokomon;Tokomon;; +10;Gigimon;Gigimon;; +11;Agumon;Agumon;; +12;Gaomon;Gaomon;; +13;Biyomon;Biyomon;; +14;Veemon;Veemon;; +15;Hagurumon;Hagurumon;; +16;Candlemon;Candlemon;; +17;Chuumon;Chuumon;; +18;Tsukaimon;Tsukaimon;; +19;Kamemon;Kamemon;; +20;Kudamon;Kudamon;; +21;Lalamon;Lalamon;; +22;Impmon;Impmon;; +23;Guilmon;Guilmon;; +24;Patamon;Patamon;; +25;DemiDevimon;DemiDevimon;; +26;BlackGabumon;BlackGabumon;; +27;Psychemon;Psychemon;; +28;Goburimon;Goburimon;; +29;SnowAgumon;SnowAgumon;; +30;BlackAgumon;BlackAgumon;; +31;Gabumon;Gabumon;; +32;Solarmon;Solarmon;; +33;Tentomon;Tentomon;; +34;Gomamon;Gomamon;; +35;Palmon;Palmon;; +36;Dorumon;Dorumon;; +37;Commandramon;Commandramon;; +38;Greymon;Greymon;; +39;Gaogamon;Gaogamon;; +40;Birdramon;Birdramon;; +41;ExVeemon;ExVeemon;; +42;Meramon;Meramon;; +43;Airdramon;Airdramon;; +44;Garurumon;Garurumon;; +45;Bakemon;Bakemon;; +46;BlackGatomon;BlackGatomon;; +47;GeoGreymon;GeoGreymon;; +48;Sunflowmon;Sunflowmon;; +49;Numemon;Numemon;; +50;Leomon;Leomon;; +51;Growlmon;Growlmon;; +52;Angemon;Angemon;; +53;Growlmon (Orange);Growlmon (Orange);; +54;Gatomon;Gatomon;; +55;Devimon;Devimon;; +56;BlackGrowlmon;BlackGrowlmon;; +57;IceDevimon;IceDevimon;; +58;BlackGarurumon;BlackGarurumon;; +59;Gururumon;Gururumon;; +60;Geremon;Geremon;; +61;Kabuterimon;Kabuterimon;; +62;Sukamon;Sukamon;; +63;Ikkakumon;Ikkakumon;; +64;Guardromon;Guardromon;; +65;Seadramon;Seadramon;; +66;Togemon;Togemon;; +67;Sealsdramon;Sealsdramon;; +68;MetalGreymon;MetalGreymon;; +69;MachGaogamon;MachGaogamon;; +70;Garudamon;Garudamon;; +71;Paildramon;Paildramon;; +72;MagnaAngemon;MagnaAngemon;; +73;LadyDevimon;LadyDevimon;; +74;Monzaemon;Monzaemon;; +75;RizeGreymon;RizeGreymon;; +76;Lilamon;Lilamon;; +77;Myotismon;Myotismon;; +78;MegaSeadramon;MegaSeadramon;; +79;WarGrowlmon;WarGrowlmon;; +80;BlackWarGrowlmon;BlackWarGrowlmon;; +81;WereGarurumon;WereGarurumon;; +82;Angewomon;Angewomon;; +83;BlueMeramon;BlueMeramon;; +84;BlackWereGarurumon;BlackWereGarurumon;; +85;WarGrowlmon (Orange);WarGrowlmon (Orange);; +86;MegaKabuterimon;MegaKabuterimon;; +87;Etemon;Etemon;; +88;Andromon;Andromon;; +89;Zudomon;Zudomon;; +90;MetalTyrannomon;MetalTyrannomon;; +91;Megadramon;Megadramon;; +92;MetalGreymon (Virus);MetalGreymon (Virus);; +93;Tankdramon;Tankdramon;; +94;WarGreymon;WarGreymon;; +95;MirageGaogamon;MirageGaogamon;; +96;Phoenixmon;Phoenixmon;; +97;BlackWarGreymon;BlackWarGreymon;; +98;ShineGreymon;ShineGreymon;; +99;VictoryGreymon;VictoryGreymon;; +100;MarineAngemon;MarineAngemon;; +101;Rosemon;Rosemon;; +102;PlatinumNumemon;PlatinumNumemon;; +103;BanchoLeomon;BanchoLeomon;; +104;Darkdramon;Darkdramon;; +105;Chaosmon;Chaosmon;; +106;MetalGarurumon;MetalGarurumon;; +107;BlackMetalGarurumon;BlackMetalGarurumon;; +108;ZeedGarurumon;ZeedGarurumon;; +109;HerculesKabuterimon;HerculesKabuterimon;; +110;MetalEtemon;MetalEtemon;; +111;Vikemon;Vikemon;; +112;ChaosGallantmon;ChaosGallantmon;; +113;MaloMyotismon;MaloMyotismon;; +114;Murmukusmon;Murmukusmon;; +115;Ghoulmon;Ghoulmon;; +116;Vikaralamon;Vikaralamon;; +117;Kumbhiramon;Kumbhiramon;; +118;Vajramon;Vajramon;; +119;Mihiramon;Mihiramon;; +120;Antylamon;Antylamon;; +121;Majiramon;Majiramon;; +122;Sandiramon;Sandiramon;; +123;Indramon;Indramon;; +124;Pajiramon;Pajiramon;; +125;Makuramon;Makuramon;; +126;Shinduramon;Shinduramon;; +127;Caturamon;Caturamon;; +128;Chaosdramon;Chaosdramon;; +129;Machinedramon;Machinedramon;; +130;MetalSeadramon;MetalSeadramon;; +131;GigaSeadramon;GigaSeadramon;; +132;NeoMyotismon;NeoMyotismon;; +133;Dorbickmon;Dorbickmon;; +134;Splashmon;Splashmon;; +135;Zamielmon;Zamielmon;; +136;Olegmon;Olegmon;; +137;Gravimon;Gravimon;; +138;WarGreymon X;WarGreymon X;; +139;BlackWarGreymon X;BlackWarGreymon X;; +140;Seraphimon;Seraphimon;; +141;Ophanimon;Ophanimon;; +142;Cherubimon;Cherubimon;; +143;Lucemon FM;Lucemon FM;; +144;Leviamon;Leviamon;; +145;Beelzemon;Beelzemon;; +146;Lilithmon;Lilithmon;; +147;Belphemon Rage Mode;Belphemon Rage Mode;; +148;Barbamon;Barbamon;; +149;Daemon;Daemon;; +150;Goldramon;Goldramon;; +151;Magnadramon;Magnadramon;; +152;Megidramon;Megidramon;; +153;Azulongmon;Azulongmon;; +154;Baihumon;Baihumon;; +155;Zhuqiaomon;Zhuqiaomon;; +156;Ebonwumon;Ebonwumon;; +157;AncientGreymon;AncientGreymon;; +158;AncientGarurumon;AncientGarurumon;; +159;AncientBeetlemon;AncientBeetlemon;; +160;AncientKazemon;AncientKazemon;; +161;AncientMegatheriummon;AncientMegatheriummon;; +162;AncientMermaidmon;AncientMermaidmon;; +163;AncientTroymon;AncientTroymon;; +164;AncientWisemon;AncientWisemon;; +165;AncientSphinxmon;AncientSphinxmon;; +166;AncientVolcamon;AncientVolcamon;; +167;Apocalymon;Apocalymon;; +168;Huanglongmon;Huanglongmon;; +169;Imperialdramon;Imperialdramon;; +170;Imperialdramon FM;Imperialdramon FM;; +171;Imperialdramon PM;Imperialdramon PM;; +172;Omegamon;Omegamon;; +173;Gallantmon;Gallantmon;; +174;Magnamon;Magnamon;; +175;Dynasmon;Dynasmon;; +176;Crusadermon;Crusadermon;; +177;UlforceVeedramon;UlforceVeedramon;; +178;Craniamon;Craniamon;; +179;Kentaurosmon;Kentaurosmon;; +180;Leopardmon;Leopardmon;; +181;Examon;Examon;; +182;Alphamon;Alphamon;; +183;Marsmon;Marsmon;; +184;Neptunemon;Neptunemon;; +185;Merukimon;Merukimon;; +186;Venusmon;Venusmon;; +187;Minervamon;Minervamon;; +188;Vulcanusmon;Vulcanusmon;; +189;Clockmon;Clockmon;; +190;Jijimon;Jijimon;; +191;PawnChessmon (White);PawnChessmon (White);; +192;PawnChessmon (Black);PawnChessmon (Black);; +193;KnightChessmon (White);KnightChessmon (White);; +194;KnightChessmon (Black);KnightChessmon (Black);; +195;BishopChessmon;BishopChessmon;; +196;RookChessmon;RookChessmon;; +197;QueenChessmon;QueenChessmon;; +198;KingChessmon;KingChessmon;; +199;Agumon X;Agumon X;; +200;SkullScorpiomon X;SkullScorpiomon X;; +201;UlforceVeedramon X;UlforceVeedramon X;; +202;Allomon X;Allomon X;; +203;Ebemon X;Ebemon X;; +204;Okuwamon X;Okuwamon X;; +205;Omegamon X;Omegamon X;; +206;Samudramon;Samudramon;; +207;Chaosdramon X;Chaosdramon X;; +208;Gazimon X;Gazimon X;; +209;Crabmon X;Crabmon X;; +210;Gabumon X;Gabumon X;; +211;Garudamon X;Garudamon X;; +212;Garurumon X;Garurumon X;; +213;Guilmon X;Guilmon X;; +214;Growlmon X;Growlmon X;; +215;GranDracmon;GranDracmon;; +216;Greymon X;Greymon X;; +217;Kuwagamon X;Kuwagamon X;; +218;Cerberusmon X;Cerberusmon X;; +219;Kokuwamon X;Kokuwamon X;; +220;Goldramon X;Goldramon X;; +221;Gotsumon X;Gotsumon X;; +222;Gomamon X;Gomamon X;; +223;Sangloupmon;Sangloupmon;; +224;Thundermon X;Thundermon X;; +225;Seadramon X;Seadramon X;; +226;SkullBaluchimon;SkullBaluchimon;; +227;SkullMammothmon X;SkullMammothmon X;; +228;Starmon X;Starmon X;; +229;TigerVespamon;TigerVespamon;; +230;Dinorexmon;Dinorexmon;; +231;Gatomon X;Gatomon X;; +232;Tylomon X;Tylomon X;; +233;DexDorugamon;DexDorugamon;; +234;DexDoruGreymon;DexDoruGreymon;; +235;Dexmon;Dexmon;; +236;Gallantmon X;Gallantmon X;; +237;Dynasmon X;Dynasmon X;; +238;Leopardmon X;Leopardmon X;; +239;Togemon X;Togemon X;; +240;Dracmon;Dracmon;; +241;Triceramon X;Triceramon X;; +242;Nefertimon X;Nefertimon X;; +243;Hagurumon X;Hagurumon X;; +244;Palmon X;Palmon X;; +245;IceLeomon X;IceLeomon X;; +246;PrinceMamemon X;PrinceMamemon X;; +247;Plesiomon X;Plesiomon X;; +248;Salamon X;Salamon X;; +249;Vademon X;Vademon X;; +250;Betamon X;Betamon X;; +251;Beelzemon X;Beelzemon X;; +252;Magnadramon X;Magnadramon X;; +253;Magnamon X;Magnamon X;; +254;Matadormon;Matadormon;; +255;Mamemon X;Mamemon X;; +256;Mantaraymon X;Mantaraymon X;; +257;Mammothmon X;Mammothmon X;; +258;MegaSeadramon X;MegaSeadramon X;; +259;WarGrowlmon X;WarGrowlmon X;; +260;Megidramon X;Megidramon X;; +261;MetalGarurumon X;MetalGarurumon X;; +262;MetalGreymon X;MetalGreymon X;; +263;MetalTyrannomon X;MetalTyrannomon X;; +264;MetalMamemon X;MetalMamemon X;; +265;MedievalGallantmon;MedievalGallantmon;; +266;Monochromon X;Monochromon X;; +267;Lillymon X;Lillymon X;; +268;Leomon X;Leomon X;; +269;Rosemon X;Rosemon X;; +270;WereGarurumon X;WereGarurumon X;; +271;Tyrannomon;Tyrannomon;; +272;DarkTyrannomon;DarkTyrannomon;; +273;ExTyrannomon;ExTyrannomon;; +274;MasterTyrannomon;MasterTyrannomon;; +275;MameTyramon;MameTyramon;; +276;RustTyrannomon;RustTyrannomon;; +277;Kokuwamon;Kokuwamon;; +278;Okuwamon;Okuwamon;; +279;GranKuwagamon;GranKuwagamon;; +280;GrandisKuwagamon;GrandisKuwagamon;; +281;BladeKuwagamon;BladeKuwagamon;; +282;MetallifeKuwagamon;MetallifeKuwagamon;; +283;Kimeramon;Kimeramon;; +284;Dorugamon;Dorugamon;; +285;DoruGreymon;DoruGreymon;; +286;Dorugoramon;Dorugoramon;; +287;DexDorugoramon;DexDorugoramon;; +288;Raptordramon;Raptordramon;; +289;Grademon;Grademon;; +290;Ryudamon;Ryudamon;; +291;Ginryumon;Ginryumon;; +292;Hisyaryumon;Hisyaryumon;; +293;Ouryumon;Ouryumon;; +294;Shoutmon;Shoutmon;; +295;Shoutmon X2;Shoutmon X2;; +296;Shoutmon X3;Shoutmon X3;; +297;Shoutmon X4;Shoutmon X4;; +298;Shoutmon X4B;Shoutmon X4B;; +299;Shoutmon X5;Shoutmon X5;; +300;Shoutmon X5B;Shoutmon X5B;; +301;OmegaShoutmon;OmegaShoutmon;; +302;Shoutmon DX;Shoutmon DX;; +303;Shoutmon X7;Shoutmon X7;; +304;Gumdramon;Gumdramon;; +305;Arresterdramon;Arresterdramon;; +306;ToyAgumon;ToyAgumon;; +307;Omekamon;Omekamon;; +308;ShineGreymon BM;ShineGreymon BM;; +309;MirageGaogamon BM;MirageGaogamon BM;; +310;Rosemon BM;Rosemon BM;; +311;Ravemon BM;Ravemon BM;; +312;Aurumon;Aurumon;; +313;Swanmon;Swanmon;; +314;Sethmon;Sethmon;; +315;Pipismon;Pipismon;; +316;Pteramon;Pteramon;; +317;Halsemon;Halsemon;; +318;Elephantmon;Elephantmon;; +319;Kongoumon;Kongoumon;; +320;Peacockmon;Peacockmon;; +321;Maildramon;Maildramon;; +322;Rhinomon;Rhinomon;; +323;Goatmon;Goatmon;; +324;Sagittarimon;Sagittarimon;; +325;Sheepmon;Sheepmon;; +326;Bullmon;Bullmon;; +327;Pegasusmon;Pegasusmon;; +328;Moosemon;Moosemon;; +329;Kabukimon;Kabukimon;; +330;Shurimon;Shurimon;; +331;Nohemon;Nohemon;; +332;Frogmon;Frogmon;; +333;Ponchomon;Ponchomon;; +334;Yasyamon;Yasyamon;; +335;Archelomon;Archelomon;; +336;Orcamon;Orcamon;; +337;Submarimon;Submarimon;; +338;Tylomon;Tylomon;; +339;Depthmon;Depthmon;; +340;Mantaraymon;Mantaraymon;; +341;Searchmon;Searchmon;; +342;Digmon;Digmon;; +343;Butterflymon;Butterflymon;; +344;Honeybeemon;Honeybeemon;; +345;Flybeemon;Flybeemon;; +346;Mothmon;Mothmon;; +347;Gargomon;Gargomon;; +348;Quetzalmon;Quetzalmon;; +349;Seahomon;Seahomon;; +350;Nefertimon;Nefertimon;; +351;Harpymon;Harpymon;; +352;Manbomon;Manbomon;; +353;Opossummon;Opossummon;; +354;Chamelemon;Chamelemon;; +355;Kangarumon;Kangarumon;; +356;Toucanmon;Toucanmon;; +357;Pucchiemon;Pucchiemon;; +358;Pucchiemon (Green);Pucchiemon (Green);; +359;Prairiemon;Prairiemon;; +360;Allomon;Allomon;; +361;Salamandermon;Salamandermon;; +362;Shadramon;Shadramon;; +363;Baromon;Baromon;; +364;FlameWizardmon;FlameWizardmon;; +365;Flamedramon;Flamedramon;; +366;Boarmon;Boarmon;; +367;Lynxmon;Lynxmon;; +368;Kenkimon;Kenkimon;; +369;Thunderbirdmon;Thunderbirdmon;; +370;Stegomon;Stegomon;; +371;Sepikmon;Sepikmon;; +372;Togemogumon;Togemogumon;; +373;Rabbitmon;Rabbitmon;; +374;Raidramon;Raidramon;; +375;Linkmon;Linkmon;; +376;GoldVeedramon;GoldVeedramon;; +377;Rapidmon (Armor);Rapidmon (Armor);; +378;Agunimon;Agunimon;; +379;Aldamon;Aldamon;; +380;BurningGreymon;BurningGreymon;; +381;EmperorGreymon;EmperorGreymon;; +382;Flamemon;Flamemon;; +383;Calmaramon;Calmaramon;; +384;Ranamon;Ranamon;; +385;Daipenmon;Daipenmon;; +386;Kumamon;Kumamon;; +387;Korikakumon;Korikakumon;; +388;JetSilphymon;JetSilphymon;; +389;Zephyrmon;Zephyrmon;; +390;Kazemon;Kazemon;; +391;Beetlemon;Beetlemon;; +392;MetalKabuterimon;MetalKabuterimon;; +393;RhinoKabuterimon;RhinoKabuterimon;; +394;Arbormon;Arbormon;; +395;Petaldramon;Petaldramon;; +396;Gigasmon;Gigasmon;; +397;Grumblemon;Grumblemon;; +398;Sakkakumon;Sakkakumon;; +399;Mercurymon;Mercurymon;; +400;Lobomon;Lobomon;; +401;KendoGarurumon;KendoGarurumon;; +402;BeoWolfmon;BeoWolfmon;; +403;MagnaGarurumon;MagnaGarurumon;; +404;Strabimon;Strabimon;; +405;JagerLoweemon;JagerLoweemon;; +406;Duskmon;Duskmon;; +407;Velgemon;Velgemon;; +408;Rhihimon;Rhihimon;; +409;Loweemon;Loweemon;; +410;Yggdrasill_7D6;Yggdrasill_7D6;; +411;Wizardmon;Wizardmon;; +412;Garbagemon;Garbagemon;; +413;Kuwagamon;Kuwagamon;; +414;Centarumon;Centarumon;; +415;Shellmon;Shellmon;; +416;Cherrymon;Cherrymon;; +417;Digitamamon;Digitamamon;; +418;Deramon;Deramon;; +419;ShogunGekomon;ShogunGekomon;; +420;Drimogemon;Drimogemon;; +421;Nanimon;Nanimon;; +422;Mojyamon;Mojyamon;; +423;Monochromon;Monochromon;; +424;Frigimon;Frigimon;; +425;Lillymon;Lillymon;; +426;Salamon;Salamon;; +427;WaruMonzaemon;WaruMonzaemon;; +428;Kuramon;Kuramon;; +429;Tsumemon;Tsumemon;; +430;Keramon;Keramon;; +431;Chrysalimon;Chrysalimon;; +432;Infermon;Infermon;; +433;Diaboromon;Diaboromon;; +434;Sunmon;Sunmon;; +435;Coronamon;Coronamon;; +436;Firamon;Firamon;; +437;Flaremon;Flaremon;; +438;Apollomon;Apollomon;; +439;Moonmon;Moonmon;; +440;Lunamon;Lunamon;; +441;Lekismon;Lekismon;; +442;Crescemon;Crescemon;; +443;Dianamon;Dianamon;; +444;Babamon;Babamon;; +445;Agumon (2006);Agumon (2006);; +446;ProfessorAgumon;ProfessorAgumon;; +447;Stingmon;Stingmon;; +448;Wormmon;Wormmon;; +449;Aquilamon;Aquilamon;; +450;Armadillomon;Armadillomon;; +451;Wendigomon;Wendigomon;; +452;Gwappamon;Gwappamon;; +453;Sakuyamon;Sakuyamon;; +454;Shawjamon;Shawjamon;; +455;Shakkoumon;Shakkoumon;; +456;Silphymon;Silphymon;; +457;Taomon;Taomon;; +458;Chirinmon;Chirinmon;; +459;Gallantmon Crimson Mode;Gallantmon Crimson Mode;; +460;Falcomon;Falcomon;; +461;Peckmon;Peckmon;; +462;Monodramon;Monodramon;; +463;Crowmon;Crowmon;; +464;Ravemon;Ravemon;; +465;Reppamon;Reppamon;; +466;SkullGreymon;SkullGreymon;; +467;Hawkmon;Hawkmon;; +468;Ankylomon;Ankylomon;; +469;Terriermon;Terriermon;; +470;Gargomon;Gargomon;; +471;Lopmon;Lopmon;; +472;Cherubimon (Evil);Cherubimon (Evil);; +473;Rapidmon;Rapidmon;; +474;MegaGargomon;MegaGargomon;; +475;Renamon;Renamon;; +476;Kyubimon;Kyubimon;; +477;Cyberdramon;Cyberdramon;; +478;Justimon (Blitz Arm);Justimon (Blitz Arm);; +479;Beelzemon Blast Mode;Beelzemon Blast Mode;; +480;Mamemon;Mamemon;; +481;MetalMamemon;MetalMamemon;; +482;PrinceMamemon;PrinceMamemon;; +483;Ogremon;Ogremon;; +484;Veedramon;Veedramon;; +485;AeroVeedramon;AeroVeedramon;; +486;Piedmon;Piedmon;; +487;Vegiemon;Vegiemon;; +488;Woodmon;Woodmon;; +489;Puppetmon;Puppetmon;; +490;Gigadramon;Gigadramon;; +491;Piximon;Piximon;; +492;Vademon;Vademon;; +493;Betamon;Betamon;; +494;Hi-Andromon;Hi-Andromon;; +495;Lucemon;Lucemon;; +496;Boltmon;Boltmon;; +497;SkullMeramon;SkullMeramon;; +498;GrapLeomon;GrapLeomon;; +499;SaberLeomon;SaberLeomon;; +500;IceLeomon;IceLeomon;; +501;Pabumon;Pabumon;; +502;Motimon;Motimon;; +503;Lucemon Satan Mode;Lucemon Satan Mode;; +504;Whamon;Whamon;; +505;Parrotmon;Parrotmon;; +506;Gekomon;Gekomon;; +507;Susanoomon;Susanoomon;; +508;Fake ProfessorAgumon;Fake ProfessorAgumon;; +509;Lucemon Larva;Lucemon Larva;; +510;Alphamon Ouryuken;Alphamon Ouryuken;; +511;Millenniummon;Millenniummon;; +512;ZeedMillenniummon;ZeedMillenniummon;; +513;MoonMillenniummon;MoonMillenniummon;; +514;Belphemon Sleep Mode;Belphemon Sleep Mode;; +515;KingEtemon;KingEtemon;; +516;ShogunMamemon;ShogunMamemon;; +517;BigMamemon;BigMamemon;; +518;CatchMamemon;CatchMamemon;; +519;Fugamon;Fugamon;; +520;Shamanmon;Shamanmon;; +521;GoldNumemon;GoldNumemon;; +522;PlatinumSukamon;PlatinumSukamon;; +523;SkullScorpiomon;SkullScorpiomon;; +524;Ebemon;Ebemon;; +525;Gazimon;Gazimon;; +526;Crabmon;Crabmon;; +527;Cerberusmon;Cerberusmon;; +528;Gotsumon;Gotsumon;; +529;Thundermon;Thundermon;; +530;SkullMammothmon;SkullMammothmon;; +531;Starmon;Starmon;; +532;Titamon;Titamon;; +533;Triceramon;Triceramon;; +534;Plesiomon;Plesiomon;; +535;Mammothmon;Mammothmon;; +536;UltimateBrachiomon;UltimateBrachiomon;; +537;Fanbeemon;Fanbeemon;; +538;TobuCatmon;TobuCatmon;; +539;Dinotigermon;Dinotigermon;; +540;ClavisAngemon;ClavisAngemon;; +541;MetalPiranimon;MetalPiranimon;; +542;Rhinomon X;Rhinomon X;; +543;Pteramon X;Pteramon X;; +544;Otamamon X;Otamamon X;; +545;Gesomon X;Gesomon X;; +546;Syakomon X;Syakomon X;; +547;Dobermon X;Dobermon X;; +548;Otamamon;Otamamon;; +549;Gesomon;Gesomon;; +550;Syakomon;Syakomon;; +551;Dobermon;Dobermon;; +552;Elecmon;Elecmon;; +553;Penguinmon;Penguinmon;; +554;Kunemon;Kunemon;; +555;Tsunomon;Tsunomon;; +556;Punimon;Punimon;; +557;Tanemon;Tanemon;; +558;Kokatorimon;Kokatorimon;; +559;Unimon;Unimon;; +560;Ninjamon;Ninjamon;; +561;Coelamon;Coelamon;; +562;Giromon;Giromon;; +563;Nyokimon;Nyokimon;; +564;Yokomon;Yokomon;; +565;Pichimon;Pichimon;; +566;Bukamon;Bukamon;; +567;Nyaromon;Nyaromon;; +568;YukimiBotamon;YukimiBotamon;; +569;Chibomon;Chibomon;; +570;DemiVeemon;DemiVeemon;; +571;Pururumon;Pururumon;; +572;Poromon;Poromon;; +573;Tsubumon;Tsubumon;; +574;Upamon;Upamon;; +575;Leafmon;Leafmon;; +576;Minomon;Minomon;; +577;Zerimon;Zerimon;; +578;Gummymon;Gummymon;; +579;Relemon;Relemon;; +580;Viximon;Viximon;; +581;Conomon;Conomon;; +582;Kokomon;Kokomon;; +583;MetalKoromon;MetalKoromon;; +584;Kotemon;Kotemon;; +585;Chapmon;Chapmon;; +586;DemiMeramon;DemiMeramon;; +587;Calumon;Calumon;; +588;Kapurimon;Kapurimon;; \ No newline at end of file diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/CardSetNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/CardSetNames.csv new file mode 100644 index 0000000..6a50afd --- /dev/null +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/CardSetNames.csv @@ -0,0 +1,100 @@ +index;original;replace;excludeTerms;excludePaths +0;Royal Knights: Founder;Royal Knights: Founder;; +1;7 Great Demon Lords;7 Great Demon Lords;; +2;Celestial Digimon;Celestial Digimon;; +3;Digimon Sovereigns;Holy Beasts;; +4;Deva;Deva;; +5;Four Great Dragons;Four Great Dragons;; +6;Ten Legendary Warriors;Ten Legendary Warriors;; +7;Crack Team;Crack Team;; +8;D-Brigade;D-Brigade;; +9;Big Death Stars;Big Death Stars;; +10;Ebonwumon's Followers;Xuanwumon's Followers;; +11;Azulongmon's Followers;Qinglongmon's Followers;; +12;Zhuqiaomon's Followers;Zhuqiaomon's Followers;; +13;Baihumon's Followers;Baihumon's Followers;; +14;Agumon Line;Agumon Line;; +15;Gabumon Line;Gabumon Line;; +16;Biyomon Line;Piyomon Line;; +17;Tentomon Line;Tentomon Line;; +18;Palmon Line;Palmon Line;; +19;Gomamon Line;Gomamon Line;; +20;Patamon Line;Patamon Line;; +21;Gatomon Line;Tailmon Line;; +22;Veemon Line;V-mon Line;; +23;Armadillomon Line;Armadimon Line;; +24;Hawkmon Line;Hawkmon Line;; +25;Wormmon Line;Wormmon Line;; +26;Digi-Egg of Courage;Digimental of Courage;; +27;Digi-Egg of Friendship;Digimental of Friendship;; +28;Digi-Egg of Love;Digimental of Love;; +29;Digi-Egg of Knowledge;Digimental of Knowledge;; +30;Digi-Egg of Purity;Digimental of Purity;; +31;Digi-Egg of Sincerity;Digimental of Sincerity;; +32;Digi-Egg of Hope;Digimental of Hope;; +33;Digi-Egg of Light;Digimental of Light;; +34;Digi-Egg of Kindness;Digimental of Kindness;; +35;Digi-Egg of Miracles;Digimental of Miracles;; +36;Digi-Egg of Fate;Digimental of Fate;; +37;Guilmon Line;Guilmon Line;; +38;Terriermon Line;Terriermon Line;; +39;Renamon Line;Renamon Line;; +40;Agunimon Line;Agunimon Line;; +41;BeoWolfmon Line;Beowolfmon Line;; +42;Evil Warriors;Evil Warriors;; +43;Evil Beasts;Evil Beasts;; +44;Agumon 2006 Line;Agumon 2006 Line;; +45;Gaomon Line;Gaomon Line;; +46;Lalamon Line;Lalamon Line;; +47;Falcomon Line;Falcomon Line;; +48;Four Bursts;Four Bursts;; +49;Shoutmon Line;Shoutmon Line;; +50;Gumdramon Line;Gumdramon Line;; +51;X-Antibody of Destiny;X-Antibody of Destiny;; +52;The Sword;The Sword;; +53;Death-X-Evolution;Death-X-Evolution;; +54;Veedramon Line;V-dramon Line;; +55;Sun God of Olympos;Sun God of Olympos;; +56;Moonlight God of Olympos;Moonlight God of Olympos;; +57;The Worst Virus;The Worst Virus;; +58;Heroes of Justice;Heroes of Justice;; +59;Kudamon Line;Kudamon Line;; +60;Kamemon Line;Kamemon Line;; +61;Sorrowful Fallen Angels;Sorrowful Fallen Angels;; +62;The Ogre's Way of Life;The Ogre's Way of Life;; +63;DNA Digivolutions 1;DNA Digivolutions 1;; +64;DNA Digivolutions 2;DNA Digivolutions 2;; +65;DNA Digivolutions 3;DNA Digivolutions 3;; +66;DNA Digivolutions 4;DNA Digivolutions 4;; +67;DNA Digivolutions 5;DNA Digivolutions 5;; +68;Kimera Data;Chimera Data;; +69;Mamemon's;Mamemon's;; +70;Nine Kuwaga's;Nine Kuwaga's;; +71;Eight Agumon;Eight Agumon;; +72;Chess Digimon;Chess Digimon;; +73;Tyranno Brothers;Tyrano Brothers;; +74;Lion's Heroes;Lion's Heroes;; +75;Viral Knights;Viral Knights;; +76;Messenger of Heaven;Messenger of Heaven;; +77;Hell Devils;Hell Devils;; +78;Worst Demon Lord;Worst Demon Lord;; +79;Burning Flame;Burning Flame;; +80;Mysteries of the Universe;Mysteries of the Universe;; +81;Undead Monsters;Undead Monsters;; +82;Demon Lords of Gluttony;Demon Lords of Gluttony;; +83;Millennium;Millennium;; +84;Lord of the Night;Lord of the Night;; +85;Monkey Pack;Monkey Pack;; +86;Odd Teddies;Odd Teddies;; +87;Black Digimon 1;Black Digimon 1;; +88;Black Digimon 2;Black Digimon 2;; +89;Tricolour Gabumon;Tricolour Gabumon;; +90;Tricolour Garurumon;Tricolour Garurumon;; +91;Tricolour Growlmon;Tricolour Growmon;; +92;Tricolour WarGrowlmon;Tricolour MegaloGrowmon;; +93;Different Numemon;Different Numemon;; +94;Jiji-Baba Set;Jiji-Baba Set;; +95;Professor Digimon;Professor Digimon;; +96;From Toy Land;From Toy Land;; +97;Two Good Friends;Two Good Friends;; +98;Filth Friendship;Filth Friendship;; \ No newline at end of file diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/CharacterNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/CharacterNames.csv new file mode 100644 index 0000000..53ee7d6 --- /dev/null +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/CharacterNames.csv @@ -0,0 +1,45 @@ +index;original;replace;excludeTerms;excludePaths +1002;Akiho;Akiho;; +1003;Niko;Niko;; +1004;Yuuya;Yuuya;; +1005;Mirei;Mirei;; +1006;Dr. Petrov;Dr. Petrov;; +1007;Lili;Lili;; +1008;Sebastian;Sebastian;; +1009;Male Child A;Male Child A;; +1010;Male Child B;Male Child B;; +1011;Female Child A;Female Child A;; +1012;Female Child B;Female Child B;; +1013;Male Student A;Male Student A;; +1014;Male Student B;Male Student B;; +1015;Female Student A;Female Student A;; +1016;Female Student B;Female Student B;; +1017;Man A;Man A;; +1018;Man B;Man B;; +1019;Woman A;Woman A;; +1020;Woman B;Woman B;; +1021;Salaryman A;Salaryman A;; +1022;Salaryman B;Salaryman B;; +1023;Lilimonzaemon;Lilimonzaemon;; +1024;Tai;Taichi;; +1025;Matt;Yamato;; +1026;Sora;Sora;; +1027;Davis;Daisuke;; +1028;Takato;Takato;; +1029;Iyoku, editor-in-chief;Iyoku, editor-in-chief;; +1030;Male Student C;Male Student C;; +1031;Female Student C;Female Student C;; +1032;Izzy Izumi;Koushiro Izumi;; +1033;Mimi Tachikawa;Mimi Tachikawa;; +1034;Joe Kido;Joe Kido;; +1035;Takeru Takaishi;Takeru Takaishi;; +1036;Kari Kamiya;Hikari Yagami;; +1037;Marcus Damon;Masaru Daimon;; +1055;Izzy Izumi;Kosuhiro Izumi;; +1056;Mimi Tachikawa;Mimi Tachikawa;; +1057;Joe Kido;Joe Kido;; +1058;Takeru Takaishi;Takeru Takaishi;; +1059;Kari Kamiya;Hikari Yagami;; +1060;Marcus Damon;Masaru Daimon;; +1062;Taiga;Taiga;; +1063;Rina;Rina;; \ No newline at end of file diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/DigimonNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/DigimonNames.csv new file mode 100644 index 0000000..4344323 --- /dev/null +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/DigimonNames.csv @@ -0,0 +1,219 @@ +index;original;replace;excludeTerms;excludePaths +1;Dodomon;Dodomon;; +2;Botamon;Botamon;; +3;Jarimon;Jyarimon;; +4;Yuramon;Yuramon;; +5;Poyomon;Poyomon;; +6;Wanyamon;Wanyamon;; +7;Koromon;Koromon;; +8;Gigimon;Gigimon;; +9;Budmon;Budmon;; +10;Tokomon;Tokomon;; +11;Hagurumon;Hagurumon;; +12;Candlemon;Candmon;; +13;Chuumon;Tyumon;; +14;Tsukaimon;Tukaimon;; +15;Agumon;Agumon;; +16;Kamemon;Kamemon;; +17;Kudamon;Kudamon;; +18;Gaomon;Gaomon;; +19;Lalamon;Lalamon;; +20;Impmon;Impmon;; +21;Guilmon;Guilmon;; +22;Patamon;Patamon;; +23;DemiDevimon;PicoDevimon;; +24;BlackGabumon;Gabumon (Black);; +25;Psychemon;Psychemon;; +26;Goburimon;Goburimon;; +27;Dorumon;DORUmon;; +28;Veemon;V-mon;; +29;SnowAgumon;YukiAgumon;; +30;BlackAgumon;Agumon (Black);; +31;Gabumon;Gabumon;; +33;Solarmon;Solarmon;; +35;Tentomon;Tentomon;; +36;Biyomon;Piyomon;; +37;Meramon;Meramon;; +38;Airdramon;Airdramon;; +39;Garurumon;Garurumon;; +40;Bakemon;Bakemon;; +43;Whamon;Whamon;; +45;BlackGatomon;BlackTailmon;; +47;GeoGreymon;GeoGreymon;; +48;Sunflowmon;Sunflowmon;; +49;Gaogamon;Gaogamon;; +50;Numemon;Numemon;; +51;Leomon;Leomon;; +53;Growlmon;Growmon;; +54;Angemon;Angemon;; +55;Growlmon (Orange);Growmon (Orange);; +56;Gatomon;Tailmon;; +57;Devimon;Devimon;; +58;BlackGrowlmon;BlackGrowmon;; +59;IceDevimon;IceDevimon;; +61;BlackGarurumon;Garurumon (Black);; +62;Gururumon;Gururumon;; +63;Geremon;Geremon;; +66;Kabuterimon;Kabuterimon;; +67;Birdramon;Birdramon;; +68;Sukamon;Scumon;; +69;Vegiemon;Vegimon;; +70;Greymon;Greymon;; +72;Lucemon FM;Lucemon FM;; +74;Monzaemon;Monzaemon;; +75;RizeGreymon;RizeGreymon;; +76;Lilamon;Lilamon;; +77;MachGaogamon;MachGaogamon;; +81;Myotismon;Vamdemon;; +82;Stingmon;Stingmon;; +83;MagnaAngemon;HolyAngemon;; +84;LadyDevimon;LadyDevimon;; +85;MegaSeadramon;MegaSeadramon;; +87;WarGrowlmon;WarGrowlmon;; +88;B-WarGrowlmon;MegaloGrowmon (Black);; +89;WereGarurumon;WereGarurumon;; +90;Angewomon;Angewomon;; +91;BlueMeramon;BlueMeramon;; +92;B-WereGarurumon;WereGarurumon (Black);; +95;WarGrowlmon (Orange);MegaloGrowlmon (Orange);; +97;Megadramon;Megadramon;; +98;MetalGreymon;MetalGreymon;; +99;MegaKabuterimon;AtlurKabuterimon;; +100;Garudamon;Garudamon;; +101;Etemon;Etemon;; +102;MarineAngemon;MarinAngemon;; +103;WarGreymon;WarGreymon;; +104;Lilithmon;Lilithmon;; +105;Beelzemon;Beelzebumon;; +106;Barbamon;Barbamon;; +107;Leviamon;Leviamon;; +108;Daemon;Demon;; +109;Belphemon;Belphemon;; +110;Chaosmon;Chaosmon;; +111;Darkdramon;Darkdramon;; +112;BanchoLeomon;BanchoLeomon;; +113;Rosemon;Rosemon;; +114;PlatinumNumemon;PlatinumNumemon;; +116;Omegamon;Omegamon;; +117;ShineGreymon;ShineGreymon;; +118;MirageGaogamon;MirageGaogamon;; +120;WarGreymon X;WarGreymon X;; +121;Gallantmon;Dukemon;; +122;MetalGarurumon;MetalGarurumon;; +123;ChaosGallantmon;ChaosDukemon;; +124;BlackWarGreymon;BlackWarGreymon;; +125;BlackMetalGarurumon;BlackMetalGarurumon;; +131;ZeedGarurumon;Z'dGarurumon;; +132;VictoryGreymon;VictoryGreymon;; +136;Examon;Examon;; +137;Jijimon;Jijimon;; +138;HerculesKabuterimon;HerakleKabuterimon;; +139;Phoenixmon;Hououmon;; +140;MetalEtemon;MetalEtemon;; +141;Seraphimon;Seraphimon;; +142;MetalGreymon (Virus);MetalGreymon (Virus);; +143;Apocalymon;Apocalymon;; +144;Vitium;Vitium;; +145;Vitium;Vitium;; +146;Vitium;Vitium;; +147;Vitium;Vitium;; +148;BlackWarGreymon X;BlackWarGreymon X;; +149;Agumon;Agumon;; +150;Guardromon;Guardromon;; +151;Andromon;Andromon;; +152;Gomamon;Gomamon;; +153;Ikkakumon;Ikkakumon;; +154;Zudomon;Zudomon;; +155;Vikemon;Vikemon;; +156;Seadramon;Seadramon;; +157;Palmon;Palmon;; +158;Togemon;Togemon;; +159;Examon (Boss);Examon (Boss);; +160;Monzaemon (Alternate Color);Monzaemon (Alternate Color);; +161;Rosemon X;Rosemon X;; +162;Agumon X;Agumon X;; +163;Greymon X;Greymon X;; +164;Seadramon X;Seadramon X;; +165;Gomamon X;Gomamon X;; +166;Omegamon X;Omegamon X;; +167;Gallantmon X;Dukemon X;; +168;Lillymon;Lilimon;; +169;Yggdrasill;Yggdrasill;; +170;Salamon;Plotmon;; +171;Salamon X;Plotmon X;; +172;Tyrannomon;Tyranomon;; +173;MetalTyrannomon;MetalTyranomon;; +174;ExVeemon;XV-mon;; +175;Dexmon;Death-X-mon;; +176;Kuwagamon;Kuwagamon;; +177;Shellmon;Shellmon;; +178;Monochromon;Monochromon;; +179;Frigimon;Yukidarumon;; +180;Mojyamon;Mojyamon;; +181;Centarumon;Centalmon;; +182;Drimogemon;Drimogemon;; +183;Digitamamon;Digitamamon;; +184;Nanimon;Nanimon;; +185;ShogunGekomon;TonosamaGekomon;; +186;Wizardmon;Wizarmon;; +187;Deramon;Delumon;; +188;Cherrymon;Jyureimon;; +189;Garbagemon;Gerbemon;; +190;WaruMonzaemon;WaruMonzaemon;; +191;Magnamon;Magnamon;; +192;RustTyrannomon;RustTyranomon;; +193;Agumon;Agumon;; +194;Machinedramon;Mugendramon;; +195;Pabumon;Pabumon;; +196;Motimon;Mochimon;; +197;Betamon;Betamon;; +198;Lucemon;Lucemon;; +199;Renamon;Renamon;; +200;Wormmon;Wormmon;; +201;Woodmon;Woodmon;; +202;Ogremon;Orgemon;; +203;Kyubimon;Kyubimon;; +204;Dorugamon;DORUgamon;; +205;Veedramon;V-dramon;; +206;Clockmon;Clockmon;; +207;Gekomon;Gekomon;; +208;AeroVeedramon;AeroV-dramon;; +209;Okuwamon;Okuwamon;; +210;Gigadramon;Gigadramon;; +211;GrapLeomon;GrappuLeomon;; +212;SkullGreymon;SkullGreymon;; +213;Taomon;Taomon;; +214;SkullMeramon;DeathMeramon;; +215;DoruGreymon;DORUguremon;; +216;Paildramon;Paildramon;; +217;IceLeomon;Panjyamon;; +218;Piximon;Piccolomon;; +219;Vademon;Vademon;; +220;Mamemon;Mamemon;; +221;MetalMamemon;MetalMamemon;; +222;Parrotmon;Parrotmon;; +223;MasterTyrannomon;MasterTyranomon;; +224;Alphamon;Alphamon;; +225;UlforceVeedramon;UlforceV-dramon;; +226;UlforceVeedramon X;UlforceV-dramon X;; +227;Imperialdramon FM;Imperialdramon FM;; +228;Imperialdramon PM;Imperialdramon PM;; +229;Ophanimon;Ofanimon;; +230;Chaosdramon;Chaosdramon;; +231;GrandKuwagamon;GranKuwagamon;; +232;SaberLeomon;SaberLeomon;; +233;Sakuyamon;Sakuyamon;; +234;Hi-Andromon;HiAndromon;; +235;Piedmon;Piemon;; +236;Puppetmon;Pinochimon;; +237;PrinceMamemon;PrinceMamemon;; +238;Beelzemon X;Beelzebumon X;; +239;Boltmon;Boltmon;; +240;Magnamon X;Magnamon X;; +241;MetalGarurumon X;MetalGarurumon X;; +242;MetalSeadramon;MetalSeadramon;; +243;Lucemon Satan Mode;Lucemon Satan Mode;; +244;Punimon;Punimon;; +245;Tsunomon;Tunomon;; +246;Belphemon Sleep Mode;Belphemon Sleep Mode;; +247;Titamon;Titamon;; \ No newline at end of file diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/FinisherNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/FinisherNames.csv new file mode 100644 index 0000000..fb12eeb --- /dev/null +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/FinisherNames.csv @@ -0,0 +1,235 @@ +index;original;replace;excludeTerms;excludePaths +1;Cog Crusher;Cog Crusher;; +2;Flame Bomber;Flame Bomber;; +3;Cheese Bomb;Cheese Bomb;; +4;Bad Message;Bad Message;; +5;Pepper Breath;Pepper Breath;; +6;Armored Arrow;Armored Arrow;; +7;Horn Blaster;Horn Blaster;; +8;Rolling Upper;Rolling Upper;; +9;Seed Blast;Seed Blast;; +10;Bada Boom;Bada Boom;; +11;Fireball;Fireball;; +12;Boom Bubble;Boom Bubble;; +13;Demi Darts;Demi Darts;; +14;Blue Blaster;Blue Blaster;; +15;Colorful Spark;Colorful Spark;; +16;Goburi Strike;Goburi Strike;; +17;Metal Cannon;Metal Cannon;; +18;Vee Headbutt;Vee Headbutt;; +19;Frozen Wind;Frozen Wind;; +20;Pepper Breath;Pepper Breath;; +21;Blue Blaster;Blue Blaster;; +22;Special Move 22;Special Move 22;; +23;Shiny Ring;Shiny Ring;; +24;Special Move 24;Special Move 24;; +25;Super Shocker;Super Shocker;; +26;Spiral Twister;Spiral Twister;; +27;Burning Fist;Burning Fist;; +28;Spinning Needle;Spinning Needle;; +29;Howling Blaster;Howling Blaster;; +30;Evil Charm;Evil Charm;; +31;Special Move 31;Special Move 31;; +32;Special Move 32;Special Move 32;; +33;Special Move 33;Special Move 33;; +34;Special Move 34;Special Move 34;; +35;Lightning Paw;Lightning Paw;; +36;Special Move 36;Special Move 36;; +37;Nova Blast;Nova Blast;; +38;Sunshine Beam;Sunshine Beam;; +39;Spiral Blow;Spiral Blow;; +40;Nume-Sludge;Nume-Sludge;; +41;Fist of the Beast King;Fist of the Beast King;; +42;Special Move 42;Special Move 42;; +43;Pyro Blaster;Pyro Blaster;; +44;Hand of Fate;Hand of Fate;; +45;Pyro Blaster;Pyro Blaster;; +46;Lightning Paw;Lightning Paw;; +47;Touch of Evil;Touch of Evil;; +48;Pyro Blaster;Pyro Blaster;; +49;Frozen Claw;Frozen Claw;; +50;Special Move 50;Special Move 50;; +51;Howling Blaster;Howling Blaster;; +52;Chaos Fire;Chaos Fire;; +53;Hyper Smell;Hyper Smell;; +54;Special Move 54;Special Move 54;; +55;Special Move 55;Special Move 55;; +56;Electro Shocker;Electro Shocker;; +57;Meteor Wing;Meteor Wing;; +58;Party Time;Party Time;; +59;Party Time;Party Time;; +60;Nova Blast;Nova Blast;; +61;Special Move 61;Special Move 61;; +62;Ultimate Sacrifice;Ultimate Sacrifice;; +63;Special Move 63;Special Move 63;; +64;Hearts Attack;Hearts Attack;; +65;Rising Destroyer;Rising Destroyer;; +66;Lila Shower;Lila Shower;; +67;Winning Knuckle;Winning Knuckle;; +68;Special Move 68;Special Move 68;; +69;Special Move 69;Special Move 69;; +70;Special Move 70;Special Move 70;; +71;Grisly Wing;Grisly Wing;; +72;Spiking Strike;Spiking Strike;; +73;Gate of Destiny;Gate of Destiny;; +74;Darkness Wave;Darkness Wave;; +75;Lightning Javelin;Lightning Javelin;; +76;Special Move 76;Special Move 76;; +77;Atomic Blaster;Atomic Blaster;; +78;Atomic Blaster;Atomic Blaster;; +79;Wolf Claw;Wolf Claw;; +80;Celestial Arrow;Celestial Arrow;; +81;Ice Phantom;Ice Phantom;; +82;Wolf Claw;Wolf Claw;; +83;Special Move 83;Special Move 83;; +84;Special Move 84;Special Move 84;; +85;Atomic Blaster;Atomic Blaster;; +86;Special Move 86;Special Move 86;; +87;Dark Side Attack;Dark Side Attack;; +88;Giga Blaster;Giga Blaster;; +89;Horn Buster;Horn Buster;; +90;Wing Blade;Wing Blade;; +91;Concert Crush;Concert Crush;; +92;Kahuna Waves;Kahuna Waves;; +93;Terra Force;Terra Force;; +94;Phantom Pain;Phantom Pain;; +95;Double Impact;Double Impact;; +96;Pandemonium Lost;Pandemonium Lost;; +97;Special Move 97;Special Move 97;; +98;Special Move 98;Special Move 98;; +99;Special Move 99;Special Move 99;; +100;Dark Prominence;Dark Prominence;; +101;Dark Roar;Dark Roar;; +102;Lion Slash;Lion Slash;; +103;Thorn Whip;Thorn Whip;; +104;Excrement;Excrement;; +105;Special Move 105;Special Move 105;; +106;Supreme Cannon;Supreme Cannon;; +107;Glorious Burst;Glorious Burst;; +108;Full Moon Blaster;Full Moon Blaster;; +109;Special Move 109;Special Move 109;; +110;Poseidon Force;Poseidon Force;; +111;Lightning Joust;Lightning Joust;; +112;Metal Wolf Claw;Metal Wolf Claw;; +113;Demon's Disaster;Demon's Disaster;; +114;Terra Destroyer;Terra Destroyer;; +115;Metal Wolf Claw;Metal Wolf Claw;; +116;Special Move 116;Special Move 116;; +117;Special Move 117;Special Move 117;; +118;Special Move 118;Special Move 118;; +119;Special Move 119;Special Move 119;; +120;Special Move 120;Special Move 120;; +121;Full Metal Breath;Full Metal Breath;; +122;Trident Gaia;Trident Gaia;; +123;Special Move 123;Special Move 123;; +124;Special Move 124;Special Move 124;; +125;Special Move 125;Special Move 125;; +126;Pendragon's Glory;Pendragon's Glory;; +127;Special Move 127;Special Move 127;; +128;Giga Blaster;Giga Blaster;; +129;Starlight Explosion;Starlight Explosion;; +130;Banana Slip;Banana Slip;; +131;Strike of the Seven Stars;Strike of the Seven Stars;; +132;Giga Blaster;Giga Blaster;; +133;Darkness Zone;Darkness Zone;; +134;Boss Childhood Frame;Boss Childhood Frame;; +135;Garbage Collection;Garbage Collection;; +136;Reduction;Reduction;; +137;Refactoring;Refactoring;; +138;Hades Force;Hades Force;; +139;Pepper Breath;Pepper Breath;; +140;Destruction Grenade;Destruction Grenade;; +141;Thunder Blast;Thunder Blast;; +142;Marching Fishes;Marching Fishes;; +143;Harpoon Torpedo;Harpoon Torpedo;; +144;Vulcan's Hammer;Vulcan's Hammer;; +145;Arctic Blizzard;Arctic Blizzard;; +146;Ice Blast;Ice Blast;; +147;Poison Ivy;Poison Ivy;; +148;Needle Spray;Needle Spray;; +149;Pendragon's Glory;Pendragon's Glory;; +150;Hearts Attack;Hearts Attack;; +151;Rosen Blood;Rosen Blood;; +152;Baby Burner;Baby Burner;; +153;Mega Burst;Mega Burst;; +154;Ice Spear;Ice Spear;; +155;Goma Milk Death;Goma Milk Death;; +156;All Delete;All Delete;; +157;Sieg Saber;Sieg Saber;; +158;Flower Cannon;Flower Cannon;; +159;Giant Crystal;Giant Crystal;; +160;Puppy Howling;Puppy Howling;; +161;Puppy Howling;Puppy Howling;; +162;Fire Breath;Fire Breath;; +163;Nuclear Laser;Nuclear Laser;; +164;X-Laser;X-Laser;; +165;Process F;Process F;; +166;Scissor Arms;Scissor Arms;; +167;Special Move 167;Special Move 167;; +168;Special Move 168;Special Move 168;; +169;Special Move 169;Special Move 169;; +170;Special Move 170;Special Move 170;; +171;Hunting Cannon;Hunting Cannon;; +172;Special Move 172;Special Move 172;; +173;Nightmare Syndrome;Nightmare Syndrome;; +174;Special Move 174;Special Move 174;; +175;Special Move 175;Special Move 175;; +176;Special Move 176;Special Move 176;; +177;Special Move 177;Special Move 177;; +178;Cherry Bomb;Cherry Bomb;; +179;Special Move 179;Special Move 179;; +180;Heartbreak Attack;Heartbreak Attack;; +181;Shining Gold Solar Storm;Shining Gold Solar Storm;; +182;Terror's Cluster;Terror's Cluster;; +183;Pepper Breath;Pepper Breath;; +184;Infinity Cannon;Infinity Cannon;; +185;Electric Shock;Electric Shock;; +186;Grand Cross;Grand Cross;; +187;Diamond Storm;Diamond Storm;; +188;Sticky Net;Sticky Net;; +189;Branch Drain;Branch Drain;; +190;Tyrant Fist;Tyrant Fist;; +191;Dragon Wheel;Dragon Wheel;; +192;Power Metal;Power Metal;; +193;V-Nova Blast;V-Nova Blast;; +194;Chrono Breaker;Chrono Breaker;; +195;Crash Symphony;Crash Symphony;; +196;Dragon Impulse;Dragon Impulse;; +197;Double Scissor Claw;Double Scissor Claw;; +198;Genocide Gear;Genocide Gear;; +199;Cyclone Turbine;Cyclone Turbine;; +200;Dark Shot;Dark Shot;; +201;Talisman of Light;Talisman of Light;; +202;Metal Fireball;Metal Fireball;; +203;Galactic Flare;Galactic Flare;; +204;Desperado Blaster;Desperado Blaster;; +205;Frozen Fury;Frozen Fury;; +206;Pit Bomb;Pit Bomb;; +207;Abduction Beam;Abduction Beam;; +208;Smirk Bomb;Smirk Bomb;; +209;Metal Smirk Bomb;Metal Smirk Bomb;; +210;Mjoelnir Thunder;Mjoelnir Thunder;; +211;Master Fire;Master Fire;; +212;Ultimate Ouryuken;Ultimate Ouryuken;; +213;Ray of Victory;Ray of Victory;; +214;Ray of Victory;Ray of Victory;; +215;Giga Crusher;Giga Crusher;; +216;Omega Blade;Omega Blade;; +217;Eden's Javelin;Eden's Javelin;; +218;Hyper Infinity Cannon;Hyper Infinity Cannon;; +219;Dimension Scissor;Dimension Scissor;; +220;Infinity Arrow;Infinity Arrow;; +221;Amethyst Mandala;Amethyst Mandala;; +222;Atomic Ray;Atomic Ray;; +223;Trump Sword;Trump Sword;; +224;Puppet Pummel;Puppet Pummel;; +225;Smiley Warhead;Smiley Warhead;; +226;Double Impact;Double Impact;; +227;Tomahawk Steiner;Tomahawk Steiner;; +228;Shining Gold Solar Storm;Shining Gold Solar Storm;; +229;Metal Storm;Metal Storm;; +230;River of Power;River of Power;; +231;Divine Atonement;Divine Atonement;; +232;Eternal Nightmare;Eternal Nightmare;; +233;Soul Core Attack;Soul Core Attack;; +234;Special Move 999;Special Move 999;; \ No newline at end of file diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/GlossaryNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/GlossaryNames.csv new file mode 100644 index 0000000..5b37036 --- /dev/null +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/GlossaryNames.csv @@ -0,0 +1,97 @@ +index;original;replace;excludeTerms;excludePaths +0;Railroad Plains;Railroad Plains;; +1;Signpost Forest;Signpost Forest;; +2;Fluorescent Cave;Fluorescent Cave;; +3;Sunken Capital;Sunken Capital;; +4;Gravel Wasteland;Gravel Wasteland;; +5;Night Canyon;Night Canyon;; +6;Sewer Maze;Sewer Maze;; +7;Bonkeno Volcano;Bonkeno Volcano;; +8;Powdery Cliff;Powdery Cliff;; +9;Binary Castle;Binary Castle;; +10;Akiho Rindo;Akiho Rindo;; +11;Nikolai Petrov;Nikolai Petrov;; +12;Digitorin;Digitorin;; +13;Sashenka;Sashenka;; +14;;;; +15;Yuuya Kuga;Yuuya Kuga;; +16;Black;Black;; +17;Mirei Mikagura;Mirei Mikagura;; +18;Mirei's Partners;Mirei's Partners;; +19;Dr. Petrov;Dr. Petrov;; +20;Kenzou Kuga;Kenzou Kuga;; +21;Partner Digimon;Partner Digimon;; +22;File Island;File Island;; +23;Digital World;Digital World;; +24;Digimon;Digimon;; +25;Chrome Digizoid;Chrome Digizoid;; +26;X-Antibody;X-Antibody;; +27;Digivice;Digivice;; +28;GIGO Company;GIGO Company;; +29;Digital Monsters;Digital Monsters;; +30;Blackening Incident;Blackening Incident;; +31;Memorial Stela;Memorial Stela;; +32;Digitize;Digitize;; +33;Re:Digitize;Re:Digitize;; +34;Digitower;Digitower;; +35;Digital Life Form;Digital Life Form;; +36;Garbage Data;Garbage Data;; +37;Colosseum;Colosseum;; +38;Digital Divide;Digital Divide;; +39;GIGO HQ;GIGO HQ;; +40;GIGO;GIGO;; +41;Dimensional Distortion;Dimensional Distortion;; +42;Ancient Bone Swamp;Ancient Bone Swamp;; +43;Vitium;Vitium;; +44;Tamer;Tamer;; +45;LIFE;LIFE;; +46;Special;Special;; +47;Attribute;Attribute;; +48;Nature;Nature;; +49;Emotions;Emotions;; +50;Weight;Weight;; +51;Digimon;Digimon;; +52;Active Hours;Active Hours;; +53;Happiness;Happiness;; +54;Discipline;Discipline;; +55;Poop;Poop;; +56;Digital Storage;Digital Storage;; +57;DigiMemory;DigiMemory;; +58;Brains;Brains;; +59;Speed;Speed;; +60;Care Mistakes;Care Mistakes;; +61;Training;Training;; +62;Warehouse;Warehouse;; +63;Restaurant;Restaurant;; +64;Item Shop;Item Shop;; +65;Training Gym;Training Gym;; +66;Angel Clinic;Angel Clinic;; +67;Treasure Hunting Shop;Treasure Hunting Shop;; +68;Secret Item Shop;Secret Item Shop;; +69;Card Collector;Card Collector;; +70;Birdra Transport;Birdra Transport;; +71;Accessory Shop;Accessory Shop;; +72;Taiga;Taiga;; +73;Dimensional Collapse;Dimensional Collapse;; +74;X-Program (temporary);X-Program (temporary);; +75;Mt. Infinity (temporary);Mt. Infinity (temporary);; +76;Mt. Infinity Anomaly (temporary);Mt. Infinity Anomaly (temporary);; +77;Train Garage;Train Garage;; +78;Cherry's Observatory;Cherry's Observatory;; +79;Whamon's Wharf;Whamon's Wharf;; +80;Big Cauldron Hall;Big Cauldron Hall;; +81;Rina Shinomiya;Rina Shinomiya;; +82;Lili;Lili;; +83;Sebastian;Sebastian;; +84;X-Program;X-Program;; +85;Infinity Mountain;Infinity Mountain;; +86;Yggdrasill;Yggdrasill;; +87;Machinedramon;Mugendramon;; +88;7 Great Demon Lords;7 Great Demon Lords;; +89;Dark Area;Dark Area;; +90;Digitter;Digitter;; +91;Decode Ability;Decode Ability;; +92;Larva Decoder;Larva Decoder;; +93;Parrot Carrier;Parrot Carrier;; +94;DoReMiFa Mansion;DoReMiFa Mansion;; +95;Master Bar;Master Bar;; \ No newline at end of file diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/ItemNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/ItemNames.csv new file mode 100644 index 0000000..f68d6dc --- /dev/null +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/ItemNames.csv @@ -0,0 +1,402 @@ +index;original;replace;excludeTerms;excludePaths +1;Small HP Disc;Small HP Disc;; +2;Medium HP Disc;Medium HP Disc;; +3;Large HP Disc;Large HP Disc;; +4;Super HP Disc;Super HP Disc;; +5;MP Disc;MP Disc;; +6;Medium MP Disc;Medium MP Disc;; +7;Large MP Disc;Large MP Disc;; +8;Double Disc;Double Disc;; +9;Remedy Disc;Remedy Disc;; +10;Omnipotent Disc;Omnipotent Disc;; +11;Protection Disc;Protection Disc;; +12;Restore Disc;Restore Disc;; +13;Super Restore Disc;Super Restore Disc;; +14;Bandage;Bandage;; +15;Bandage DX;Bandage DX;; +16;Attack Plugin;Attack Plugin;; +17;Defense Plugin;Defense Plugin;; +18;Highspeed Plugin;Highspeed Plugin;; +19;Universal Plugin;Universal Plugin;; +20;Attack Plugin S;Attack Plugin S;; +21;Defense Plugin S;Defense Plugin S;; +22;Highspeed Plugin S;Highspeed Plugin S;; +23;Autopilot;Autopilot;; +24;Attack Chip;Attack Chip;; +25;Defense Chip;Defense Chip;; +26;Brains Chip;Brains Chip;; +27;Speed Chip;Speed Chip;; +28;HP Chip;HP Chip;; +29;MP Chip;MP Chip;; +30;Devil Chip A;Devil Chip A;; +31;Devil Chip D;Devil Chip D;; +32;Devil Chip E;Devil Chip E;; +33;Portable Potty;Portable Potty;; +34;Training Manual;Training Manual;; +35;Rest Pillow;Rest Pillow;; +36;Amulet Charm;Amulet Charm;; +37;Enemy Bell;Enemy Bell;; +38;Health Sandals;Health Sandals;; +39;Meat;Meat;; +40;Giant Meat;Giant Meat;; +41;Sirloin;Sirloin;; +42;Super Carrot;Super Carrot;; +43;Cherry Radish;Cherry Radish;; +44;Scratchy Grass;Scratchy Grass;; +45;Digimushroom;Digimushroom;; +46;Ice Mushroom;Ice Mushroom;; +47;Deluxe Mushroom;Deluxe Mushroom;; +48;Digipine;Digipine;; +49;Smiling Apple;Smiling Apple;; +50;Energy Lemon;Energy Lemon;; +51;Gold Acorn;Gold Acorn;; +52;Heavy Strawberry;Heavy Strawberry;; +53;Divine Chestnut;Divine Chestnut;; +54;Super Veggie;Super Veggie;; +55;Edible Cactus;Edible Cactus;; +56;Orange Banana;Orange Banana;; +57;Strength Fruit;Strength Fruit;; +58;Tough Fruit;Tough Fruit;; +59;Quick Fruit;Quick Fruit;; +60;Wisdom Fruit;Wisdom Fruit;; +61;Robust Fruit;Robust Fruit;; +62;Peace Fruit;Peace Fruit;; +63;Digianchovy;Digianchovy;; +64;Digisnapper;Digisnapper;; +65;Digitrout;Digitrout;; +66;Black Digitrout;Black Digitrout;; +67;Digicatfish;Digicatfish;; +68;Digiseabass;Digiseabass;; +69;Digimedaka;Digimedaka;; +70;Digigoldfish;Digigoldfish;; +71;Digicarp;Digicarp;; +72;Black Digicarp;Black Digicarp;; +73;Digibitterling;Digibitterling;; +74;Digisalmon;Digisalmon;; +75;Digiloach;Digiloach;; +76;Digieel;Digieel;; +77;Digiarowana;Digiarowana;; +78;Digipirarucu;Digipirarucu;; +79;Moldy Meat;Moldy Meat;; +80;Happy Mushroom;Happy Mushroom;; +81;Chain Melon;Chain Melon;; +84;Giant Starfish;Giant Starfish;; +85;Tiny Starfish;Tiny Starfish;; +86;Spiky Starfish;Spiky Starfish;; +87;Round Starfish;Round Starfish;; +88;Mellow Starfish;Mellow Starfish;; +89;Bony Starfish;Bony Starfish;; +90;Giant Ore;Giant Ore;; +91;Ordinary Pebble;Ordinary Pebble;; +92;Green Digimushroom;Green Digimushroom;; +93;Very Dirty Item;Very Dirty Item;; +94;RE Disc;RE Disc;; +100;Giant Claw;Giant Claw;; +101;Flame Shard;Flame Shard;; +102;Blazing Wings;Blazing Wings;; +103;Devilish Wings;Devilish Wings;; +104;Righteous Mane;Righteous Mane;; +105;Divine Clothes;Divine Clothes;; +106;Mythic Beast Wing;Mythic Beast Wing;; +107;Steel Helmet;Steel Helmet;; +108;Sea Serpent's Blood;Sea Serpent's Blood;; +109;Mythril Coat;Mythril Coat;; +110;Dreadful Horn;Dreadful Horn;; +111;Sun Seed;Sun Seed;; +112;Beast Glove;Beast Glove;; +113;Crimson Virus;Crimson Virus;; +114;Divine Catmint;Divine Catmint;; +115;Steel Body Armor;Steel Body Armor;; +116;Mythril Horn;Mythril Horn;; +117;Metal Parts;Metal Parts;; +118;Cyber Parts;Cyber Parts;; +119;Darkness Dragon's Destroyer Arm;Darkness Dragon's Destroyer Arm;; +120;Lovely Plushie;Lovely Plushie;; +121;King Banana;King Banana;; +122;Golden Holy Wings;Golden Holy Wings;; +123;Golden Armor;Golden Armor;; +124;Thunderblade Horn;Thunderblade Horn;; +125;Metal Banana;Metal Banana;; +126;Angel & Demon Wings;Angel & Demon Wings;; +127;Giant Revolver;Giant Revolver;; +128;Lilac Seed;Lilac Seed;; +129;Explosive Rapid Fists;Explosive Rapid Fists;; +130;Night Invitation;Night Invitation;; +131;Grand Silver Wings;Grand Silver Wings;; +132;Lady's Black Wings;Lady's Black Wings;; +133;Gigantic Twin Blade;Gigantic Twin Blade;; +134;Mythril Hand;Mythril Hand;; +135;Sacred Bow;Sacred Bow;; +136;Blue Flame;Blue Flame;; +137;King's Horn;King's Horn;; +138;Heavenly Wings;Heavenly Wings;; +139;Seabeast Horn;Seabeast Horn;; +140;Angelic Holy Water;Angelic Holy Water;; +141;Proof of Courage;Proof of Courage;; +142;Bewitching Hairpin;Bewitching Hairpin;; +143;Hell Pistol;Hell Pistol;; +144;Chaotic Soul;Chaotic Soul;; +145;Dark Matter;Dark Matter;; +146;Gakuran of Justice;Gakuran of Justice;; +147;Love & Beauty Gem;Love & Beauty Gem;; +148;Holy Knight Certificate;Holy Knight Certificate;; +149;Solar Wings;Solar Wings;; +150;Full Moon Claws;Full Moon Claws;; +151;Courage X-Antibody;Courage X-Antibody;; +152;Perfected Holy Spear;Perfected Holy Spear;; +153;Ice Metal;Ice Metal;; +154;Beast Canon;Beast Canon;; +155;Gigantic Crushing Sword;Gigantic Crushing Sword;; +156;Dragon Emperor's Giant Lance;Dragon Emperor's Giant Lance;; +157;Golden Angel Wings;Golden Angel Wings;; +158;Frozen Fur;Frozen Fur;; +159;Mysterious DigiCore;Mysterious DigiCore;; +160;Digital Ion Water;Digital Ion Water;; +161;Rigid Body Plugin;Rigid Body Plugin;; +162;Reinforced RE Disc;Reinforced RE Disc;; +163;Special Move Disc;Special Move Disc;; +164;Sedation Disc;Sedation Disc;; +165;Overdrive Plugin;Overdrive Plugin;; +166;Swiftness Plugin;Swiftness Plugin;; +167;Meat Lure;Meat Lure;; +168;Giant Meat Lure;Giant Meat Lure;; +169;Sirloin Lure;Sirloin Lure;; +172;Training Cola;Training Cola;; +173;Komorebi Tea;Komorebi Tea;; +174;Old Capital Tea;Old Capital Tea;; +175;Ancient Coffee;Ancient Coffee;; +176;Underground Tea;Underground Tea;; +177;Fluorescent Oolong Tea;Fluorescent Oolong Tea;; +178;Neon Drink;Neon Drink;; +179;Digital Soda;Digital Soda;; +180;Heartwarming Tea;Heartwarming Tea;; +181;Iced Juice;Iced Juice;; +182;File Soda;File Soda;; +183;Infinity Water;Infinity Water;; +184;Digisquid;Digisquid;; +185;Digituna;Digituna;; +186;Digicrab;Digicrab;; +187;Digiwhale;Digiwhale;; +188;Pygmy King Digianchovy;Pygmy King Digianchovy;; +189;Sovereign Lord Digisnapper;Sovereign Lord Digisnapper;; +190;Roe King Digitrout;Roe King Digitrout;; +191;Emperor Black Digitrout;Emperor Black Digitrout;; +192;Earth God Digicatfish;Earth God Digicatfish;; +193;Fish God Digiseabass;Fish God Digiseabass;; +194;Prince Digimedaka;Prince Digimedaka;; +195;Gold King Digigoldfish;Gold King Digigoldfish;; +196;Monarch Digicarp;Monarch Digicarp;; +197;Overlord Black Digicarp;Overlord Black Digicarp;; +198;Prodigious King Digibitterling;Prodigious King Digibitterling;; +199;Frost King Digisalmon;Frost King Digisalmon;; +200;Viking Digiloach;Viking Digiloach;; +201;Shrewd King Digieel;Shrewd King Digieel;; +202;Dragon King Digiarowana;Dragon King Digiarowana;; +203;Tyrant Digipirarucu;Tyrant Digipirarucu;; +204;Monarch Digisquid;Monarch Digisquid;; +205;Sea King Digituna;Sea King Digituna;; +206;Digi Crabking;Digi Crabking;; +207;Legendary Digiwhale;Legendary Digiwhale;; +209;Cactus Gloves;Cactus Gloves;; +210;Fairy Leaf Wings;Fairy Leaf Wings;; +211;Fossilized Nail;Fossilized Nail;; +212;Black Metal;Black Metal;; +213;Rusty Railgun;Rusty Railgun;; +216;Crimson X Antibody;Crimson X Antibody;; +217;Ultimate X Antibody;Ultimate X Antibody;; +218;Supreme X Antibody;Supreme X Antibody;; +219;Well Done Meat;Well Done Meat;; +223;Brave Dragon Wings;Brave Dragon Wings;; +224;Golden Armor of Miracles;Golden Armor of Miracles;; +225;Snowball;Snowball;; +226;DoReMiFa Mansion Trash Data;DoReMiFa Mansion Trash Data;; +227;Recovery Floppy;Recovery Floppy;; +228;Medium Recovery Floppy;Medium Recovery Floppy;; +229;Large Recovery Floppy;Large Recovery Floppy;; +230;Super Recovery Floppy;Super Recovery Floppy;; +231;MP Floppy;MP Floppy;; +232;Medium MP Floppy;Medium MP Floppy;; +233;Large MP Floppy;Large MP Floppy;; +234;Double Floppy;Double Floppy;; +235;Medical Floppy;Medical Floppy;; +236;RE Floppy;RE Floppy;; +237;Omnipotent Floppy;Omnipotent Floppy;; +238;Protection Floppy;Protection Floppy;; +239;Restore Floppy;Restore Floppy;; +240;Super Restore Floppy;Super Restore Floppy;; +241;Bandage;Bandage;; +242;Infinity Bandage;Infinity Bandage;; +243;Attack Memory;Attack Memory;; +244;Defense Memory;Defense Memory;; +245;Speed Memory;Speed Memory;; +246;Omnipotent Memory;Omnipotent Memory;; +247;Attack Memory (S);Attack Memory (S);; +248;Defense Memory (S);Defense Memory (S);; +249;Speed Memory (S);Speed Memory (S);; +250;Portable Potty;Portable Potty;; +251;Infinity Pilot;Infinity Pilot;; +252;3-Dimensional Fruit;3-Dimensional Fruit;; +253;6-Dimensional Fruit;6-Dimensional Fruit;; +254;12-Dimensional Fruit;12-Dimensional Fruit;; +255;24-Dimensional Fruit;24-Dimensional Fruit;; +256;Mega Meat;Mega Meat;; +257;Giga Meat;Giga Meat;; +258;Terra Meat;Terra Meat;; +259;Infinity Mushroom;Infinity Mushroom;; +260;Reinforced RE Floppy;Reinforced RE Floppy;; +261;Special Move Floppy;Special Move Floppy;; +262;Sedation Floppy;Sedation Floppy;; +263;Overdrive Memory;Overdrive Memory;; +264;Swiftness Memory;Swiftness Memory;; +265;Rigid Body Memory;Rigid Body Memory;; +266;Juicy Grass;Juicy Grass;; +272;Crimson Piece;Crimson Piece;; +273;Courage Piece;Courage Piece;; +274;Ultimate Piece;Ultimate Piece;; +275;Supreme Piece;Supreme Piece;; +277;Infinity Anchovy;Infinity Anchovy;; +278;Infinity Snapper;Infinity Snapper;; +279;Infinity Trout;Infinity Trout;; +280;Infinity Catfish;Infinity Catfish;; +281;Infinity Seabass;Infinity Seabass;; +282;Infinity Medaka;Infinity Medaka;; +283;Infinity Goldfish;Infinity Goldfish;; +284;Infinity Carp;Infinity Carp;; +285;Infinity Black Digitrout;Infinity Black Digitrout;; +286;Infinity Bitterling;Infinity Bitterling;; +287;Infinity Salmon;Infinity Salmon;; +288;Infinity Loach;Infinity Loach;; +289;Infinity Eel;Infinity Eel;; +290;Infinity Arowana;Infinity Arowana;; +291;Infinity Pirarucu;Infinity Pirarucu;; +292;Infinity Squid;Infinity Squid;; +293;Infinity Tuna;Infinity Tuna;; +294;Infinity Crab;Infinity Crab;; +295;Infinity Whale;Infinity Whale;; +296;Infinity Pygmy King Anchovy;Infinity Pygmy King Anchovy;; +297;Infinity Sovereign Lord Snapper;Infinity Sovereign Lord Snapper;; +298;Infinity Roe King Trout;Infinity Roe King Trout;; +299;Infinity Earth God Catfish;Infinity Earth God Catfish;; +300;Infinity Fish God Seabass;Infinity Fish God Seabass;; +301;Infinity Prince Medaka;Infinity Prince Medaka;; +302;Infinity Gold King Goldfish;Infinity Gold King Goldfish;; +303;Infinity Monarch Carp;Infinity Monarch Carp;; +304;Infinity Overlord Black Carp;Infinity Overlord Black Carp;; +305;Infinity Prodigious King Bitterling;Infinity Prodigious King Bitterling;; +306;Infinity Frost King Salmon;Infinity Frost King Salmon;; +307;Infinity Viking Loach;Infinity Viking Loach;; +308;Infinity Shrewd King Eel;Infinity Shrewd King Eel;; +309;Infinity Dragon King Arowana;Infinity Dragon King Arowana;; +310;Infinity Tyrant Pirarucu;Infinity Tyrant Pirarucu;; +311;Infinity Monarch Squid;Infinity Monarch Squid;; +312;Infinity Sea King Tuna;Infinity Sea King Tuna;; +313;Infinity Crab King;Infinity Crab King;; +314;Legendary Infinity Whale;Legendary Infinity Whale;; +315;Ogre's Bone Club;Ogre's Bone Club;; +316;Fox Shrine's Bell String;Fox Shrine's Bell String;; +317;V-Tamer Certificate;V-Tamer Certificate;; +318;Insect Assassin Certificate;Insect Assassin Certificate;; +319;Proto Metal;Proto Metal;; +320;Giant Scissors;Giant Scissors;; +321;Insectivore Fertilizer;Insectivore Fertilizer;; +322;Big Tree's Dead Branch;Big Tree's Dead Branch;; +323;Steel Helmet of the Centaur;Steel Helmet of the Centaur;; +324;Cursed Cloth;Cursed Cloth;; +325;Bomb Gloves;Bomb Gloves;; +326;Metal Armor;Metal Armor;; +327;Magic Amulet;Magic Amulet;; +328;Ancient Spirit of Two Souls;Ancient Spirit of Two Souls;; +329;Blade of the Wind Dragon;Blade of the Wind Dragon;; +330;Bloody Metal;Bloody Metal;; +331;Fierce Scissors;Fierce Scissors;; +332;Fatal Bone;Fatal Bone;; +333;Giant Forest Tree;Giant Forest Tree;; +334;Black Hand;Black Hand;; +335;Fairy Spear;Fairy Spear;; +336;Mystery Ray Gun;Mystery Ray Gun;; +337;Nightmare Egg;Nightmare Egg;; +338;Fire Chains of Destruction;Fire Chains of Destruction;; +339;High Speed Turbine;High Speed Turbine;; +340;Noble Mane;Noble Mane;; +341;Evil Plush;Evil Plush;; +342;Fake Royalty Certificate;Fake Royalty Certificate;; +343;Staff of the Shrine Priestess;Staff of the Shrine Priestess;; +344;Emperial Dragon's Old Cannon;Emperial Dragon's Old Cannon;; +345;Omega Blade;Omega Blade;; +346;Jet-Black Magic Circle;Jet-Black Magic Circle;; +347;Blue Swiftness Armour;Blue Swiftness Armour;; +348;Devil's Scissors;Devil's Scissors;; +349;Infinity Metal;Infinity Metal;; +350;CHO Alloy;CHO Alloy;; +351;Clown Mask;Clown Mask;; +352;Cursed Puppet;Cursed Puppet;; +353;Completed Parts;Completed Parts;; +354;Long Grey Beard of Greed;Long Grey Beard of Greed;; +355;Holy Mother's Javelin;Holy Mother's Javelin;; +356;Battle Axe of Sorrow;Battle Axe of Sorrow;; +357;Ancient Lions Fangs;Ancient Lions Fangs;; +358;Colourful Platina;Colourful Platina;; +359;Crimson Metal;Crimson Metal;; +360;Swiftness X-Antibody;Swiftness X-Antibody;; +361;Gluttony X-Antibody;Gluttony X-Antibody;; +362;Miracle X-Antibody;Miracle X-Antibody;; +364;X-Reduction Field;X-Reduction Field;; +365;Mutated Waste Data;Mutated Waste Data;; +366;Fierce Deity's Resentful Blade;Fierce Deity's Resentful Blade;; +367;Janbari Firewood;Janbari Firewood;; +368;Chip of Courage;Chip of Courage;; +369;Chip of Friendship;Chip of Friendship;; +370;Chip of Love;Chip of Love;; +371;Chip of Knowledge;Chip of Knowledge;; +372;Chip of Sincerity;Chip of Sincerity;; +373;Chip of Reliability;Chip of Reliability;; +374;Chip of Hope;Chip of Hope;; +375;Chip of Light;Chip of Light;; +376;V Chip;V Chip;; +377;Blue Chip;Blue Chip;; +378;Bancho Chip;Bancho Chip;; +379;Handy Manual;Handy Manual;; +380;Miracle Piece;Miracle Piece;; +381;Swiftness Piece;Swiftness Piece;; +382;Gluttony Piece;Gluttony Piece;; +383;Jet-Black X-Antibody;Jet-Black X-Antibody;; +384;Semi-finished Parts;Semi-finished Parts;; +385;Burst Code;Burst Code;; +386;Shield Code;Shield Code;; +387;Acceler Code;Acceler Code;; +388;Brain Code;Brain Code;; +389;Technical Code;Technical Code;; +390;Serpentine's Scale;Serpentine's Scale;; +391;Larva Decoder;Larva Decoder;; +392;Blank DigiCore;Blank DigiCore;; +393;Will of Destruction;Will of Destruction;; +394;Will of the Guardian;Will of the Guardian;; +395;Will of Swiftness;Will of Swiftness;; +396;Will of Wisdom;Will of Wisdom;; +397;Will of the Skilled;Will of the Skilled;; +398;DUMMY 1;DUMMY 1;; +399;DUMMY 2;DUMMY 2;; +400;Famitsu Booster;Famitsu Booster;; +401;Famitsu USB Stick;Famitsu USB Stick;; +402;Famitsu Prime Steak;Famitsu Prime Steak;; +403;Famitsu Prime Fish;Famitsu Prime Fish;; +404;Satisfying Meat;Satisfying Meat;; +405;High Motivation Meat;High Motivation Meat;; +406;Bargain Disc;Bargain Disc;; +407;Triple Disc;Triple Disc;; +408;Counterattack Disc;Counterattack Disc;; +409;Smiling Drink;Smiling Drink;; +410;Training Drink;Training Drink;; +411;Diet Mushroom;Diet Mushroom;; +412;Elder Mushroom;Elder Mushroom;; +413;Ultra Aid;Ultra Aid;; +414;Alrau Mandrake;Alrau Mandrake;; +415;Platinum Acorn;Platinum Acorn;; +416;Super Dengeki Lemon;Super Dengeki Lemon;; +417;Chain Marron;Chain Marron;; +418;Shield and Sword Plugin;Shield and Sword Plugin;; +419;MAX Plugin;MAX Plugin;; +420;Dengeki Digicatfish;Dengeki Digicatfish;; +421;White Sea God Digiwhale;White Sea God Digiwhale;; +422;Tenacity Chip;Tenacity Chip;; +423;Full Power Chip;Full Power Chip;; \ No newline at end of file diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/KeyItemNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/KeyItemNames.csv new file mode 100644 index 0000000..aefd5f0 --- /dev/null +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/KeyItemNames.csv @@ -0,0 +1,128 @@ +index;original;replace;excludeTerms;excludePaths +0;Digivice;Digivice;; +1;Mysterious HD-Data;Mysterious HD-Data;; +2;Garbage Data 00;Garbage Data 00;; +3;Garbage Data 01;Garbage Data 01;; +4;Garbage Data 02;Garbage Data 02;; +5;Garbage Data 03;Garbage Data 03;; +6;Garbage Data 04;Garbage Data 04;; +7;Garbage Data 05;Garbage Data 05;; +8;Garbage Data 06;Garbage Data 06;; +9;Garbage Data 07;Garbage Data 07;; +10;Garbage Data 08;Garbage Data 08;; +11;Garbage Data 09;Garbage Data 09;; +12;Garbage Data 10;Garbage Data 10;; +13;Garbage Data 11;Garbage Data 11;; +14;Garbage Data 12;Garbage Data 12;; +15;Ordinary Rod;Ordinary Rod;; +16;Amazing Rod;Amazing Rod;; +17;Worn Rod;Worn Rod;; +18;Buoyancy Program;Buoyancy Program;; +19;Sea Anemone;Sea Anemone;; +20;Night Flower Bud;Night Flower Bud;; +21;Luminescent Flower;Luminescent Flower;; +22;Shiny Pipe;Shiny Pipe;; +23;Frozen Flower;Frozen Flower;; +24;Red Propellant;Red Propellant;; +25;A Letter for Bancho;A Letter for Bancho;; +26;Storage Card α;Storage Card α;; +27;Storage Card β;Storage Card β;; +28;Storage Card γ;Storage Card γ;; +29;Storage Card Ω;Storage Card Ω;; +30;Storage Card Σ;Storage Card Σ;; +31;Dummy Garbage 01;Dummy Garbage 01;; +32;Dummy Garbage 02;Dummy Garbage 02;; +33;Dummy Garbage 03;Dummy Garbage 03;; +34;Gospel Structure;Gospel Structure;; +35;Blaze Program;Blaze Program;; +36;Stomach Medicine;Stomach Medicine;; +37;Headache Medicine;Headache Medicine;; +38;Cold Medicine;Cold Medicine;; +39;Anchor Data;Anchor Data;; +40;Rewrite Program;Rewrite Program;; +41;X-Reduction Field;X-Reduction Field;; +42;Dimensional Key Chain;Dimensional Key Chain;; +43;Dimensional Key Chain II;Dimensional Key Chain II;; +44;Incredibly Dirty Item;Incredibly Dirty Item;; +45;Snowball;Snowball;; +46;Kuwaga Autograph;Kuwaga Autograph;; +47;Glowing Spores;Glowing Spores;; +48;Giant Shell;Giant Shell;; +49;Janbari Firewood;Janbari Firewood;; +50;Digi Redwood;Digi Redwood;; +51;Digi Larch;Digi Larch;; +52;Digi Gum Tree;Digi Gum Tree;; +53;Ring Corner;Ring Corner;; +54;Ring Mat;Ring Mat;; +55;Ring Rope;Ring Rope;; +56;Building Blueprints;Building Blueprints;; +57;Crest of Courage;Crest of Courage;; +58;Crest of Friendship;Crest of Friendship;; +59;Crest of Love;Crest of Love;; +60;Crest of Knowledge;Crest of Knowledge;; +61;Crest of Reliability;Crest of Reliability;; +62;Crest of Sincerity;Crest of Sincerity;; +63;Crest of Hope;Crest of Hope;; +64;Crest of Light;Crest of Light;; +65;Golden Digi-Egg;Golden Digi-Egg;; +66;Bancho's Fighting Spirit;Bancho's Fighting Spirit;; +67;Training Bomb;Training Bomb;; +68;Trash Bag;Trash Bag;; +69;Evil Heart Fragment;Evil Heart Fragment;; +70;Evil Heart Fragment;Evil Heart Fragment;; +71;Evil Heart Fragment;Evil Heart Fragment;; +72;Evil Heart Fragment;Evil Heart Fragment;; +73;Vision Program;Vision Program;; +74;Light Fragment;Light Fragment;; +75;Ultimate Herbal Medicine;Ultimate Herbal Medicine;; +76;Red Potion Recipe;Red Potion Recipe;; +77;Red Potion Recipe;Red Potion Recipe;; +78;Red Potion Recipe;Red Potion Recipe;; +79;Red Potion Recipe;Red Potion Recipe;; +80;Red Potion Recipe;Red Potion Recipe;; +81;Blue Potion Recipe;Blue Potion Recipe;; +82;Blue Potion Recipe;Blue Potion Recipe;; +83;Blue Potion Recipe;Blue Potion Recipe;; +84;Blue Potion Recipe;Blue Potion Recipe;; +85;Blue Potion Recipe;Blue Potion Recipe;; +86;Green Potion Recipe;Green Potion Recipe;; +87;Green Potion Recipe;Green Potion Recipe;; +88;Green Potion Recipe;Green Potion Recipe;; +89;Green Potion Recipe;Green Potion Recipe;; +90;Green Potion Recipe;Green Potion Recipe;; +91;Pink Potion Recipe;Pink Potion Recipe;; +92;Pink Potion Recipe;Pink Potion Recipe;; +93;Pink Potion Recipe;Pink Potion Recipe;; +94;Pink Potion Recipe;Pink Potion Recipe;; +95;Pink Potion Recipe;Pink Potion Recipe;; +96;Ultimate Herbal Recipe;Ultimate Herbal Recipe;; +97;Ultimate Herbal Recipe;Ultimate Herbal Recipe;; +98;Ultimate Herbal Recipe;Ultimate Herbal Recipe;; +99;Ultimate Herbal Recipe;Ultimate Herbal Recipe;; +100;Ultimate Herbal Recipe;Ultimate Herbal Recipe;; +101;High-High Recipe;High-High Recipe;; +102;Spicy Flight Recipe;Spicy Flight Recipe;; +103;Super Beauty Recipe;Super Beauty Recipe;; +104;Binary Elixir Recipe;Binary Elixir Recipe;; +105;Cosy Lifestyle Guide;Cosy Lifestyle Guide;; +106;Vadertron Battery;Vadertron Battery;; +107;Luminous OOPArt;Luminous OOPArt;; +108;High-High Potion;High-High Potion;; +109;Spicy Flight Potion;Spicy Flight Potion;; +110;Super Beauty Smoothie;Super Beauty Smoothie;; +111;Binary Elixir;Binary Elixir;; +112;Astro Banana;Astro Banana;; +113;Smiling Orange;Smiling Orange;; +114;Chestnut Burr;Chestnut Burr;; +115;Larva Decoder;Larva Decoder;; +116;Bolt Unlocker;Bolt Unlocker;; +117;Storage Card α;Storage Card α;; +118;Storage Card Ω;Storage Card Ω;; +119;Storage Card D;Storage Card D;; +120;Storage Card ∞;Storage Card ∞;; +121;Storage Card R;Storage Card R;; +122;Storage Card N;Storage Card N;; +123;Storage Card A;Storage Card A;; +124;Storage Card Y;Storage Card Y;; +125;Storage Card M1;Storage Card M1;; +126;Storage Card M2;Storage Card M2;; \ No newline at end of file diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/MedalNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/MedalNames.csv new file mode 100644 index 0000000..f97146b --- /dev/null +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/MedalNames.csv @@ -0,0 +1,101 @@ +index;original;replace;excludeTerms;excludePaths +0;Throbbing Adaptability;Throbbing Adaptability;; +1;Jijimon's Gratitude;Jijimon's Gratitude;; +2;Bancho;Bancho;; +3;World Savior;World Savior;; +4;Water Walker;Water Walker;; +5;Forest Guide;Forest Guide;; +6;Eye for Detail;Eye for Detail;; +7;Bike Expert;Bike Expert;; +8;Hercules;Hercules;; +9;Kind Heart;Kind Heart;; +10;Lucky Duck;Lucky Duck;; +11;Time Guardian;Time Guardian;; +12;Ultimate;Ultimate;; +13;Ultimaster;Ultimaster;; +14;Agumon is ♥;Agumon is ♥;; +15;I ♥ DIGIMON;I ♥ DIGIMON;; +16;Dr. Digimon;Dr. Digimon;; +17;Transcended Grief;Transcended Grief;; +18;City Workhorse;City Workhorse;; +19;City Leader;City Leader;; +20;City Hero;City Hero;; +21;Tenacious Devil;Tenacious Devil;; +22;Strong Veteran;Strong Veteran;; +23;Eagle-Eye;Eagle-Eye;; +24;Perfect Win;Perfect Win;; +25;Challenger;Challenger;; +26;Nice Combo;Nice Combo;; +27;Timekeeper;Timekeeper;; +28;Friendship!;Friendship!;; +29;Colosseum Champion;Colosseum Champion;; +30;Gladiator;Gladiator;; +31;Leave it to me!;Leave it to me!;; +32;I ♥ QUESTS;I ♥ QUESTS;; +33;Local Gamer;Local Gamer;; +34;Card Mania;Card Mania;; +35;Rookie Collector;Rookie Collector;; +36;Advanced Collector;Advanced Collector;; +37;Professional Collector;Professional Collector;; +38;Royal Collector;Royal Collector;; +39;File Island Collector;File Island Collector;; +40;Fire Master;Fire Master;; +41;Ice Master;Ice Master;; +42;Air Master;Air Master;; +43;Nature Master;Nature Master;; +44;Combat Master;Combat Master;; +45;L&D Master;L&D Master;; +46;Machine Master;Machine Master;; +47;Filth Master;Filth Master;; +48;Master of all Skills;Master of all Skills;; +49;One Pointer;One Pointer;; +50;Digimon Stylist;Digimon Stylist;; +51;I ♥ ACCESORIES;I ♥ ACCESORIES;; +52;Information Collector;Information Collector;; +53;Many Friends;Many Friends;; +54;Walking Dictionary;Walking Dictionary;; +55;Full Potential;Full Potential;; +56;Digital Merchant;Digital Merchant;; +57;Cyberspace Resident;Cyberspace Resident;; +58;Novice Fisherman;Novice Fisherman;; +59;Hooked on Fishing;Hooked on Fishing;; +60;Fish Master;Fish Master;; +61;Strongest;Strongest;; +62;X-Evolution;X-Evolution;; +63;Tyranno-Mania;Tyrano-Mania;; +64;Tweet-Mania;Tweet-Mania;; +65;Kuwagamon's Disciple;Kuwagamon's Disciple;; +66;Meat Field Firefighter;Meat Field Firefighter;; +67;Local Drinks Mania;Local Drinks Mania;; +68;DoReMiFa Manager;DoReMiFa Manager;; +69;Carpenter Assistant;Carpenter Assistant;; +70;Marvelous Manager;Marvelous Manager;; +71;World's No.1 Manager;World's No.1 Manager;; +72;Garbage Collector;Garbage Collector;; +73;Marathon Runner;Marathon Runner;; +74;Saving Freak;Saving Freak;; +75;Crown Hunter;Crown Hunter;; +76;I ♥ MEAT;I ♥ MEAT;; +77;Gourmet;Gourmet;; +78;Treasure Mania;Treasure Mania;; +79;Frequent flier;Frequent flier;; +80;Fond of Divination;Fond of Divination;; +81;Magical Experiments;Magical Experiments;; +82;Garbage Fisher;Garbage Fisher;; +83;Hide-and-seek Freak;Hide-and-seek Freak;; +84;Bodyguard-Mania;Bodyguard-Mania;; +85;Awakening the Giant;Awakening the Giant;; +86;Universe Whisperer;Universe Whisperer;; +87;Bearer of the Aptitude;Bearer of the Aptitude;; +88;Time Traveller;Time Traveller;; +89;Tenkaichi Champion;Tenkaichi Champion;; +90;Bounty Hunter;Bounty Hunter;; +91;Killing Machine;Killing Machine;; +92;Invincible;Invincible;; +93;Frigiman;Frigiman;; +94;Grown-up;Grown-up;; +95;Abyss Returnee;Abyss Returnee;; +96;Infinity Conqueror;Infinity Conqueror;; +97;World Challenger;World Challenger;; +98;Legendary Hiro;Legendary Hiro;; +99;Re:Digitize;Re:Digitize;; \ No newline at end of file diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/NatureNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/NatureNames.csv new file mode 100644 index 0000000..f2ff75e --- /dev/null +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/NatureNames.csv @@ -0,0 +1,16 @@ +index;original;replace;excludeTerms;excludePaths +0;Lively;Lively;; +1;Brave;Brave;; +2;Hardy;Hardy;; +3;Relaxed;Relaxed;; +4;Clever;Clever;; +5;Quiet;Quiet;; +6;Calm;Calm;; +7;Strategist;Strategist;; +8;Timid;Timid;; +9;Combi A;Combi A;; +10;Combi B;Combi B;; +11;Schemer;Schemer;; +12;Burst;Burst;; +13;Build;Build;; +14;Crafty;Crafty;; \ No newline at end of file diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/SkillNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/SkillNames.csv new file mode 100644 index 0000000..2c64537 --- /dev/null +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/SkillNames.csv @@ -0,0 +1,62 @@ +index;original;replace;excludeTerms;excludePaths +1;Fire Breath;Fire Breath;; +2;Fire Tower;Fire Tower;; +3;Fire Wall;Fire Wall;; +4;Mine;Mine;; +5;Spread Bomb;Spread Bomb;; +6;Magma Bomb;Magma Bomb;; +7;Flame Storm;Flame Storm;; +8;Bubble Breath;Bubble Breath;; +9;Hailstone;Hailstone;; +10;Splash;Splash;; +11;Waterfall;Waterfall;; +12;Heavy Rain;Heavy Rain;; +13;Ice Statue;Ice Statue;; +14;Aurora Freeze;Aurora Freeze;; +15;Electric Shoot;Electric Shoot;; +16;Wind Shoes;Wind Shoes;; +17;Air Cutter;Air Cutter;; +18;Electric Cloud;Electric Cloud;; +19;Thunderstorm;Thunderstorm;; +20;Confuse Storm;Confuse Storm;; +21;Hurricane;Hurricane;; +22;Poison Powder;Poison Powder;; +23;Earth Coat;Earth Coat;; +24;Poison Circle;Poison Circle;; +25;Roots Bind;Roots Bind;; +26;Rock Fall;Rock Fall;; +27;Land Slide;Land Slide;; +28;Poison Storm;Poison Storm;; +29;Sonic Jab;Sonic Jab;; +30;Muscle Charge;Muscle Charge;; +31;Spin Attack;Spin Attack;; +32;Heavy Impact;Heavy Impact;; +33;War Cry;War Cry;; +34;Charge Attack;Charge Attack;; +35;Fighting Aura;Fighting Aura;; +36;Dark Spirit;Dark Spirit;; +37;Light Soul;Light Soul;; +38;Loose Cloud;Loose Cloud;; +39;Flash;Flash;; +40;Evil Squall;Evil Squall;; +41;Holy Sunshine;Holy Sunshine;; +42;Judgment;Judgment;; +43;Mechanical Claw;Mechanical Claw;; +44;Upgrade;Upgrade;; +45;Energy Ball;Energy Ball;; +46;Anti-Attack Field;Anti-Attack Field;; +47;Heavy Laser;Heavy Laser;; +48;Machine Fall;Machine Fall;; +49;DG Dimension V2;DG Dimension V2;; +50;Dirty Kick;Dirty Kick;; +51;Ultra Stink Spray;Ultra Stink Spray;; +52;Poop Trap;Poop Trap;; +53;Poop Barrier;Poop Barrier;; +54;Random Poop Toss;Random Poop Toss;; +55;Poop Fall;Poop Fall;; +56;Ultimate Poop Hell;Ultimate Poop Hell;; +57;Bubbles;Bubbles;; +58;Deadly Counter;Deadly Counter;; +59;Data Wave;Data Wave;; +60;Access Block;Access Block;; +61;Lossy Compression;Lossy Compression;; \ No newline at end of file diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/keep-15.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/keep-15.csv new file mode 100644 index 0000000..0d3df07 --- /dev/null +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/keep-15.csv @@ -0,0 +1,861 @@ +index;original;replace;excludeTerms;excludePaths +0;0;0;; +1;Bit;Bit;; +2;HP;HP;; +3;MP;MP;; +4;HP;HP;; +5;MP;MP;; +6;ATK;ATK;; +7;DEF;DEF;; +8;SPD;SPD;; +9;BRN;BRN;; +10;Digimon;Digimon;; +11;Form;Form;; +12;Fresh;Baby I;; +13;In-Training;Baby II;; +14;Rookie;Child;; +15;Champion;Adult;; +16;Ultimate;Perfect;; +17;Mega;Ultimate;; +18;Armor;Armor;; +19;Special;Special;; +20;Attribute;Attribute;; +21;Active;Active;; +22;Age;Age;; +23;D;D;; +24;Weight;Weight;; +25;G;G;; +26;Summon;Summon;; +27;Nature;Nature;; +28;Life;Life;; +29;Happ.;Happ.;; +30;Disc.;Disc.;; +31;Poop;Poop;; +32;???;???;; +33;Animals;Animals;; +34;──────;──────;; +35;NO DATA;NO DATA;; +36;Individual;Individual;; +37;Now Loading...;Now Loading...;; +38;×;×;; +39;/;/;; +40;Name;Name;; +41;Normal Skills;Normal Skills;; +42;Special Move;Special Move;; +43;Summon;Summon;; +44;???;???;; +45;None;None;; +46;Happiness;Happiness;; +47;Discipline;Discipline;; +48;Poop;Poop;; +49;LIFE;LIFE;; +50;Data;Data;; +51;Vaccine;Vaccine;; +52;Virus;Virus;; +53;Free;Free;; +54;Unknown;Unknown;; +55;~;~;; +56;P;P;; +57;%;%;; +58;L;L;; +59;R;R;; +60;MB;MB;; +61;NO;NO;; +62;HOST;HOST;; +63;ENTRY;ENTRY;; +64;HOST;HOST;; +65;GUEST;GUEST;; +66;Place;Place;; +67;RP;RP;; +68;Wins;Wins;; +69;Floor;Floor;; +70;km;km;; +71;Top;Top;; +72;Skill;Skill;; +130;Select the skills your Partner Digimon will use.;Select the skills your Partner Digimon will use.;; +131;Displays Digivolutions your Partner Digimon went through and its Digivolution History.;Displays Evolutions your Partner Digimon went through and its Evolution History.;; +132;Displays the entire map of File Island.;Displays the entire map of File Island.;; +133;Select the Accessories your Partner Digimon will wear.;Select the Accessories your Partner Digimon will wear.;; +134;Displays various information about the Tamer.;Displays various information about the Tamer.;; +135;Displays your Collected Cards, Key Items and the Glossary of this World.;Displays your Collected Cards, Key Items and the Glossary of this World.;; +136;Summon the Spirit of a Partner from the past to strike your enemy with a Special Move.;Summon the Spirit of a Partner from the past to strike your enemy with a Special Move.;; +137;Displays the Mail you've received.;Displays the Mail you've received.;; +138;Use this menu to Save, Load, and set various Settings.;Use this menu to Save, Load, and set various Settings.;; +150;DIGITTER;DIGITTER;; +160;AREA MAP;AREA MAP;; +161;Location;Location;; +200;Message Speed;Message Speed;; +201;Autoscroll;Autoscroll;; +202;BGM Volume;BGM Volume;; +203;SE Volume;SE Volume;; +204;Battle mode;Battle mode;; +205;Vertical Camera;Vertical Camera;; +206;Horizontal Camera;Horizontal Camera;; +210;SLOW;SLOW;; +211;FAST;FAST;; +212;ON;ON;; +213;OFF;OFF;; +214;MAX;MAX;; +215;MIN;MIN;; +216;NORMAL;NORMAL;; +217;REVERSE;REVERSE;; +218;QUICK;QUICK;; +219;HOLD;HOLD;; +220;Change the display speed of the dialogue.;Change the display speed of the dialogue.;; +221;Turn Autoscroll ON/OFF;Turn Autoscroll ON/OFF;; +222;Set the volume of the BGM.;Set the volume of the BGM.;; +223;Set the volume of the SE.;Set the volume of the SE.;; +224;Change the battle commands by using the d-pad control buttons. Quick will automatically bring you back to the center.;Change the battle commands by using the d-pad control buttons. Quick will automatically bring you back to the center.;; +225;Change the y-axis of the camera.;Change the y-axis of the camera.;; +226;Change the x-axis of the camera.;Change the x-axis of the camera.;; +300;Decode Level;Decode Level;; +301;Raised Partners;Raised Partners;; +302;Digivolutions;Evolutions;; +303;Obtained Medals;Obtained Medals;; +304;Quests Cleared;Quests Cleared;; +305;Money;Money;; +306;Play Time;Play Time;; +310;NEXT;NEXT;; +320;Medals;Medals;; +321;Records;Records;; +330;View acquired Medals.;View acquired Medals.;; +331;View various records you set as a Tamer.;View various records you set as a Tamer.;; +400;Cards;Cards;; +401;Key Items;Key Items;; +402;Glossary;Glossary;; +410;Look at Digimon Cards in your possession.;Look at Digimon Cards in your possession.;; +411;Displays Key Items you have acquired.;Displays Key Items you have acquired.;; +412;Shows various common terms used in the Digital World and their meaning.;Shows various common terms used in the Digital World and their meaning.;; +500;DIGIMON;DIGIMON;; +501;PLAYER;PLAYER;; +502;LOG;LOG;; +503;SYSTEM;SYSTEM;; +600;POWER;POWER;; +601;MP;MP;; +602;RANGE;RANGE;; +603;ADD;ADD;; +610;No Skills have been equipped.;No Skills have been equipped.;; +620;This Skill has not yet been mastered.;This Skill has not yet been mastered.;; +621;Please set an attacking Skill.;Please set an attacking Skill.;; +622;The current partner cannot learn this Skill.;The current partner cannot learn this Skill.;; +630;SPECIAL MOVE;SPECIAL MOVE;; +640;Select a Skill for Slot 1.;Select a Skill for Slot 1.;; +641;Select a Skill for Slot 2.;Select a Skill for Slot 2.;; +642;Select a Skill for Slot 3.;Select a Skill for Slot 3.;; +700;Buy;Buy;; +701;Sell;Sell;; +702;Quit;Quit;; +800;Money;Money;; +801;Buy;Buy;; +802;Sell;Sell;; +803;In Possession;In Possession;; +804;Total;Total;; +805;Vending machine;Vending machine;; +806;In Warehouse;In Warehouse;; +807;Buying Amount;Buying Amount;; +808;Selling Amount;Selling Amount;; +809;Trade Amount;Trade Amount;; +810;Please select the number of pieces to buy.;Please select the number of pieces to buy.;; +811;Please select the number of pieces to sell.;Please select the number of pieces to sell.;; +820;, correct?;, correct?;; +821;Yes;Yes;; +822;No;No;; +830;Meat futures trade\n;Meat futures trade\n;; +831;Today's market price;Today's market price;; +832;Transaction limit;Transaction limit;; +833;Select the number of pieces to trade.;Select the number of pieces to trade.;; +900;Deposit;Deposit;; +901;Retrieve;Retrieve;; +902;Quit;Quit;; +1000;Deposit;Deposit;; +1001;Retrieve;Retrieve;; +1002;In-Bag:;In-Bag:;; +1003;Warehouses No.;Warehouses No.;; +1004;In Warehouse:;In Warehouse:;; +1005;;;; +1006;In Possession:;In Possession:;; +1007;;;; +1008;Please select how many to deposit;Please select how many to deposit;; +1009;Please select how many to retrieve;Please select how many to retrieve;; +1010;Available Warehouse Space;Available Warehouse Space;; +1011;Warehouse;Warehouse;; +1012;In Bag:;In Bag:;; +1013;In Warehouse:;In Warehouse:;; +1014;Deposit Amount;Deposit Amount;; +1015;Retrieve Amount;Retrieve Amount;; +1100;Your Call;Your Call;; +1101;Item;Item;; +1102;Move;Move;; +1103;Run;Run;; +1104;Defend;Defend;; +1105;Target;Target;; +1106;Full Power;Full Power;; +1107;Moderate;Moderate;; +1108;Distance;Distance;; +1109;Skill 1;Skill 1;; +1110;Skill 2;Skill 2;; +1111;Skill 3;Skill 3;; +1120;Leave the control of the battle to your Partner Digimon.;Leave the control of the battle to your Partner Digimon.;; +1121;Select an item to support your partner.;Select an item to support your partner.;; +1122;Instruct your Partner to move to a specified position.;Instruct your Partner to move to a specified position.;; +1123;Command your Partner to run and escape from the Battle.;Command your Partner to run and escape from the Battle.;; +1124;Order to assume a defensive posture without attacking at all.;Order to assume a defensive posture without attacking at all.;; +1125;Order to attack the specified target;Order to attack the specified target;; +1126;Order to attack with the most powerful Skill.;Order to attack with the most powerful Skill.;; +1127;Order to attack with the Skill that consumes the least MP.;Order to attack with the Skill that consumes the least MP.;; +1128;Order to keep distance from the target.;Order to keep distance from the target.;; +1130;CAMERA;CAMERA;; +1131;SPECIAL;SPECIAL;; +1132;SUMMON;SUMMON;; +1133;GOSPEL;GOSPEL;; +1140;STOP;STOP;; +1200;BATTLE RESULT;BATTLE RESULT;; +1201;TRAINING RESULT;TRAINING RESULT;; +1202;FOOD RESULT;FOOD RESULT;; +1210;Status;Status;; +1211;Learned Skill;Learned Skill;; +1212;Obtained Items;Obtained Items;; +1213;Money;Money;; +1214; has mastered !; has mastered !;; +1300;TRAINING MENU;TRAINING MENU;; +1301;Training Effect;Training Effect;; +1305;Critical Hit Chance!;Critical Hit Chance!;; +1306;Guard UP Chance!;Guard UP Chance!;; +1307;Assist UP Chance!;Assist UP Chance!;; +1310;Stop in the success zone!;Stop in the success zone!;; +1311;Stop at the same mark!;Stop at the same mark!;; +1312;Time the moment when to guard!;Time the moment when to guard!;; +1313;Move in order to avoid the bombs!;Move in order to avoid the bombs!;; +1314;Which route is correct?;Which route is correct?;; +1315;Which one is the same as the sample?;Which one is the same as the sample?;; +1316;Aim for the Red Line!;Aim for the Red Line!;; +1317;Aim for the Red Line!;Aim for the Red Line!;; +1318;Aim for the Red Line!;Aim for the Red Line!;; +1320;STOP;STOP;; +1325;STOP;STOP;; +1330;GUARD;GUARD;; +1335;LEFT;LEFT;; +1336;MIDDLE;MIDDLE;; +1337;RIGHT;RIGHT;; +1340;1;1;; +1341;2;2;; +1342;3;3;; +1345;One;One;; +1346;Two;Two;; +1347;Three;Three;; +1350;STOP!;STOP!;; +1355;STOP!;STOP!;; +1360;STOP!;STOP!;; +1400;TOTAL;TOTAL;; +1401;Completion Rate;Completion Rate;; +1500;Save;Save;; +1501;Load;Load;; +1502;Settings;Settings;; +1503;Return to Title;Return to Title;; +1510;Do you want to return to the Title Screen?;Do you want to return to the Title Screen?;; +1511;Yes;Yes;; +1512;No;No;; +1520;Any unsaved progress will be lost, continue?;Any unsaved progress will be lost, continue?;; +1521;Yes;Yes;; +1522;No;No;; +1530;Save your current progress.;Save your current progress.;; +1531;Load previously saved data.;Load previously saved data.;; +1532;Adjust various settings of the game.;Adjust various settings of the game.;; +1533;Return to the Title Screen.;Return to the Title Screen.;; +1540;You need to select cleared save data.;You need to select cleared save data.;; +1550;The save data is corrupted.;The save data is corrupted.;; +1551;Corrupt data cannot be loaded, please delete it.;Corrupt data cannot be loaded, please delete it.;; +1600;USABLE;USABLE;; +1601;SPECIAL;SPECIAL;; +1602;POWER;POWER;; +1620;Do you wish to overwrite the existing data?;Do you wish to overwrite the existing data?;; +1621;Yes;Yes;; +1622;No;No;; +1630;Do you want to save in this slot?;Do you want to save in this slot?;; +1631;Yes;Yes;; +1632;No;No;; +1640;Do you want to send ?;Do you want to send ?;; +1641;Yes;Yes;; +1642;No;No;; +1650;Do you want to charge ?;Do you want to charge ?;; +1651;Yes;Yes;; +1652;No;No;; +1660;DigMemories received from other Tamers cannot be transferred!;DigMemories received from other Tamers cannot be transferred!;; +1700;ITEM LIST;ITEM LIST;; +1710;What will you do with ?;What will you do with ?;; +1711;Use;Use;; +1712;Move;Move;; +1713;Discard;Discard;; +1720;Do you want to toss ?;Do you want to toss ?;; +1721;Yes;Yes;; +1722;No;No;; +1730;You tossed .;You tossed .;; +1731; can't be thrown away.; can't be thrown away.;; +1740;can't be used.;can't be used.;; +1741;Return;Return;; +1750;Would you like to sort your Items?;Would you like to sort your Items?;; +1751;Yes;Yes;; +1752;No;No;; +1800;Accessory;Accessory;; +1801;Do you want to buy ?;Do you want to buy ?;; +1802;Yes;Yes;; +1803;No;No;; +1900;SUBJECT;SUBJECT;; +1901;FROM;FROM;; +1920;Total:;Total:;; +1921;Unread:;Unread:;; +1922;Cleared:;Cleared:;; +1930;Do you want to open the attached file?;Do you want to open the attached file?;; +1931;Yes;Yes;; +1932;No;No;; +2000;Birdra Transport;Birdra Transport;; +2100;INFORMATION;INFORMATION;; +2200;Please select an access room.;Please select an access room.;; +2201;NO;NO;; +2210;ROOM;ROOM;; +2211;MEMBER;MEMBER;; +2300;Set your accessory for Slot 1.;Set your accessory for Slot 1.;; +2301;Set your accessory for Slot 2.;Set your accessory for Slot 2.;; +2302;Set your accessory for Slot 3.;Set your accessory for Slot 3.;; +2400;Restaurant;Restaurant;; +2401;MENU;MENU;; +2402;Effect;Effect;; +2403;Calories;Calories;; +2500;Entry Requirements;Entry Requirements;; +2501;Participants;Participants;; +2502;Description;Description;; +2510;BATTLE LIST;BATTLE LIST;; +2600;PUSH ANY BUTTON;PUSH ANY BUTTON;; +2610;New Game;New Game;; +2611;Load Game;Load Game;; +2612;Local Play;Local Play;; +2613;New Game+;New Game+;; +2620;Play the game from the beginning.;Play the game from the beginning.;; +2621;Select a saved file and continue your adventure.;Select a saved file and continue your adventure.;; +2622;Compete or cooperate with nearby players.;Compete or cooperate with nearby players.;; +2623;You can carry over data from your cleared file and replay the game from the beginning.;You can carry over data from your cleared file and replay the game from the beginning.;; +2700;ITEM;ITEM;; +2701;PRAISE;PRAISE;; +2702;SCOLD;SCOLD;; +2703;SLEEP;SLEEP;; +2704;DIGIVICE;DIGIVICE;; +2710;Year;Year;; +2711;Day;Day;; +2720;Area Map;Area Map;; +2730;Digivice Mode;Digivice Mode;; +2800;Select;Select;; +2801;Back;Back;; +2802;Move;Move;; +2803;Sort;Sort;; +2804;Scroll;Scroll;; +2805;View;View;; +2806;Toggle;Toggle;; +2807;Remove;Remove;; +2808;Change;Change;; +2809;Zoom;Zoom;; +2810;Reset;Reset;; +2811;Display;Display;; +2812;Rotate;Rotate;; +2813;Read;Read;; +2814;Toss;Toss;; +2815;Gauge;Gauge;; +2816;Move;Move;; +2817;Close;Close;; +2818;Attachment;Attachment;; +2819;Card Set;Card Set;; +2820;Cancel;Cancel;; +2821;Status;Status;; +2822;Rule;Rule;; +2823;Rule;Rule;; +2824;Change Teams;Change Teams;; +2825;Confirm Scenario;Confirm Scenario;; +2826;Start the match;Start the match;; +2827;Ready;Ready;; +2828;Page;Page;; +2829;Rank;Rank;; +2830;Map;Map;; +2831;Delete;Delete;; +2900;BAIT LIST;BAIT LIST;; +2910;Fish without Bait;Fish without Bait;; +2911;Fish without Bait.;Fish without Bait.;; +2920;Rod;Rod;; +2921;Bait;Bait;; +3000;Buy Cards;Buy Cards;; +3001;Sell Cards;Sell Cards;; +3010;GET CARD;GET CARD;; +3011;Holds;Holds;; +3012;SOLD OUT;SOLD OUT;; +3013;Sold Number;Sold Number;; +3100;News Archive;News Archive;; +3101;Logs;Logs;; +3200;FISHING RECORD;FISHING RECORD;; +3201;Record:;Record:;; +3202;cm;cm;; +3300;ID;ID;; +3301;Rank;Rank;; +3302;Points;Points;; +3303;Name;Name;; +3304;Amount;Amount;; +3310;NEW;NEW;; +3311;ALL;ALL;; +3312;C;C;; +3313;B;B;; +3314;A;A;; +3315;S;S;; +3316;SS;SS;; +3317;SET;SET;; +3320;Display List;Display List;; +3400;Battle Lobby;Battle Lobby;; +3401;MEMBER;MEMBER;; +3402;TEAM;TEAM;; +3403;READY;READY;; +3404;BATTLE RULE(S);BATTLE RULE(S);; +3410;Tamer;Tamer;; +3411;Time Limit;Time Limit;; +3412;Items;Items;; +3420;ON;ON;; +3421;OFF;OFF;; +3430;Rules;Rules;; +3431;Team;Team;; +3432;CLOSE;CLOSE;; +3433;Battle confirmation;Battle confirmation;; +3500;Operation guide;Operation guide;; +3510;Play animation;Play animation;; +3511;Change animation;Change animation;; +3512;Rotate / Move;Rotate / Move;; +3513;Zoom;Zoom;; +3514;Reset;Reset;; +3520;Happy;Happy;; +3521;Refuse;Refuse;; +3522;Attack;Attack;; +3523;Guard;Guard;; +3600;Floor selection;Floor selection;; +3610;40F;40F;; +3611;30F;30F;; +3612;20F;20F;; +3613;10F;10F;; +3614;1F;1F;; +3615;Basement;Basement;; +3700;SAVE;SAVE;; +3701;LOAD;LOAD;; +3702;Del;Del;; +3705;Normal Mode;Normal Mode;; +3706;Hard Mode;Hard Mode;; +3707;;;; +3708;;;; +3710;CLEAR;CLEAR;; +3711;Cleared:;Cleared:;; +3712;Area;Area;; +3713;Data corrupted.;Data corrupted.;; +3720;Unable to access the save data.;Unable to access the save data.;; +3730;Yes;Yes;; +3731;No;No;; +3740;Do you want to save your progress in slot 1?;Do you want to save your progress in slot 1?;; +3741;Do you want to save your progress in slot 2?;Do you want to save your progress in slot 2?;; +3742;Do you want to save your progress in slot 3?;Do you want to save your progress in slot 3?;; +3750;Do you want to load the save data in slot 1?;Do you want to load the save data in slot 1?;; +3751;Do you want to load the save data in slot 2?;Do you want to load the save data in slot 2?;; +3752;Do you want to load the save data in slot 3?;Do you want to load the save data in slot 3?;; +3760;Do you want to delete save data in slot 1?;Do you want to delete save data in slot 1?;; +3761;Do you want to delete save data in slot 2?;Do you want to delete save data in slot 2?;; +3762;Do you want to delete save data in slot 3?;Do you want to delete save data in slot 3?;; +3770;Deleted data cannot be restored, are you sure?;Deleted data cannot be restored, are you sure?;; +3780;Please wait a moment...;Please wait a moment...;; +3790;Save completed.;Save completed.;; +3791;Save failed.;Save failed.;; +3792;Load completed.;Load completed.;; +3793;Load failed.;Load failed.;; +3794;Delete completed.;Delete completed.;; +3795;Delete failed.;Delete failed.;; +3800;Floor selection;Floor selection;; +3801;F;F;; +3900;Fishing;Fishing;; +4000;Item:;Item:;; +4001;Key Items:;Key Items:;; +4002;Cards:;Cards:;; +4003;Accessories:;Accessories:;; +4010;Trade Cards for ;Trade Cards for ;; +4020;Collector;Collector;; +4030;Trade cards for ?;Trade cards for ?;; +4031;Yes;Yes;; +4032;No;No;; +4040;No limit;No limit;; +4041;RANK C;RANK C;; +4042;RANK B;RANK B;; +4043;RANK A;RANK A;; +4044;RANK S;RANK S;; +4045;RANK SS;RANK SS;; +4100;Card Set;Card Set;; +4101;Completion Rate;Completion Rate;; +4102;Prize;Prize;; +4200;ALL;ALL;; +4201;C;C;; +4202;B;B;; +4203;A;A;; +4204;S;S;; +4205;SS;SS;; +4210;The exchange has not been completed. Close the window?;The exchange has not been completed. Close the window?;; +4211;Yes;Yes;; +4212;No;No;; +4220;Do you want to trade your cards for this?;Do you want to trade your cards for this?;; +4221;Yes;Yes;; +4222;No;No;; +4225;Do you want to trade these cards?;Do you want to trade these cards?;; +4226;Yes;Yes;; +4227;No;No;; +4230;Cards to exchange;Cards to exchange;; +4231;Total Points;Total Points;; +4232;Required Points;Required Points;; +4233;Cancel;Cancel;; +4234;Exchange Item;Exchange Item;; +4240;No Rank limit;No Rank limit;; +4241;C Rank only;C Rank only;; +4242;B Rank only;B Rank only;; +4243;A Rank only;A Rank only;; +4244;S Rank only;S Rank only;; +4245;SS Rank only;SS Rank only;; +4250;Choose a card to withdraw.;Choose a card to withdraw.;; +4300;Become a Host;Become a Host;; +4301;Become a Guest;Become a Guest;; +4302;Become the Host of this room and wait for an opponent.;Become the Host of this room and wait for an opponent.;; +4303;Look for a room with a Host and if a spot is available, you can connect to this room.;Look for a room with a Host and if a spot is available, you can connect to this room.;; +4310;Hosts List;Hosts List;; +4311;Friend Ranking;Friend Ranking;; +4312;Ranking;Ranking;; +4313;ROOM INDEX;ROOM INDEX;; +4400;Ranking Battle;Ranking Battle;; +4401;Tournament Battle;Tournament Battle;; +4402;View the top 100.;View the top 100.;; +4405;Search by ranking;Search by ranking;; +4406;Find a friend;Find a friend;; +4410;PLAYER DATA;PLAYER DATA;; +4411;World Ranking;World Ranking;; +4412;Tournament Participants;Tournament Participants;; +4420;Ranking;Ranking;; +4421;Ranking points;Ranking points;; +4422;Wins;Wins;; +4430;Do you want to see the information on?\n;Do you want to see the information on?\n;; +4431;Yes;Yes;; +4432;No;No;; +4440;Fight?;Fight?;; +4441;Yes;Yes;; +4442;No;No;; +4450;Return to the Tournament screen;Return to the Tournament screen;; +4451;OK;OK;; +4460;Start the Tournament?;Start the Tournament?;; +4461;Yes;Yes;; +4462;No;No;; +4470;Remove?;Remove?;; +4471;Yes;Yes;; +4472;No;No;; +4480;Choose your opponent and fight.;Choose your opponent and fight.;; +4481;You will be participating in a Tournament Match.;You will be participating in a Tournament Match.;; +4482;View the data for rankings 1 through 100.;View the data for rankings 1 through 100.;; +4485;Looking for an opponent with a ranking close to yours.;Looking for an opponent with a ranking close to yours.;; +4486;Look for opponents from your Friends List.\nWinning these battles will not increase your RP.;Look for opponents from your Friends List.\nWinning these battles will not increase your RP.;; +4500;StreetPass List;StreetPass List;; +4501;DATA;DATA;; +4600;Floor selection;Floor selection;; +4610;3rd floor;3rd floor;; +4611;2nd floor;2nd floor;; +4612;1st floor;1st floor;; +4700;Register Partner;Register Partner;; +4701;Load Partner Data;Load Partner Data;; +4702;Storage Card;Storage Card;; +4703;StreetPass Communication Settings;StreetPass Communication Settings;; +4710;Save the current Partner Digimon data to the Digi-Storage.;Save the current Partner Digimon data to the Digi-Storage.;; +4711;Load Digimon Data stored in the Digi-Storage.;Load Digimon Data stored in the Digi-Storage.;; +4712;Save special Digimon to the Digi-Storage using Storage Cards.;Save special Digimon to the Digi-Storage using Storage Cards.;; +4713;Unconfigured - Description of StreetPass Communications.;Unconfigured - Description of StreetPass Communications.;; +4800;Select a slot to register data.\n;Select a slot to register data.\n;; +4801;Select a slot to load data from.;Select a slot to load data from.;; +4802;Select the Digi-Storage used for StreetPass.;Select the Digi-Storage used for StreetPass.;; +4803;Digi-Storage;Digi-Storage;; +4805;Partner;Partner;; +4806;Storage Card;Storage Card;; +4810;Loaded Partner Data;Loaded Partner Data;; +4811;StreetPass Digimon;StreetPass Digimon;; +4820;Do you want to load this data?;Do you want to load this data?;; +4821;Yes;Yes;; +4822;No;No;; +4830;Register here?;Register here?;; +4831;Yes;Yes;; +4832;No;No;; +4840;Are you sure you want to overwrite this data?;Are you sure you want to overwrite this data?;; +4841;Yes;Yes;; +4842;No;No;; +4850;Do you want to load the data of this Digimon?;Do you want to load the data of this Digimon?;; +4851;Yes;Yes;; +4852;No;No;; +4860;Do you want to use this Digimon for StreetPass?;Do you want to use this Digimon for StreetPass?;; +4861;Yes;Yes;; +4862;No;No;; +4900;Sel.;Sel.;; +4901;Status;Status;; +4902;Registration Confirmation;Registration Confirmation;; +5000;Meeting Point;Meeting Point;; +5001;Standard Area;Standard Area;; +5100;Generation;Generation;; +5101;Wins;Wins;; +5102;MEMORIZED;MEMORIZED;; +5200;System;System;; +5201;Digimon;Digimon;; +5202;Battle;Battle;; +5203;Orders count;Orders count;; +5204;Raised;Raised;; +5205;Training;Training;; +5206;Facilities;Facilities;; +5207;Fishing count;Fishing count;; +5208;DoReMiFa Mansion;DoReMiFa Mansion;; +5209;Mt. Infinity;Mt. Infinity;; +5210;Colosseum;Colosseum;; +5211;StreetPass Play;StreetPass Play;; +5300;Travel Distance;Travel Distance;; +5301;Digivice Opened;Digivice Opened;; +5302;Save Count;Save Count;; +5303;Medals Completion Rate;Medals Completion Rate;; +5304;Digivolution Completion Rate;Evolution Completion Rate;; +5305;Card List Completion Rate;Card List Completion Rate;; +5306;Total Bits gained so far;Total Bits gained so far;; +5307;Total Bits gained in battle;Total Bits gained in battle;; +5308;Total Bits gained from the sale of items;Total Bits gained from the sale of items;; +5309;Total Bit gained from the sale of cards;Total Bit gained from the sale of cards;; +5310;Game Cleared;Game Cleared;; +5400;Yellow DigiEgg Count;Yellow DigiEgg Count;; +5401;Blue DigiEgg Count;Blue DigiEgg Count;; +5402;Red DigiEgg Count;Red DigiEgg Count;; +5403;Green DigiEgg Count;Green DigiEgg Count;; +5404;Purple DigiEgg Count;Purple DigiEgg Count;; +5405;Pink DigiEgg Count;Pink DigiEgg Count;; +5406;Gray DigiEgg Count;Gray DigiEgg Count;; +5407;Most digivolved Rookie;Most evolved Child;; +5408;Most digivolved Champion;Most evolved Adult;; +5409;Most digivolved Ultimate;Most evolved Perfect;; +5410;Most digivolved Mega;Most evolved Ultimate;; +5411;Times you've become Sukamon;Times you've become Sukamon;; +5500;Battle Count;Battle Count;; +5501;Battles Won;Battles Won;; +5502;No Damage Victories;No Damage Victories;; +5503;Battles Escaped;Battles Escaped;; +5504;Times Special Move used;Times Special Move used;; +5505;Number of successful power-ups;Number of successful power-ups;; +5506;Number of successful defense ups;Number of successful defense ups;; +5507;Number of successful assists;Number of successful assists;; +5508;Number of summoned Digimon;Number of summoned Digimon;; +5509;Number of Crown Digimon defeated;Number of Crown Digimon defeated;; +5510;Maximum Damage;Maximum Damage;; +5600;Most common used commands;Most common used commands;; +5601;Your Call;Your Call;; +5602;Full Power;Full Power;; +5603;Moderate;Moderate;; +5604;Distance;Distance;; +5605;Hold;Hold;; +5606;Run;Run;; +5607;Move;Move;; +5608;Target;Target;; +5609;Fire Skills;Fire Skills;; +5610;Ice Skills;Ice Skills;; +5611;Air Skills;Air Skills;; +5612;Nature Skills;Nature Skills;; +5613;Combat Skills;Combat Skills;; +5614;Light and Dark Skills;Light and Dark Skills;; +5615;Machine Skills;Machine Skills;; +5616;Filth Skills;Filth Skills;; +5700;Times Fed;Times Fed;; +5701;Times Praised;Times Praised;; +5702;Times Scolded;Times Scolded;; +5703;Times put to sleep;Times put to sleep;; +5704;Times toilets were used;Times toilets were used;; +5705;Times pooped on the floor;Times pooped on the floor;; +5706;Injured Count;Injured Count;; +5707;Sickness Count;Sickness Count;; +5708;Number of Digivolutions;Number of Evolutions;; +5709;Partner Reborn Count;Partner Reborn Count;; +5800;Training Count;Training Count;; +5801;Gym Training Count;Gym Training Count;; +5802;Colosseum Visits;Colosseum Visits;; +5803;Times you left the city;Times you left the city;; +5804;Log Splitting - Beginner;Log Splitting - Beginner;; +5805;Log Splitting - Intermediate;Log Splitting - Intermediate;; +5806;Log Smashing - Advanced;Log Smashing - Advanced;; +5807;Giant Roulette - Beginner;Giant Roulette - Beginner;; +5808;Giant Roulette - Intermediate;Giant Roulette - Intermediate;; +5809;Giant Roulette - Advanced;Giant Roulette - Advanced;; +5810;Punch Blocking - Beginner;Punch Blocking - Beginner;; +5811;Punch Blocking - Intermediate;Punch Blocking - Intermediate;; +5812;Punch Blocking - Advanced;Punch Blocking - Advanced;; +5813;Bomb Evasion - Beginner;Bomb Evasion - Beginner;; +5814;Bomb Evasion - Intermediate;Bomb Evasion - Intermediate;; +5815;Bomb Evasion - Advanced;Bomb Evasion - Advanced;; +5816;3D Ghost Leg - Beginner;3D Ghost Leg - Beginner;; +5817;3D Ghost Leg - Intermediate;3D Ghost Leg - Intermediate;; +5818;3D Ghost Leg - Advanced;3D Ghost Leg - Advanced;; +5819;Dice Matching - Beginner;Dice Matching - Beginner;; +5820;Dice Matching - Intermediate;Dice Matching - Intermediate;; +5821;Dice Matching - Advanced;Dice Matching - Advanced;; +5900;Rest at Jijimon's House;Rest at Jijimon's House;; +5901;Obtain Meat from the Meat Field;Obtain Meat from the Meat Field;; +5902;Trade in Meat futures market;Trade in Meat futures market;; +5903;Rest at the Angel Clinic;Rest at the Angel Clinic;; +5904;Eat at the Restaurant.;Eat at the Restaurant.;; +5905;Use Birdra Transport;Use Birdra Transport;; +5906;Buy a 3 card pack at the card store;Buy a 3 card pack at the card store;; +5907;Buy a 10 card pack at the card store;Buy a 10 card pack at the card store;; +5908;Used the Treasure Hunter Airdramon;Used the Treasure Hunter Airdramon;; +5909;Used the Treasure Hunter Garudamon;Used the Treasure Hunter Garudamon;; +5910;Used Fortune-telling;Used Fortune-telling;; +5911;Used a recovery;Used a recovery;; +6000;Times fished;Times fished;; +6001;Number of times of catching a big fish;Number of times of catching a big fish;; +6002;Used bait.;Used bait.;; +6003;Lost bait.;Lost bait.;; +6004;Used lure.;Used lure.;; +6005;Lost lure.;Lost lure.;; +6006;Fished long boots.;Fished long boots.;; +6007;Caught with worn fishing rod.;Caught with worn fishing rod.;; +6008;Caught with ordinary fishing rod.;Caught with ordinary fishing rod.;; +6009;Caught with amazing fishing rod.;Caught with amazing fishing rod.;; +6100;Salary received to date;Salary received to date;; +6101;Times you have received a paycheck;Times you have received a paycheck;; +6102;Listened to Resident's Requests;Listened to Resident's Requests;; +6103;Room 101;Room 101;; +6104;Room 201;Room 201;; +6105;Room 202;Room 202;; +6106;Room 301;Room 301;; +6107;Room 302;Room 302;; +6108;Using Nanimon's toilet;Using Nanimon's toilet;; +6109;Count of garbage given to Garbagemon.;Count of garbage given to Garbagemon.;; +6200;Total mileage on Mt. Infinity;Total mileage on Mt. Infinity;; +6201;Time spent inside Mt. Infinity;Time spent inside Mt. Infinity;; +6202;Steps Count;Steps Count;; +6203;Obtained MB;Obtained MB;; +6204;Number of attempts;Number of attempts;; +6205;Times returned to the lobby;Times returned to the lobby;; +6206;Times using Infinity Pilot;Times using Infinity Pilot;; +6207;Times you have become huge;Times you have become huge;; +6208;Times you reached 100F;Times you reached 100F;; +6209;Fastest game clear time;Fastest game clear time;; +6300;Free Battles Won;Free Battles Won;; +6301;Tournaments Won;Tournaments Won;; +6302;1F Wins;1F Wins;; +6303;10F Wins;10F Wins;; +6304;20F Wins;20F Wins;; +6305;30F Wins;30F Wins;; +6306;40F Wins;40F Wins;; +6307;Times you've beaten Niko;Times you've beaten Niko;; +6400;Local Matches Count;Local Matches Count;; +6401;Local Co-op Count;Local Co-op Count;; +6402;DigiMemory Transfer Count;DigiMemory Transfer Count;; +6403;Number of cards transfered;Number of cards transfered;; +6404;StreetPass Battles;StreetPass Battles;; +6405;Network Connection Count;Network Connection Count;; +6406;Highest Ranking Points;Highest Ranking Points;; +6407;Ranking Battle Won;Ranking Battle Won;; +6408;Fights with friends;Fights with friends;; +6500;Player Records;Player Records;; +6510;Travel Distance;Travel Distance;; +6511;Battle Count;Battle Count;; +6512;Save Count;Save Count;; +6513;Training Count;Training Count;; +6514;Fishing Count;Fishing Count;; +6515;Partner Reincarnations;Partner Reincarnations;; +6516;Digivolutions Completed;Evolutions Completed;; +6517;Card List Completed;Card List Completed;; +6518;Crown Digimon Defeated;Crown Digimon Defeated;; +6519;Game Cleared;Game Cleared;; +7000;Digi-Trade;Digi-Trade;; +7001;TRADE ITEM;TRADE ITEM;; +7002;TRADING;TRADING;; +7003;Trade Amount;Trade Amount;; +7010;Trades;Trades;; +7011;Max. Trades;Max. Trades;; +7100;EXIT;EXIT;; +7101;TOILET;TOILET;; +7102;VENDING;VENDING;; +7103;FISHING;FISHING;; +7104;FACILITY;FACILITY;; +7105;EVENT;EVENT;; +7106;TRAINING;TRAINING;; +7107;MEMORIAL\n STELA;MEMORIAL\n STELA;; +7200;Please wait.;Please wait.;; +7209;Registering Digimon World Re:Digitize Decode for StreetPass on your Nintendo 3DS. After registering, you will be able to exchange Player information and Partner Digimon data when you cross paths with other users who have registered this software in StreetPass. You can register up to 3 Partners for exchange, and you can share your save data with them.;Registering Digimon World Re:Digitize Decode for StreetPass on your Nintendo 3DS. After registering, you will be able to exchange Player information and Partner Digimon data when you cross paths with other users who have registered this software in StreetPass. You can register up to 3 Partners for exchange, and you can share your save data with them.;; +7210;Would you like to register for StreetPass?;Would you like to register for StreetPass?;; +7211;Yes;Yes;; +7212;No;No;; +7215;You have registered Digimon World Re:Digitize Decode for StreetPass. Even if you quit the game, StreetPass will continue to function. To quit StreetPass, select System Settings from the HOME menu, then go to Data Management and StreetPass Management and select Quit StreetPass.;You have registered Digimon World Re:Digitize Decode for StreetPass. Even if you quit the game, StreetPass will continue to function. To quit StreetPass, select System Settings from the HOME menu, then go to Data Management and StreetPass Management and select Quit StreetPass.;; +7216;It's not possible to register this for StreetPass on the Nintendo 3DS. To register StreetPass for this software, go to the HOME menu, select StreetPass Settings, go to Data Management, then select StreetPass Management and cancel the StreetPass settings for other software.;It's not possible to register this for StreetPass on the Nintendo 3DS. To register StreetPass for this software, go to the HOME menu, select StreetPass Settings, go to Data Management, then select StreetPass Management and cancel the StreetPass settings for other software.;; +7220;Cross-Storage;Cross-Storage;; +7225;Do you want to delete this Digimon?;Do you want to delete this Digimon?;; +7226;Yes;Yes;; +7227;No;No;; +7230;Do you want to register this Digimon?;Do you want to register this Digimon?;; +7231;Yes;Yes;; +7232;No;No;; +7240;Registration was successful.;Registration was successful.;; +7241;Successfully deleted.;Successfully deleted.;; +7242;In order to use StreetPass, you must agree to the latest Terms of Service. From the HOME menu, go to System Settings, Internet Settings, Other Information, and Review Terms of Use. Please accept the latest Terms of Use.;In order to use StreetPass, you must agree to the latest Terms of Service. From the HOME menu, go to System Settings, Internet Settings, Other Information, and Review Terms of Use. Please accept the latest Terms of Use.;; +7243;StreetPass is currently not available due to parental restrictions.;StreetPass is currently not available due to parental restrictions.;; +7250;No communication Partner has been set, are you sure?;No communication Partner has been set, are you sure?;; +7251;Yes;Yes;; +7252;No;No;; +7260;The transmission of StreetPass Partner data will be stopped. To quit StreetPass, go to the HOME menu, select Settings, then go to Data Management, then StreetPass Management and select Quit StreetPass. To register a communication partner again, go to Digi-Storage and select Register a communication Partner to set up your settings.;The transmission of StreetPass Partner data will be stopped. To quit StreetPass, go to the HOME menu, select Settings, then go to Data Management, then StreetPass Management and select Quit StreetPass. To register a communication partner again, go to Digi-Storage and select Register a communication Partner to set up your settings.;; +7300;SAVE;SAVE;; +7301;DELETE;DELETE;; +7302;TYPE;TYPE;; +7303;FORM;FORM;; +7304;COLOR;COLOR;; +7400;TARGET;TARGET;; +7401;Quit;Quit;; +7500;Amateur;Amateur;; +7501;Novice;Novice;; +7502;Beginner;Beginner;; +7503;Rookie;Rookie;; +7504;Intermediate;Intermediate;; +7505;Advanced;Advanced;; +7506;Breaker;Breaker;; +7507;Guardian;Guardian;; +7508;Scalar Operator;Scalar Operator;; +7509;Wizard;Wizard;; +7510;Specialist;Specialist;; +7511;Booster;Booster;; +7512;Resistor;Resistor;; +7513;Accelerator;Accelerator;; +7514;Genius;Genius;; +7515;BM Master;BM Master;; +7516;Protector;Protector;; +7517;Cyclic Theorist;Cyclic Theorist;; +7518;Savant;Savant;; +7519;Ascended;Ascended;; +7520;D-Force Member;D-Force Member;; +7521;Neumann Theorist;Neumann Theorist;; +7522;Paradigm Shifter;Paradigm Shifter;; +7523;Tempest Phreak;Tempest Phreak;; +7524;Cosmic Scientist;Cosmic Scientist;; +7525;Chaos-theory Researcher;Chaos-theory Researcher;; +7526;Altair Astrounaut;Altair Astrounaut;; +7527;Limit Breaker;Limit Breaker;; +7528;Infinity Master;Infinity Master;; +7529;Decoder;Decoder;; +7530;∞ Decoder;∞ Decoder;; +7600;World Map;World Map;; +7601;D-File;D-File;; +7610;Displays the entire map of File Island.;Displays the entire map of File Island.;; +7611;Check out the information on the Digimon that were found in each area.;Check out the information on the Digimon that were found in each area.;; +7700;Digivolutions;Evolutions;; +7701;History;History;; +7710;Look at the Digimon your Partner digivolved into during your Adventures.;Look at the Digimon your Partner evolved into during your Adventures.;; +7711;Check out the Digivolution history of your current Partner Digimon.;Check out the Evolution history of your current Partner Digimon.;; +7800;Parrot Carrier;Parrot Carrier;; +7810;Train Garage;Train Garage;; +7811;Cherry's Observatory;Cherry's Observatory;; +7812;Big Cauldron Hall;Big Cauldron Hall;; +7813;Drill Tunnel;Drill Tunnel;; +7814;Frozen Sea Tanker;Frozen Sea Tanker;; +7820;A square southwest of the Railroad Plains, filled with old trains.;A square southwest of the Railroad Plains, filled with old trains.;; +7821;A huge mushroom left behind by Cherrymon at the Ancient Bone Swamp. You can climb it all the way to the top.;A huge mushroom left behind by Cherrymon at the Ancient Bone Swamp. You can climb it all the way to the top.;; +7822;Wizardmon's residence at the Sewer Maze. He is said to conduct dubious experiments there.;Wizardmon's residence at the Sewer Maze. He is said to conduct dubious experiments there.;; +7823;A long tunnel dug by Drimogemon. Connects the Night Canyon, Fluorescent Cave, and Sewer Maze.;A long tunnel dug by Drimogemon. Connects the Night Canyon, Fluorescent Cave, and Sewer Maze.;; +7824;A huge tanker washed ashore near the east-center of the Powdery Cliff.;A huge tanker washed ashore near the east-center of the Powdery Cliff.;; +7830;, right?;, right?;; +7831;Yes;Yes;; +7832;No;No;; From 9bf3654f97eb9071c60b0d4749c608f8d938569a Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Tue, 14 May 2024 23:24:21 +0200 Subject: [PATCH 04/54] more logical space/camelCase handling --- .../randomizer/settings/NamingSettings.java | 77 ++++++++++++++----- .../{camelCase => }/AccessoryNames.csv | 0 .../{camelCase => }/CardNames1.csv | 0 .../{camelCase => }/CardNames2.csv | 0 .../{camelCase => }/CardSetNames.csv | 0 .../{camelCase => }/CharacterNames.csv | 0 .../{camelCase => }/DigimonNames.csv | 2 +- .../{camelCase => }/FinisherNames.csv | 0 .../{camelCase => }/GlossaryNames.csv | 0 .../{camelCase => }/ItemNames.csv | 0 .../{camelCase => }/KeyItemNames.csv | 0 .../{camelCase => }/MedalNames.csv | 0 .../{camelCase => }/NatureNames.csv | 0 .../{camelCase => }/SkillNames.csv | 0 .../{camelCase => }/keep-15.csv | 0 15 files changed, 58 insertions(+), 21 deletions(-) rename src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/{camelCase => }/AccessoryNames.csv (100%) rename src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/{camelCase => }/CardNames1.csv (100%) rename src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/{camelCase => }/CardNames2.csv (100%) rename src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/{camelCase => }/CardSetNames.csv (100%) rename src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/{camelCase => }/CharacterNames.csv (100%) rename src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/{camelCase => }/DigimonNames.csv (99%) rename src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/{camelCase => }/FinisherNames.csv (100%) rename src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/{camelCase => }/GlossaryNames.csv (100%) rename src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/{camelCase => }/ItemNames.csv (100%) rename src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/{camelCase => }/KeyItemNames.csv (100%) rename src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/{camelCase => }/MedalNames.csv (100%) rename src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/{camelCase => }/NatureNames.csv (100%) rename src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/{camelCase => }/SkillNames.csv (100%) rename src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/{camelCase => }/keep-15.csv (100%) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index fc830c5..1565004 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -6,6 +6,7 @@ import java.util.Map; import java.util.Optional; import java.util.Random; +import java.util.regex.Pattern; import java.util.stream.Collectors; import java.io.BufferedWriter; import java.nio.file.StandardCopyOption; @@ -36,6 +37,7 @@ import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.geometry.Pos; +import javafx.beans.binding.BooleanBinding; import javafx.beans.binding.When; import javafx.scene.control.Button; import javafx.scene.control.TitledPane; @@ -50,11 +52,12 @@ public class NamingSettings implements Setting { private List skippable = List.of("", "None", "Unused Item", "???", "NO DATA", "n"); private BooleanProperty renameEnabled = new SimpleBooleanProperty(); private BooleanProperty randomizeEnabled = new SimpleBooleanProperty(); - private BooleanProperty camelCase = new SimpleBooleanProperty(); + private BooleanProperty camelCase = new SimpleBooleanProperty(true); private BooleanProperty manualCsv = new SimpleBooleanProperty(); private BooleanProperty replaceAll = new SimpleBooleanProperty(); - private BooleanProperty pickle = new SimpleBooleanProperty(); - private BooleanProperty orge = new SimpleBooleanProperty(); + private BooleanProperty pickle = new SimpleBooleanProperty(false); + private BooleanProperty ogre = new SimpleBooleanProperty(false); + private BooleanProperty blackPrefix = new SimpleBooleanProperty(false); private Map propertyMap = new HashMap<>(); private Accordion mainAc; @@ -94,10 +97,34 @@ public PathPosition(String pathDescriptor) { } public Replacement(String index, String original, String replacement, String rawExcludedTerms, - String rawDisabledPaths) { + String rawDisabledPaths, String origin) { this.index = Integer.parseInt(index); this.original = original; - this.replacement = replacement; + + List digiNamePaths = List.of(11, 27, 28).stream() + .map(n -> "part0/arcv/Keep/LanguageKeep_jp.res/" + n).toList(); + + boolean digiName = digiNamePaths.contains(origin); + + if (!manualCsv.get()) { + if (ogre.get() && replacement.equals("Orgemon")) { + this.replacement = "Ogremon"; + } + if (pickle.get() && replacement.equals("Piccolomon")) { + this.replacement = "Picklemon"; + } else if (blackPrefix.get() && replacement.endsWith("mon (Black)")) { + this.replacement = "Black" + replacement.substring(0, replacement.length() - 8); + } else { + this.replacement = replacement; + } + } else { + this.replacement = replacement; + } + + if (digiName && !camelCase.get()) { + this.replacement = this.replacement.replaceAll("([a-z])([A-Z])", "$1 $2"); + } + this.matchLength = original.length(); this.excludedTerms = List.of(rawExcludedTerms.split(",")); String[] pathos = rawDisabledPaths.split(","); @@ -274,19 +301,29 @@ public TitledPane create(GlobalKeepData data, LanguageKeep language) { TitledPane randoPane = new TitledPane("Randomize names", randoBox); randoPane.setId("random"); - camelCase.set(true); pane.setCollapsible(false); File csvDir = new File("./renamingPresets/"); manualCsv.set(csvDir.exists() && csvDir.isDirectory() && csvDir.listFiles().length != 0); ToggleSwitch camel = JavaFXUtils.buildToggleSwitch("camelCase names", Optional.empty(), Optional.of(camelCase)); ToggleSwitch manCs = JavaFXUtils.buildToggleSwitch("use Manual CSV", Optional.empty(), Optional.of(manualCsv)); + ToggleSwitch orgeCheck = JavaFXUtils.buildToggleSwitch("'Ogremon' spelling", Optional.empty(), + Optional.of(ogre)); + ToggleSwitch pickleCheck = JavaFXUtils.buildToggleSwitch("'Picklemon' spelling", Optional.empty(), + Optional.of(pickle)); + ToggleSwitch blackCheck = JavaFXUtils.buildToggleSwitch("Always use 'Black' as prefix", Optional.empty(), + Optional.of(blackPrefix)); ToggleSwitch repAll = JavaFXUtils.buildToggleSwitch("Replace terms in ALL text", Optional.empty(), Optional.of(replaceAll)); + BooleanBinding manLink = new When(renameEnabled).then(manualCsv).otherwise(renameEnabled.not()); + manCs.disableProperty().bind(renameEnabled.not()); repAll.disableProperty().bind(renameEnabled.not()); - camel.disableProperty().bind(new When(renameEnabled).then(manualCsv).otherwise(renameEnabled.not())); + orgeCheck.disableProperty().bind(manLink); + blackCheck.disableProperty().bind(manLink); + pickleCheck.disableProperty().bind(manLink); + camel.disableProperty().bind(manLink); EventHandler rawExportHandler = new EventHandler() { public void handle(ActionEvent event) { @@ -325,21 +362,21 @@ public void handle(ActionEvent event) { } }; - Button camelExp = new Button("Export CSVs for CamelCase names"); - Button spaceExp = new Button("Export CSVs for spaced names"); + Button camelExp = new Button("Export CSVs for restoration preset"); Button curExp = new Button("Export CSVs for current names"); curExp.setOnAction(rawExportHandler); - camelExp.setOnAction(buildHandler("renamingPresets/camelCase/", csvDir)); - spaceExp.setOnAction(buildHandler("renamingPresets/space/", csvDir)); + camelExp.setOnAction(buildHandler("renamingPresets/", csvDir)); restoreBox.getChildren().addAll( JavaFXUtils.buildToggleSwitch("Enabled", Optional.empty(), Optional.of(renameEnabled)), manCs, camel, repAll, + blackCheck, + orgeCheck, + pickleCheck, curExp, - camelExp, - spaceExp); + camelExp); randoBox.getChildren().addAll( JavaFXUtils.buildToggleSwitch("Enabled", Optional.empty(), Optional.of(randomizeEnabled))); @@ -370,7 +407,7 @@ public PathResolver(RandomizationContext context) { this.keepMap.put("CardSetNames", "30"); } - public BTXPayload resolve(String path) { + public Tuple resolve(String path) { ArrayList frag = new ArrayList<>( List.of((keepMap.containsKey(path) ? ("keep-" + keepMap.get(path)) : path).split("-"))); int btxIndex = Integer.parseInt(frag.remove(frag.size() - 1)); @@ -380,11 +417,11 @@ public BTXPayload resolve(String path) { NormalKCAP pk = (NormalKCAP) context.getFile(finalPath).get(); if (frag.get(frag.size() - 1).equals("keep")) pk = (NormalKCAP) pk.get(0); - return (BTXPayload) pk.get(btxIndex); + return new Tuple(finalPath + "/" + btxIndex, (BTXPayload) pk.get(btxIndex)); } } - private void targetedBtxReplacement(BTXPayload btx, File f) { + private void targetedBtxReplacement(BTXPayload btx, File f, String path) { System.out.println(f.getName()); try { List lines = Files.readAllLines(f.toPath(), StandardCharsets.UTF_8); @@ -395,7 +432,7 @@ private void targetedBtxReplacement(BTXPayload btx, File f) { String[] entries = lines.get(i).split(";", -1); if (entries[1].equals(entries[2])) continue; - Replacement rep = new Replacement(entries[0], entries[1], entries[2], entries[3], entries[4]); + Replacement rep = new Replacement(entries[0], entries[1], entries[2], entries[3], entries[4], path); rep.replaceExact(btx); if (replaceAll.get() && rep.global) reps.add(rep); @@ -418,14 +455,14 @@ public void randomize(RandomizationContext context) { if (manualCsv.get() && manualCsvDir.exists()) { origin = manualCsvDir; } else { - String resourcePath = "renamingPresets/" + (camelCase.get() ? "camelCase" : "space") + "/"; + String resourcePath = "renamingPresets/"; origin = new File(DecodeRandomizer.class.getResource(resourcePath).getFile()); } List presets = List.of(origin.listFiles()); presets.stream().filter(f -> f.getName().contains("-")).forEach(p -> { String pName = p.getName(); - BTXPayload foundBtx = res.resolve(pName.substring(0, pName.length() - 4)); - targetedBtxReplacement(foundBtx, p); + Tuple foundBtx = res.resolve(pName.substring(0, pName.length() - 4)); + targetedBtxReplacement(foundBtx.getValue(), p, foundBtx.getKey()); }); if (!replaceAll.get()) diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/AccessoryNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/AccessoryNames.csv similarity index 100% rename from src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/AccessoryNames.csv rename to src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/AccessoryNames.csv diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/CardNames1.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CardNames1.csv similarity index 100% rename from src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/CardNames1.csv rename to src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CardNames1.csv diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/CardNames2.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CardNames2.csv similarity index 100% rename from src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/CardNames2.csv rename to src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CardNames2.csv diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/CardSetNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CardSetNames.csv similarity index 100% rename from src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/CardSetNames.csv rename to src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CardSetNames.csv diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/CharacterNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CharacterNames.csv similarity index 100% rename from src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/CharacterNames.csv rename to src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CharacterNames.csv diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/DigimonNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/DigimonNames.csv similarity index 99% rename from src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/DigimonNames.csv rename to src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/DigimonNames.csv index 4344323..be5f06c 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/DigimonNames.csv +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/DigimonNames.csv @@ -75,7 +75,7 @@ index;original;replace;excludeTerms;excludePaths 90;Angewomon;Angewomon;; 91;BlueMeramon;BlueMeramon;; 92;B-WereGarurumon;WereGarurumon (Black);; -95;WarGrowlmon (Orange);MegaloGrowlmon (Orange);; +95;WarGrowlmon (Orange);MegaloGrowmon (Orange);; 97;Megadramon;Megadramon;; 98;MetalGreymon;MetalGreymon;; 99;MegaKabuterimon;AtlurKabuterimon;; diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/FinisherNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/FinisherNames.csv similarity index 100% rename from src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/FinisherNames.csv rename to src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/FinisherNames.csv diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/GlossaryNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/GlossaryNames.csv similarity index 100% rename from src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/GlossaryNames.csv rename to src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/GlossaryNames.csv diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/ItemNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/ItemNames.csv similarity index 100% rename from src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/ItemNames.csv rename to src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/ItemNames.csv diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/KeyItemNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/KeyItemNames.csv similarity index 100% rename from src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/KeyItemNames.csv rename to src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/KeyItemNames.csv diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/MedalNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/MedalNames.csv similarity index 100% rename from src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/MedalNames.csv rename to src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/MedalNames.csv diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/NatureNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/NatureNames.csv similarity index 100% rename from src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/NatureNames.csv rename to src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/NatureNames.csv diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/SkillNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/SkillNames.csv similarity index 100% rename from src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/SkillNames.csv rename to src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/SkillNames.csv diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/keep-15.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/keep-15.csv similarity index 100% rename from src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/camelCase/keep-15.csv rename to src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/keep-15.csv From b9bf4941f495b28981c9f4e25eebd59e6019caff Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Wed, 15 May 2024 10:33:56 +0200 Subject: [PATCH 05/54] name changes are applied first --- .../decode/randomizer/settings/RandomizerSettings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/RandomizerSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/RandomizerSettings.java index f543027..1e42deb 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/RandomizerSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/RandomizerSettings.java @@ -34,13 +34,13 @@ public class RandomizerSettings { public void randomize(RandomizationContext context) { logSettings(context); + namingSettings.randomize(context); patchSettings.randomize(context); skillSettings.randomize(context); digimonSettings.randomize(context); evolutionSettings.randomize(context); starterSettings.randomize(context); worldSettings.randomize(context); - namingSettings.randomize(context); playerSettings.randomize(context); } From ccc70c70047a6c288760acf8ff7e86b2e12b0a0f Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Wed, 15 May 2024 11:10:31 +0200 Subject: [PATCH 06/54] optimizations --- .../randomizer/settings/NamingSettings.java | 275 ++++++++++-------- 1 file changed, 150 insertions(+), 125 deletions(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index 1565004..c3199ca 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -6,7 +6,6 @@ import java.util.Map; import java.util.Optional; import java.util.Random; -import java.util.regex.Pattern; import java.util.stream.Collectors; import java.io.BufferedWriter; import java.nio.file.StandardCopyOption; @@ -17,6 +16,9 @@ import java.lang.reflect.Method; import java.net.URL; import java.nio.charset.StandardCharsets; +import java.text.ParseException; +import java.util.NoSuchElementException; +import java.util.regex.PatternSyntaxException; import org.controlsfx.control.ToggleSwitch; @@ -49,31 +51,38 @@ public class NamingSettings implements Setting { - private List skippable = List.of("", "None", "Unused Item", "???", "NO DATA", "n"); - private BooleanProperty renameEnabled = new SimpleBooleanProperty(); - private BooleanProperty randomizeEnabled = new SimpleBooleanProperty(); - private BooleanProperty camelCase = new SimpleBooleanProperty(true); - private BooleanProperty manualCsv = new SimpleBooleanProperty(); - private BooleanProperty replaceAll = new SimpleBooleanProperty(); - private BooleanProperty pickle = new SimpleBooleanProperty(false); - private BooleanProperty ogre = new SimpleBooleanProperty(false); - private BooleanProperty blackPrefix = new SimpleBooleanProperty(false); + private final List skippable = List.of("", "None", "Unused Item", "???", "NO DATA", "n"); + private final BooleanProperty renameEnabled = new SimpleBooleanProperty(); + private final BooleanProperty randomizeEnabled = new SimpleBooleanProperty(); + private final BooleanProperty camelCase = new SimpleBooleanProperty(true); + private final BooleanProperty manualCsv = new SimpleBooleanProperty(); + private final BooleanProperty replaceAll = new SimpleBooleanProperty(); + private final BooleanProperty pickle = new SimpleBooleanProperty(false); + private final BooleanProperty ogre = new SimpleBooleanProperty(false); + private final BooleanProperty blackPrefix = new SimpleBooleanProperty(false); private Map propertyMap = new HashMap<>(); private Accordion mainAc; + /** + * Visualization of a replacement map: + *

+ * { "part0/arcv/Keep/LanguageKeep_jp.res/11:12": [ [0,4,2], [8,13,-1] ] } + */ // The tuple inside the ArrayList works like this: [0] - public Map> replacmentMap = new HashMap<>(); + public Map> replacementMap = new HashMap<>(); private class Replacement { + public String original; public String replacement; - private List excludedTerms; + private final List excludedTerms; private List disabledPaths; - private int matchLength; + private final int matchLength; private int index = -1; public boolean global = true; private class PathPosition { + public int line = 0; public int col = 0; public String path = ""; @@ -83,16 +92,17 @@ public PathPosition(String pathDescriptor) { if (pathDescriptor.equals("")) { this.valid = false; return; - } else { + } - String[] splitter = pathDescriptor.split(":", -1); - this.path = splitter[0]; - this.line = Integer.parseInt(splitter[1]); - if (splitter[2] == null) - this.col = 0; - else - this.col = Integer.parseInt(splitter[2]); + String[] splitter = pathDescriptor.split(":", -1); + this.path = splitter[0]; + this.line = Integer.parseInt(splitter[1]); + if (splitter[2] == null) { + this.col = 0; + } else { + this.col = Integer.parseInt(splitter[2]); } + } } @@ -102,7 +112,7 @@ public Replacement(String index, String original, String replacement, String raw this.original = original; List digiNamePaths = List.of(11, 27, 28).stream() - .map(n -> "part0/arcv/Keep/LanguageKeep_jp.res/" + n).toList(); + .map(n -> "part0/arcv/Keep/LanguageKeep_jp.res/" + n).collect(Collectors.toList()); boolean digiName = digiNamePaths.contains(origin); @@ -128,12 +138,12 @@ public Replacement(String index, String original, String replacement, String raw this.matchLength = original.length(); this.excludedTerms = List.of(rawExcludedTerms.split(",")); String[] pathos = rawDisabledPaths.split(","); - for (int i = 0; i < pathos.length; i++) { - String p = pathos[i]; - if (p.toLowerCase().equals("all")) + for (String p : pathos) { + if (p.toLowerCase().equals("all")) { this.global = false; - else if (!p.equals("")) + } else if (!p.equals("")) { this.disabledPaths.add(new PathPosition(rawDisabledPaths)); + } } } @@ -143,46 +153,51 @@ public void replaceExact(BTXPayload btx) { } private int realPosition(String path, int index) { - ArrayList repls = replacmentMap.get(path); - if (repls == null) + ArrayList repls = replacementMap.get(path); + if (repls == null) { return index; + } int finalOffset = 0; for (int i = 0; i < repls.size(); i++) { int[] current = repls.get(i); int start = current[0]; int offset = current[2]; - if (start > index) + if (start > index) { break; + } finalOffset += offset; } return index + finalOffset; } private boolean isOverlapping(String path, int index) { - ArrayList repls = replacmentMap.get(path); - if (repls == null) + ArrayList repls = replacementMap.get(path); + if (repls == null) { return false; + } int pos = realPosition(path, index); for (int i = 0; i < repls.size(); i++) { int[] current = repls.get(i); int start = current[0]; int end = current[1]; - if (start > pos) + if (start > pos) { break; - if (end < pos) + } + if (end < pos) { return true; + } } return false; } private void insertRepData(String path, int start, int end, int offset) { - ArrayList repls = replacmentMap.get(path); - int[] entry = new int[] { start, end, offset }; + ArrayList repls = replacementMap.get(path); + int[] entry = new int[]{start, end, offset}; if (repls == null) { ArrayList newList = new ArrayList<>(); newList.add(entry); - replacmentMap.put(path, newList); + replacementMap.put(path, newList); return; } for (int i = 0; i < entry.length; i++) { @@ -199,11 +214,13 @@ private boolean termExclusion(String text, int index) { for (int i = 0; i < excludedTerms.size(); i++) { String term = excludedTerms.get(i); int exDex = text.indexOf(term); - if (exDex == -1) + if (exDex == -1) { continue; + } int subDex = term.indexOf(original); - if (exDex + subDex == index) + if (exDex + subDex == index) { return true; + } } return false; } @@ -214,8 +231,9 @@ private boolean pathExclusion(String text, String path, int index) { int col = posData[1]; for (int i = 0; i < disabledPaths.size(); i++) { PathPosition p = disabledPaths.get(i); - if (p.path == path && p.line == line && (p.col == 0 || p.col == col)) + if (p.path.equals(path) && p.line == line && (p.col == 0 || p.col == col)) { return true; + } } return false; } @@ -226,33 +244,33 @@ private int[] getLinePos(String text, int index) { int lineNo = splitlist.size(); int linePos = index - subtext.lastIndexOf("\n"); - return new int[] { lineNo, linePos }; + return new int[]{lineNo, linePos}; } private boolean findInText(String text, String path) { int idx = text.indexOf(original); - if (idx == -1 || termExclusion(text, idx) || pathExclusion(text, path, idx) || isOverlapping(path, idx)) - return false; - return true; + return !(idx == -1 || termExclusion(text, idx) || pathExclusion(text, path, idx) || isOverlapping(path, idx)); } } private ArrayList getNameListMethods(LanguageKeep lang) { - ArrayList methodList = new ArrayList(); + ArrayList methodList = new ArrayList<>(); Method[] methods = lang.getClass().getMethods(); - for (int i = 0; i < methods.length; i++) { - String methodName = methods[i].getName(); - if (methodName.contains("Names")) + for (Method method : methods) { + String methodName = method.getName(); + if (methodName.contains("Names")) { methodList.add(methodName); + } } return methodList; } boolean clearExportDir(File dir) { try { - if (dir.exists()) + if (dir.exists()) { Files.walkFileTree(dir.toPath(), new DeleteDirectoryFileVisitor()); + } } catch (IOException exc) { exc.printStackTrace(); return false; @@ -262,24 +280,21 @@ boolean clearExportDir(File dir) { } private EventHandler buildHandler(String resourcePath, File targetDir) { - return new EventHandler<>() { - public void handle(ActionEvent e) { - e.consume(); - clearExportDir(targetDir); - URL origin = DecodeRandomizer.class.getResource(resourcePath); - if (origin == null) - return; - List fls = Utils.listFiles(new File(origin.getFile())); - fls.forEach(f -> { - try { - Files.copy(f.toPath(), new File(targetDir.toString() + "/" + f.getName()).toPath(), - StandardCopyOption.REPLACE_EXISTING); - } catch (IOException exc) { - exc.printStackTrace(); - return; - } - }); + return (ActionEvent e) -> { + e.consume(); + clearExportDir(targetDir); + URL origin = DecodeRandomizer.class.getResource(resourcePath); + if (origin == null) { + return; } + List fls = Utils.listFiles(new File(origin.getFile())); + fls.forEach(f -> { + try { + Files.copy(f.toPath(), new File(targetDir.toString() + "/" + f.getName()).toPath(), StandardCopyOption.REPLACE_EXISTING); + } catch (IOException exc) { + exc.printStackTrace(); + } + }); }; } @@ -307,14 +322,10 @@ public TitledPane create(GlobalKeepData data, LanguageKeep language) { ToggleSwitch camel = JavaFXUtils.buildToggleSwitch("camelCase names", Optional.empty(), Optional.of(camelCase)); ToggleSwitch manCs = JavaFXUtils.buildToggleSwitch("use Manual CSV", Optional.empty(), Optional.of(manualCsv)); - ToggleSwitch orgeCheck = JavaFXUtils.buildToggleSwitch("'Ogremon' spelling", Optional.empty(), - Optional.of(ogre)); - ToggleSwitch pickleCheck = JavaFXUtils.buildToggleSwitch("'Picklemon' spelling", Optional.empty(), - Optional.of(pickle)); - ToggleSwitch blackCheck = JavaFXUtils.buildToggleSwitch("Always use 'Black' as prefix", Optional.empty(), - Optional.of(blackPrefix)); - ToggleSwitch repAll = JavaFXUtils.buildToggleSwitch("Replace terms in ALL text", Optional.empty(), - Optional.of(replaceAll)); + ToggleSwitch orgeCheck = JavaFXUtils.buildToggleSwitch("'Ogremon' spelling", Optional.empty(), Optional.of(ogre)); + ToggleSwitch pickleCheck = JavaFXUtils.buildToggleSwitch("'Picklemon' spelling", Optional.empty(), Optional.of(pickle)); + ToggleSwitch blackCheck = JavaFXUtils.buildToggleSwitch("Always use 'Black' as prefix", Optional.empty(), Optional.of(blackPrefix)); + ToggleSwitch repAll = JavaFXUtils.buildToggleSwitch("Replace terms in ALL text", Optional.empty(), Optional.of(replaceAll)); BooleanBinding manLink = new When(renameEnabled).then(manualCsv).otherwise(renameEnabled.not()); @@ -325,41 +336,38 @@ public TitledPane create(GlobalKeepData data, LanguageKeep language) { pickleCheck.disableProperty().bind(manLink); camel.disableProperty().bind(manLink); - EventHandler rawExportHandler = new EventHandler() { - public void handle(ActionEvent event) { - event.consume(); - ArrayList methodList = getNameListMethods(language); - - System.out.println(methodList); - clearExportDir(csvDir); - methodList.forEach(s -> { - ArrayList> myList = new ArrayList<>(); - try { - BTXPayload btx = (BTXPayload) language.getClass().getMethod(s).invoke(language); - btx.getEntries().stream() - .forEach(e -> myList - .add(new Tuple(e.getKey(), e.getValue().getString()))); - } catch (Exception e) { - e.printStackTrace(); - } - - File destFile = new File("./renamingPresets/" + s.substring(3) + ".csv"); - try (BufferedWriter writer = new BufferedWriter(new FileWriter(destFile, StandardCharsets.UTF_8))) { - - writer.write("index;original;replace;excludeTerms;excludePaths\n"); - String string = myList.stream() - .filter(str -> !skippable.contains(str.getValue())) - .map(str -> str.getKey().toString() + ';' + str.getValue() + ";" + str.getValue()) - .collect(Collectors.joining(";;\n")) - + ";;"; - - writer.write(string); - } catch (IOException e) { - e.printStackTrace(); - return; - } - }); - } + EventHandler rawExportHandler = (ActionEvent event) -> { + event.consume(); + ArrayList methodList = getNameListMethods(language); + + System.out.println(methodList); + clearExportDir(csvDir); + methodList.forEach(s -> { + ArrayList> myList = new ArrayList<>(); + try { + BTXPayload btx = (BTXPayload) language.getClass().getMethod(s).invoke(language); + btx.getEntries().stream() + .forEach(e -> myList + .add(new Tuple(e.getKey(), e.getValue().getString()))); + } catch (Exception e) { + e.printStackTrace(); + } + + File destFile = new File("./renamingPresets/" + s.substring(3) + ".csv"); + try (BufferedWriter writer = new BufferedWriter(new FileWriter(destFile, StandardCharsets.UTF_8))) { + + writer.write("index;original;replace;excludeTerms;excludePaths\n"); + String string = myList.stream() + .filter(str -> !skippable.contains(str.getValue())) + .map(str -> str.getKey().toString() + ';' + str.getValue() + ";" + str.getValue()) + .collect(Collectors.joining(";;\n")) + + ";;"; + + writer.write(string); + } catch (IOException e) { + e.printStackTrace(); + } + }); }; Button camelExp = new Button("Export CSVs for restoration preset"); @@ -385,9 +393,10 @@ public void handle(ActionEvent event) { } private class PathResolver { - private RandomizationContext context; - public Map shortcuts = new HashMap<>(); - public Map keepMap = new HashMap<>(); + + private final RandomizationContext context; + private final Map shortcuts = new HashMap<>(); + public final Map keepMap = new HashMap<>(); public PathResolver(RandomizationContext context) { this.context = context; @@ -398,6 +407,7 @@ public PathResolver(RandomizationContext context) { this.keepMap.put("KeyItemNames", "3"); this.keepMap.put("AccessoryNames", "5"); this.keepMap.put("SkillNames", "7"); + this.keepMap.put("FinisherNames", "9"); this.keepMap.put("CharacterNames", "13"); this.keepMap.put("NatureNames", "16"); this.keepMap.put("MedalNames", "17"); @@ -407,17 +417,22 @@ public PathResolver(RandomizationContext context) { this.keepMap.put("CardSetNames", "30"); } - public Tuple resolve(String path) { + public Tuple resolve(String path) throws ParseException { ArrayList frag = new ArrayList<>( List.of((keepMap.containsKey(path) ? ("keep-" + keepMap.get(path)) : path).split("-"))); int btxIndex = Integer.parseInt(frag.remove(frag.size() - 1)); String finalPath = "part0/arcv/" + frag.stream() .map(s -> shortcuts.containsKey(s) ? shortcuts.get(s) : s) .collect(Collectors.joining("/")); - NormalKCAP pk = (NormalKCAP) context.getFile(finalPath).get(); - if (frag.get(frag.size() - 1).equals("keep")) - pk = (NormalKCAP) pk.get(0); - return new Tuple(finalPath + "/" + btxIndex, (BTXPayload) pk.get(btxIndex)); + try { + NormalKCAP pk = (NormalKCAP) context.getFile(finalPath).get(); + if (frag.get(frag.size() - 1).equals("keep")) { + pk = (NormalKCAP) pk.get(0); + } + return new Tuple<>(finalPath + "/" + btxIndex, (BTXPayload) pk.get(btxIndex)); + } catch (NoSuchElementException exc) { + throw new ParseException("csv not correctly mapped", 0); + } } } @@ -427,15 +442,18 @@ private void targetedBtxReplacement(BTXPayload btx, File f, String path) { List lines = Files.readAllLines(f.toPath(), StandardCharsets.UTF_8); ArrayList reps = new ArrayList<>(); for (int i = 0; i < lines.size(); i++) { - if (i == 0) + if (i == 0) { continue; + } String[] entries = lines.get(i).split(";", -1); - if (entries[1].equals(entries[2])) + if (entries[1].equals(entries[2])) { continue; + } Replacement rep = new Replacement(entries[0], entries[1], entries[2], entries[3], entries[4], path); rep.replaceExact(btx); - if (replaceAll.get() && rep.global) + if (replaceAll.get() && rep.global) { reps.add(rep); + } } } catch (Exception e) { e.printStackTrace(); @@ -445,8 +463,9 @@ private void targetedBtxReplacement(BTXPayload btx, File f, String path) { @Override public void randomize(RandomizationContext context) { String mode = mainAc.getExpandedPane().getId(); - if (!(mode.equals("restore") ? renameEnabled.get() : randomizeEnabled.get())) + if (!(mode.equals("restore") ? renameEnabled.get() : randomizeEnabled.get())) { return; + } PathResolver res = new PathResolver(context); if (mode.equals("restore")) { @@ -459,14 +478,19 @@ public void randomize(RandomizationContext context) { origin = new File(DecodeRandomizer.class.getResource(resourcePath).getFile()); } List presets = List.of(origin.listFiles()); - presets.stream().filter(f -> f.getName().contains("-")).forEach(p -> { + presets.stream().forEach(p -> { String pName = p.getName(); - Tuple foundBtx = res.resolve(pName.substring(0, pName.length() - 4)); - targetedBtxReplacement(foundBtx.getValue(), p, foundBtx.getKey()); + try { + Tuple foundBtx = res.resolve(pName.substring(0, pName.length() - 4)); + targetedBtxReplacement(foundBtx.getValue(), p, foundBtx.getKey()); + } catch (ParseException e) { + e.printStackTrace(); + } }); - if (!replaceAll.get()) + if (!replaceAll.get()) { return; + } return; } @@ -484,8 +508,9 @@ public Map serialize() { @Override public void load(YamlMapping map) { - if (map == null) + if (map == null) { return; + } YamlSequence list = map.yamlSequence("checked"); List activeList = list == null ? new ArrayList<>() From ebb25e2538f7d05ce195b2780267174253111221 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Wed, 15 May 2024 12:43:50 +0200 Subject: [PATCH 07/54] documentation of path + replacement --- .../randomizer/settings/NamingSettings.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index c3199ca..6736b48 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -65,8 +65,22 @@ public class NamingSettings implements Setting { private Accordion mainAc; /** * Visualization of a replacement map: - *

+ * * { "part0/arcv/Keep/LanguageKeep_jp.res/11:12": [ [0,4,2], [8,13,-1] ] } + * + * Path schema works like this: + * + * [string path to the actual file]/[index of BTX file]:[BTX line] + * + * Replacement info pattern: + * + * [match start, match end, offset of result] + * + * Replacements are saved to prevent replacing terms that have already been + * processed by a prior replacement. The offsets are used to map a position + * of a match to its position in the unmodified line, making it possible to + * exclude replacing matches at specific indices in a line based on the + * original file. */ // The tuple inside the ArrayList works like this: [0] public Map> replacementMap = new HashMap<>(); From 88f39ebd65831fd784c9cbddb3d812e925213d53 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Wed, 15 May 2024 12:44:26 +0200 Subject: [PATCH 08/54] Term types --- .../randomizer/settings/NamingSettings.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index 6736b48..aa70024 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -85,6 +85,28 @@ public class NamingSettings implements Setting { // The tuple inside the ArrayList works like this: [0] public Map> replacementMap = new HashMap<>(); + protected enum TermType { + GENERAL, + DIGIMON, + DIGIMONMULTI + } + + private static TermType classifyTerm(String term, String path) { + List digiNamePaths = List.of(11, 27, 28).stream() + .map(n -> "part0/arcv/Keep/LanguageKeep_jp.res/" + n).collect(Collectors.toList()); + if (!digiNamePaths.contains(path)) { + return TermType.GENERAL; + } + return term.matches("[a-z][A-Z]") ? TermType.DIGIMONMULTI : TermType.DIGIMON; + } + + private void btxSwitch(BTXEntry btxA, BTXEntry btxB) { + String a = btxA.getString(); + String b = btxB.getString(); + btxA.setString(b); + btxB.setString(a); + } + private class Replacement { public String original; From 2b290f6227a45a7c389e901c2c05635686140f8b Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Wed, 15 May 2024 12:45:31 +0200 Subject: [PATCH 09/54] name randomizing test --- .gitignore | 3 +- .../randomizer/settings/NamingSettings.java | 53 +++++++++++++------ 2 files changed, 38 insertions(+), 18 deletions(-) diff --git a/.gitignore b/.gitignore index 56849cb..0127ba3 100644 --- a/.gitignore +++ b/.gitignore @@ -15,4 +15,5 @@ config.yml *.cci /.vscode -/renamingPresets \ No newline at end of file +/renamingPresets +dependency-reduced-pom.xml diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index aa70024..3708f45 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -82,7 +82,6 @@ public class NamingSettings implements Setting { * exclude replacing matches at specific indices in a line based on the * original file. */ - // The tuple inside the ArrayList works like this: [0] public Map> replacementMap = new HashMap<>(); protected enum TermType { @@ -142,17 +141,13 @@ public PathPosition(String pathDescriptor) { } } - public Replacement(String index, String original, String replacement, String rawExcludedTerms, - String rawDisabledPaths, String origin) { + public Replacement(String index, String original, String replacement, String rawExcludedTerms, String rawDisabledPaths, String origin) { this.index = Integer.parseInt(index); this.original = original; - List digiNamePaths = List.of(11, 27, 28).stream() - .map(n -> "part0/arcv/Keep/LanguageKeep_jp.res/" + n).collect(Collectors.toList()); + TermType tType = classifyTerm(replacement, origin); - boolean digiName = digiNamePaths.contains(origin); - - if (!manualCsv.get()) { + if (!manualCsv.get() && tType != TermType.GENERAL) { if (ogre.get() && replacement.equals("Orgemon")) { this.replacement = "Ogremon"; } @@ -167,7 +162,7 @@ public Replacement(String index, String original, String replacement, String raw this.replacement = replacement; } - if (digiName && !camelCase.get()) { + if (tType == TermType.DIGIMONMULTI && !camelCase.get()) { this.replacement = this.replacement.replaceAll("([a-z])([A-Z])", "$1 $2"); } @@ -183,9 +178,13 @@ public Replacement(String index, String original, String replacement, String raw } } - public void replaceExact(BTXPayload btx) { + public void replaceExact(BTXPayload btx, String path) { BTXEntry entry = btx.getEntryById(index).get(); - entry.setString(replacement); + if (!original.equals(replacement)) { + entry.setString(replacement); + } + // Exact replacements block any future replacements on this particular line. + insertRepData(path, -1, Integer.MAX_VALUE, 0); } private int realPosition(String path, int index) { @@ -228,15 +227,15 @@ private boolean isOverlapping(String path, int index) { } private void insertRepData(String path, int start, int end, int offset) { - ArrayList repls = replacementMap.get(path); int[] entry = new int[]{start, end, offset}; - if (repls == null) { + if (!replacementMap.containsKey(path)) { ArrayList newList = new ArrayList<>(); newList.add(entry); replacementMap.put(path, newList); return; } - for (int i = 0; i < entry.length; i++) { + ArrayList repls = replacementMap.get(path); + for (int i = 0; i < repls.size(); i++) { int current = repls.get(i)[0]; if (current > start) { repls.add(i, entry); @@ -482,11 +481,12 @@ private void targetedBtxReplacement(BTXPayload btx, File f, String path) { continue; } String[] entries = lines.get(i).split(";", -1); - if (entries[1].equals(entries[2])) { + // Even if we don't replace a term, if it's a multipart Digimon name it will be changed if the camelCase option is not set. + if (entries[1].equals(entries[2]) && (camelCase.get() || classifyTerm(entries[2], path) != TermType.DIGIMONMULTI)) { continue; } Replacement rep = new Replacement(entries[0], entries[1], entries[2], entries[3], entries[4], path); - rep.replaceExact(btx); + rep.replaceExact(btx, path); if (replaceAll.get() && rep.global) { reps.add(rep); } @@ -528,7 +528,26 @@ public void randomize(RandomizationContext context) { return; } - return; + } else { + + try { + BTXPayload btx = res.resolve("keep-11").getValue(); + + Random rand = new Random(context.getInitialSeed() * "ShuffleTerms".hashCode()); + + ArrayList ents = new ArrayList<>(btx.getEntries().stream().map(e -> e.getValue()).collect(Collectors.toList())); + + while (ents.size() > 1) { + int i = rand.nextInt(ents.size()); + BTXEntry btxA = ents.remove(i); + int n = rand.nextInt(ents.size()); + BTXEntry btxB = ents.remove(n); + System.out.println(i + " " + n); + btxSwitch(btxA, btxB); + } + } catch (ParseException e) { + } + } } From 86e9d405011c0a0efad54cfcda2fd080222d8484 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Wed, 15 May 2024 13:25:29 +0200 Subject: [PATCH 10/54] more randomization --- .../randomizer/settings/NamingSettings.java | 46 +++++++++++-------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index 3708f45..e768d21 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -18,7 +18,6 @@ import java.nio.charset.StandardCharsets; import java.text.ParseException; import java.util.NoSuchElementException; -import java.util.regex.PatternSyntaxException; import org.controlsfx.control.ToggleSwitch; @@ -60,7 +59,9 @@ public class NamingSettings implements Setting { private final BooleanProperty pickle = new SimpleBooleanProperty(false); private final BooleanProperty ogre = new SimpleBooleanProperty(false); private final BooleanProperty blackPrefix = new SimpleBooleanProperty(false); - private Map propertyMap = new HashMap<>(); + private final Map propertyMap = new HashMap<>(); + private final Map randoMap = new HashMap<>(); + private final List randoTypes = List.of("Digimon Names", "Finisher Names", "Skill Names", "Character Names", "Item Names", "Medal Names"); private Accordion mainAc; /** @@ -423,6 +424,13 @@ public TitledPane create(GlobalKeepData data, LanguageKeep language) { randoBox.getChildren().addAll( JavaFXUtils.buildToggleSwitch("Enabled", Optional.empty(), Optional.of(randomizeEnabled))); + for (String r : randoTypes) { + randoMap.put(r, new SimpleBooleanProperty(false)); + ToggleSwitch swit = JavaFXUtils.buildToggleSwitch(r, Optional.empty(), Optional.of(randoMap.get(r))); + swit.disableProperty().bind(randomizeEnabled.not()); + randoBox.getChildren().add(swit); + } + mainAc.getPanes().addAll(restorePane, randoPane); return pane; } @@ -530,26 +538,24 @@ public void randomize(RandomizationContext context) { } else { - try { - BTXPayload btx = res.resolve("keep-11").getValue(); - - Random rand = new Random(context.getInitialSeed() * "ShuffleTerms".hashCode()); - - ArrayList ents = new ArrayList<>(btx.getEntries().stream().map(e -> e.getValue()).collect(Collectors.toList())); - - while (ents.size() > 1) { - int i = rand.nextInt(ents.size()); - BTXEntry btxA = ents.remove(i); - int n = rand.nextInt(ents.size()); - BTXEntry btxB = ents.remove(n); - System.out.println(i + " " + n); - btxSwitch(btxA, btxB); + randoTypes.stream().filter(k -> randoMap.get(k).get()).map(s -> s.replaceAll(" ", "")).forEach(name -> { + try { + BTXPayload btx = res.resolve(name).getValue(); + Random rand = new Random(context.getInitialSeed() * "ShuffleTerms".hashCode()); + + ArrayList ents = new ArrayList<>(btx.getEntries().stream().map(e -> e.getValue()).collect(Collectors.toList())); + + while (ents.size() > 1) { + int i = rand.nextInt(ents.size()); + BTXEntry btxA = ents.remove(i); + int n = rand.nextInt(ents.size()); + BTXEntry btxB = ents.remove(n); + btxSwitch(btxA, btxB); + } + } catch (ParseException e) { } - } catch (ParseException e) { - } - + }); } - } @Override From afd9546bd180b7c627877ea7160eb4fbe743a629 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Wed, 15 May 2024 14:52:25 +0200 Subject: [PATCH 11/54] excluding empty/filler fields from btx randomizer --- .../randomizer/settings/NamingSettings.java | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index e768d21..3f65ef8 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -537,21 +537,28 @@ public void randomize(RandomizationContext context) { } } else { - + Random rand = new Random(context.getInitialSeed() * "ShuffleTerms".hashCode()); randoTypes.stream().filter(k -> randoMap.get(k).get()).map(s -> s.replaceAll(" ", "")).forEach(name -> { try { - BTXPayload btx = res.resolve(name).getValue(); - Random rand = new Random(context.getInitialSeed() * "ShuffleTerms".hashCode()); - - ArrayList ents = new ArrayList<>(btx.getEntries().stream().map(e -> e.getValue()).collect(Collectors.toList())); - - while (ents.size() > 1) { - int i = rand.nextInt(ents.size()); - BTXEntry btxA = ents.remove(i); - int n = rand.nextInt(ents.size()); - BTXEntry btxB = ents.remove(n); + //creating a list of all btx entries in the payload without empty/filler fields + ArrayList entries = new ArrayList<>(res.resolve(name).getValue().getEntries().stream().map(e -> e.getValue()).filter(v -> !skippable.contains(v.getString())).collect(Collectors.toList())); + + BTXEntry firstEntry = null; + //Switching the value of a random pair of BTX entries and removing them from the list. + while (entries.size() > 1) { + int i = rand.nextInt(entries.size()); + BTXEntry btxA = entries.remove(i); + if (firstEntry == null) { + firstEntry = btxA; + } + int n = rand.nextInt(entries.size()); + BTXEntry btxB = entries.remove(n); btxSwitch(btxA, btxB); } + //In case there's an uneven number of entries we switch the leftover entry with the first entry we processed previously + if (entries.size() == 1) { + btxSwitch(firstEntry, entries.get(0)); + } } catch (ParseException e) { } }); From 9b06f2868a3bea507a42a009ebba169ad07a7d97 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Wed, 15 May 2024 15:05:36 +0200 Subject: [PATCH 12/54] serializing implemented --- .../decode/randomizer/settings/NamingSettings.java | 11 +++++++++-- .../randomizer/settings/RandomizerSettings.java | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index 3f65ef8..2448116 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -568,8 +568,15 @@ public void randomize(RandomizationContext context) { @Override public Map serialize() { Map map = new HashMap<>(); - map.put("enabled", renameEnabled.get()); - map.put("checked", propertyMap.entrySet().stream().filter(a -> a.getValue().get()).map(Map.Entry::getKey) + map.put("renameEnabled", renameEnabled.get()); + map.put("randomizeEnabled", randomizeEnabled.get()); + map.put("camelCase", camelCase.get()); + map.put("manualCsv", manualCsv.get()); + map.put("replaceAll", replaceAll.get()); + map.put("pickle", pickle.get()); + map.put("ogre", ogre.get()); + map.put("blackPrefix", blackPrefix.get()); + map.put("randomChecked", randoMap.entrySet().stream().filter(a -> a.getValue().get()).map(Map.Entry::getKey) .collect(Collectors.toList())); return map; } diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/RandomizerSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/RandomizerSettings.java index 1e42deb..7588461 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/RandomizerSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/RandomizerSettings.java @@ -96,6 +96,7 @@ public Map serialize() { map.put("worldSettings", worldSettings.serialize()); map.put("patchSettings", patchSettings.serialize()); map.put("playerSettings", playerSettings.serialize()); + map.put("namingSettings", namingSettings.serialize()); return map; } From 4c8b21da61f2e07b9580ec9b62fd101be90cdd39 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Wed, 15 May 2024 19:33:45 +0200 Subject: [PATCH 13/54] static things --- .../decode/randomizer/settings/NamingSettings.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index 2448116..9f25019 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -92,6 +92,7 @@ protected enum TermType { } private static TermType classifyTerm(String term, String path) { + //These files contain digimon names List digiNamePaths = List.of(11, 27, 28).stream() .map(n -> "part0/arcv/Keep/LanguageKeep_jp.res/" + n).collect(Collectors.toList()); if (!digiNamePaths.contains(path)) { @@ -100,7 +101,7 @@ private static TermType classifyTerm(String term, String path) { return term.matches("[a-z][A-Z]") ? TermType.DIGIMONMULTI : TermType.DIGIMON; } - private void btxSwitch(BTXEntry btxA, BTXEntry btxB) { + private static void btxSwitch(BTXEntry btxA, BTXEntry btxB) { String a = btxA.getString(); String b = btxB.getString(); btxA.setString(b); @@ -302,7 +303,7 @@ private ArrayList getNameListMethods(LanguageKeep lang) { return methodList; } - boolean clearExportDir(File dir) { + private static boolean clearExportDir(File dir) { try { if (dir.exists()) { Files.walkFileTree(dir.toPath(), new DeleteDirectoryFileVisitor()); @@ -315,7 +316,7 @@ boolean clearExportDir(File dir) { return true; } - private EventHandler buildHandler(String resourcePath, File targetDir) { + private static EventHandler buildHandler(String resourcePath, File targetDir) { return (ActionEvent e) -> { e.consume(); clearExportDir(targetDir); @@ -518,8 +519,7 @@ public void randomize(RandomizationContext context) { if (manualCsv.get() && manualCsvDir.exists()) { origin = manualCsvDir; } else { - String resourcePath = "renamingPresets/"; - origin = new File(DecodeRandomizer.class.getResource(resourcePath).getFile()); + origin = new File(DecodeRandomizer.class.getResource("renamingPresets/").getFile()); } List presets = List.of(origin.listFiles()); presets.stream().forEach(p -> { From 610de6ebb105e3abb8d3f97a26b59b258c65f62e Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Wed, 15 May 2024 19:34:20 +0200 Subject: [PATCH 14/54] sub finishers --- .../renamingPresets/FinisherNames.csv | 190 +++++++++--------- 1 file changed, 95 insertions(+), 95 deletions(-) diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/FinisherNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/FinisherNames.csv index fb12eeb..9a68fdf 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/FinisherNames.csv +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/FinisherNames.csv @@ -1,97 +1,97 @@ index;original;replace;excludeTerms;excludePaths -1;Cog Crusher;Cog Crusher;; -2;Flame Bomber;Flame Bomber;; +1;Cog Crusher;Darkness Gear;; +2;Flame Bomber;Bonfire;; 3;Cheese Bomb;Cheese Bomb;; 4;Bad Message;Bad Message;; -5;Pepper Breath;Pepper Breath;; -6;Armored Arrow;Armored Arrow;; -7;Horn Blaster;Horn Blaster;; +5;Pepper Breath;Baby Flame;; +6;Armored Arrow;Pointer Arrow;; +7;Horn Blaster;Holy Shot;; 8;Rolling Upper;Rolling Upper;; -9;Seed Blast;Seed Blast;; -10;Bada Boom;Bada Boom;; -11;Fireball;Fireball;; -12;Boom Bubble;Boom Bubble;; -13;Demi Darts;Demi Darts;; -14;Blue Blaster;Blue Blaster;; +9;Seed Blast;Nuts Shoot;; +10;Bada Boom;Night of Fire;; +11;Fireball;Fire Ball;; +12;Boom Bubble;Air Shot;; +13;Demi Darts;Pico Darts;; +14;Blue Blaster;Petit Fire;; 15;Colorful Spark;Colorful Spark;; 16;Goburi Strike;Goburi Strike;; 17;Metal Cannon;Metal Cannon;; -18;Vee Headbutt;Vee Headbutt;; -19;Frozen Wind;Frozen Wind;; -20;Pepper Breath;Pepper Breath;; -21;Blue Blaster;Blue Blaster;; +18;Vee Headbutt;V-mon Head;; +19;Frozen Wind;Little Blizzard;; +20;Pepper Breath;Baby Flame;; +21;Blue Blaster;Petit Fire;; 22;Special Move 22;Special Move 22;; 23;Shiny Ring;Shiny Ring;; 24;Special Move 24;Special Move 24;; -25;Super Shocker;Super Shocker;; -26;Spiral Twister;Spiral Twister;; +25;Super Shocker;Petit Thunder;; +26;Spiral Twister;Magical Fire;; 27;Burning Fist;Burning Fist;; 28;Spinning Needle;Spinning Needle;; -29;Howling Blaster;Howling Blaster;; -30;Evil Charm;Evil Charm;; +29;Howling Blaster;Fox Fire;; +30;Evil Charm;Death Charm;; 31;Special Move 31;Special Move 31;; 32;Special Move 32;Special Move 32;; 33;Special Move 33;Special Move 33;; 34;Special Move 34;Special Move 34;; -35;Lightning Paw;Lightning Paw;; +35;Lightning Paw;Neko Punch;; 36;Special Move 36;Special Move 36;; -37;Nova Blast;Nova Blast;; +37;Nova Blast;Mega Flame;; 38;Sunshine Beam;Sunshine Beam;; 39;Spiral Blow;Spiral Blow;; -40;Nume-Sludge;Nume-Sludge;; +40;Nume-Sludge;Poop Throw;; 41;Fist of the Beast King;Fist of the Beast King;; 42;Special Move 42;Special Move 42;; -43;Pyro Blaster;Pyro Blaster;; -44;Hand of Fate;Hand of Fate;; -45;Pyro Blaster;Pyro Blaster;; -46;Lightning Paw;Lightning Paw;; -47;Touch of Evil;Touch of Evil;; -48;Pyro Blaster;Pyro Blaster;; -49;Frozen Claw;Frozen Claw;; +43;Pyro Blaster;Exhaust Flame;; +44;Hand of Fate;Heaven's Knuckle;; +45;Pyro Blaster;Exhaust Flame;; +46;Lightning Paw;Neko Punch;; +47;Touch of Evil;Death Claw;; +48;Pyro Blaster;Exhaust Flame;; +49;Frozen Claw;Frost Claw;; 50;Special Move 50;Special Move 50;; -51;Howling Blaster;Howling Blaster;; +51;Howling Blaster;Fox Fire;; 52;Chaos Fire;Chaos Fire;; 53;Hyper Smell;Hyper Smell;; 54;Special Move 54;Special Move 54;; 55;Special Move 55;Special Move 55;; -56;Electro Shocker;Electro Shocker;; +56;Electro Shocker;Mega Blaster;; 57;Meteor Wing;Meteor Wing;; -58;Party Time;Party Time;; -59;Party Time;Party Time;; -60;Nova Blast;Nova Blast;; +58;Party Time;Poop Throw;; +59;Party Time;Poop Throw;; +60;Nova Blast;Mega Flame;; 61;Special Move 61;Special Move 61;; -62;Ultimate Sacrifice;Ultimate Sacrifice;; +62;Ultimate Sacrifice;Dead or Alive;; 63;Special Move 63;Special Move 63;; -64;Hearts Attack;Hearts Attack;; +64;Hearts Attack;Lovely Attack;; 65;Rising Destroyer;Rising Destroyer;; 66;Lila Shower;Lila Shower;; 67;Winning Knuckle;Winning Knuckle;; 68;Special Move 68;Special Move 68;; 69;Special Move 69;Special Move 69;; 70;Special Move 70;Special Move 70;; -71;Grisly Wing;Grisly Wing;; -72;Spiking Strike;Spiking Strike;; -73;Gate of Destiny;Gate of Destiny;; +71;Grisly Wing;Night Raid;; +72;Spiking Strike;Spiking Finish;; +73;Gate of Destiny;Heaven's Gate;; 74;Darkness Wave;Darkness Wave;; -75;Lightning Javelin;Lightning Javelin;; +75;Lightning Javelin;Thunder Javelin;; 76;Special Move 76;Special Move 76;; 77;Atomic Blaster;Atomic Blaster;; 78;Atomic Blaster;Atomic Blaster;; -79;Wolf Claw;Wolf Claw;; -80;Celestial Arrow;Celestial Arrow;; +79;Wolf Claw;Kaiser Nail;; +80;Celestial Arrow;Holy Arrow;; 81;Ice Phantom;Ice Phantom;; -82;Wolf Claw;Wolf Claw;; +82;Wolf Claw;Kaiser Nail;; 83;Special Move 83;Special Move 83;; 84;Special Move 84;Special Move 84;; 85;Atomic Blaster;Atomic Blaster;; 86;Special Move 86;Special Move 86;; -87;Dark Side Attack;Dark Side Attack;; -88;Giga Blaster;Giga Blaster;; +87;Dark Side Attack;Genocide Attack;; +88;Giga Blaster;Giga Destroyer;; 89;Horn Buster;Horn Buster;; -90;Wing Blade;Wing Blade;; -91;Concert Crush;Concert Crush;; -92;Kahuna Waves;Kahuna Waves;; -93;Terra Force;Terra Force;; +90;Wing Blade;Shadow Wing;; +91;Concert Crush;Love Serenade;; +92;Kahuna Waves;Ocean Love;; +93;Terra Force;Gaia Force;; 94;Phantom Pain;Phantom Pain;; 95;Double Impact;Double Impact;; 96;Pandemonium Lost;Pandemonium Lost;; @@ -100,26 +100,26 @@ index;original;replace;excludeTerms;excludePaths 99;Special Move 99;Special Move 99;; 100;Dark Prominence;Dark Prominence;; 101;Dark Roar;Dark Roar;; -102;Lion Slash;Lion Slash;; +102;Lion Slash;Shishiraouzan;; 103;Thorn Whip;Thorn Whip;; -104;Excrement;Excrement;; +104;Excrement;Platinum Excrement;; 105;Special Move 105;Special Move 105;; -106;Supreme Cannon;Supreme Cannon;; +106;Supreme Cannon;Garuru Cannon;; 107;Glorious Burst;Glorious Burst;; 108;Full Moon Blaster;Full Moon Blaster;; 109;Special Move 109;Special Move 109;; 110;Poseidon Force;Poseidon Force;; -111;Lightning Joust;Lightning Joust;; -112;Metal Wolf Claw;Metal Wolf Claw;; -113;Demon's Disaster;Demon's Disaster;; -114;Terra Destroyer;Terra Destroyer;; -115;Metal Wolf Claw;Metal Wolf Claw;; +111;Lightning Joust;Royal Saber;; +112;Metal Wolf Claw;Cocytus Breath;; +113;Demon's Disaster;Demons Disaster;; +114;Terra Destroyer;Dark Gaia Force;; +115;Metal Wolf Claw;Cocytus Breath;; 116;Special Move 116;Special Move 116;; 117;Special Move 117;Special Move 117;; 118;Special Move 118;Special Move 118;; 119;Special Move 119;Special Move 119;; 120;Special Move 120;Special Move 120;; -121;Full Metal Breath;Full Metal Breath;; +121;Full Metal Breath;Full Metal Blaze;; 122;Trident Gaia;Trident Gaia;; 123;Special Move 123;Special Move 123;; 124;Special Move 124;Special Move 124;; @@ -129,26 +129,26 @@ index;original;replace;excludeTerms;excludePaths 128;Giga Blaster;Giga Blaster;; 129;Starlight Explosion;Starlight Explosion;; 130;Banana Slip;Banana Slip;; -131;Strike of the Seven Stars;Strike of the Seven Stars;; -132;Giga Blaster;Giga Blaster;; +131;Strike of the Seven Stars;Seven Heavens;; +132;Giga Blaster;Giga Destroyer;; 133;Darkness Zone;Darkness Zone;; 134;Boss Childhood Frame;Boss Childhood Frame;; 135;Garbage Collection;Garbage Collection;; 136;Reduction;Reduction;; 137;Refactoring;Refactoring;; 138;Hades Force;Hades Force;; -139;Pepper Breath;Pepper Breath;; +139;Pepper Breath;Baby Flame;; 140;Destruction Grenade;Destruction Grenade;; -141;Thunder Blast;Thunder Blast;; +141;Thunder Blast;Spiral Sword;; 142;Marching Fishes;Marching Fishes;; -143;Harpoon Torpedo;Harpoon Torpedo;; -144;Vulcan's Hammer;Vulcan's Hammer;; +143;Harpoon Torpedo;Harpoon Vulcan;; +144;Vulcan's Hammer;Hammer Spark;; 145;Arctic Blizzard;Arctic Blizzard;; -146;Ice Blast;Ice Blast;; +146;Ice Blast;Ice Arrow;; 147;Poison Ivy;Poison Ivy;; -148;Needle Spray;Needle Spray;; +148;Needle Spray;Prickly Bang Bang;; 149;Pendragon's Glory;Pendragon's Glory;; -150;Hearts Attack;Hearts Attack;; +150;Hearts Attack;Lovely Attack;; 151;Rosen Blood;Rosen Blood;; 152;Baby Burner;Baby Burner;; 153;Mega Burst;Mega Burst;; @@ -181,55 +181,55 @@ index;original;replace;excludeTerms;excludePaths 180;Heartbreak Attack;Heartbreak Attack;; 181;Shining Gold Solar Storm;Shining Gold Solar Storm;; 182;Terror's Cluster;Terror's Cluster;; -183;Pepper Breath;Pepper Breath;; -184;Infinity Cannon;Infinity Cannon;; +183;Pepper Breath;Baby Flame;; +184;Infinity Cannon;Mugen Cannon;; 185;Electric Shock;Electric Shock;; 186;Grand Cross;Grand Cross;; -187;Diamond Storm;Diamond Storm;; -188;Sticky Net;Sticky Net;; +187;Diamond Storm;Koyōsetsu;; +188;Sticky Net;Nebaneba Net;; 189;Branch Drain;Branch Drain;; 190;Tyrant Fist;Tyrant Fist;; -191;Dragon Wheel;Dragon Wheel;; +191;Dragon Wheel;Koenryū;; 192;Power Metal;Power Metal;; -193;V-Nova Blast;V-Nova Blast;; +193;V-Nova Blast;V-Breath Arrow;; 194;Chrono Breaker;Chrono Breaker;; -195;Crash Symphony;Crash Symphony;; +195;Crash Symphony;Crush Symphony;; 196;Dragon Impulse;Dragon Impulse;; -197;Double Scissor Claw;Double Scissor Claw;; +197;Double Scissor Claw;Scissor Arms Ω;; 198;Genocide Gear;Genocide Gear;; -199;Cyclone Turbine;Cyclone Turbine;; -200;Dark Shot;Dark Shot;; -201;Talisman of Light;Talisman of Light;; -202;Metal Fireball;Metal Fireball;; -203;Galactic Flare;Galactic Flare;; +199;Cyclone Turbine;Senpū Turbine Geri;; +200;Dark Shot;Ground Zero;; +201;Talisman of Light;Bonhitsusen;; +202;Metal Fireball;Heavy Metal Fire;; +203;Galactic Flare;Cosmo Flash;; 204;Desperado Blaster;Desperado Blaster;; -205;Frozen Fury;Frozen Fury;; -206;Pit Bomb;Pit Bomb;; -207;Abduction Beam;Abduction Beam;; -208;Smirk Bomb;Smirk Bomb;; -209;Metal Smirk Bomb;Metal Smirk Bomb;; -210;Mjoelnir Thunder;Mjoelnir Thunder;; +205;Frozen Fury;Hyoujūken;; +206;Pit Bomb;Bit Bomb;; +207;Abduction Beam;Abduction Kousen;; +208;Smirk Bomb;Big Smiley Bomber;; +209;Metal Smirk Bomb;Energy Bomb;; +210;Mjoelnir Thunder;Mjölnir Thunder;; 211;Master Fire;Master Fire;; -212;Ultimate Ouryuken;Ultimate Ouryuken;; -213;Ray of Victory;Ray of Victory;; -214;Ray of Victory;Ray of Victory;; -215;Giga Crusher;Giga Crusher;; +212;Ultimate Ouryuken;Kyūkyoku Senjin Ouryūken;; +213;Ray of Victory;Shining V Force;; +214;Ray of Victory;Shining V Force;; +215;Giga Crusher;Giga Death;; 216;Omega Blade;Omega Blade;; 217;Eden's Javelin;Eden's Javelin;; -218;Hyper Infinity Cannon;Hyper Infinity Cannon;; +218;Hyper Infinity Cannon;Hyper Mugen Cannon;; 219;Dimension Scissor;Dimension Scissor;; 220;Infinity Arrow;Infinity Arrow;; -221;Amethyst Mandala;Amethyst Mandala;; +221;Amethyst Mandala;Kongoukai Mandara;; 222;Atomic Ray;Atomic Ray;; 223;Trump Sword;Trump Sword;; -224;Puppet Pummel;Puppet Pummel;; +224;Puppet Pummel;Bullet Hammer;; 225;Smiley Warhead;Smiley Warhead;; 226;Double Impact;Double Impact;; 227;Tomahawk Steiner;Tomahawk Steiner;; 228;Shining Gold Solar Storm;Shining Gold Solar Storm;; 229;Metal Storm;Metal Storm;; -230;River of Power;River of Power;; +230;River of Power;Ultimate Stream;; 231;Divine Atonement;Divine Atonement;; 232;Eternal Nightmare;Eternal Nightmare;; -233;Soul Core Attack;Soul Core Attack;; +233;Soul Core Attack;Konpaku Shingeki;; 234;Special Move 999;Special Move 999;; \ No newline at end of file From d6212ab90d2608307353eac6ed54a30673e8dbaf Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Wed, 15 May 2024 22:15:45 +0200 Subject: [PATCH 15/54] ALL the card names --- .../randomizer/renamingPresets/CardNames1.csv | 388 +++++++++--------- .../randomizer/renamingPresets/CardNames2.csv | 388 +++++++++--------- 2 files changed, 388 insertions(+), 388 deletions(-) diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CardNames1.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CardNames1.csv index 926efba..ea6d020 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CardNames1.csv +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CardNames1.csv @@ -11,56 +11,56 @@ index;original;replace;excludeTerms;excludePaths 10;Gigimon;Gigimon;; 11;Agumon;Agumon;; 12;Gaomon;Gaomon;; -13;Biyomon;Biyomon;; +13;Biyomon;Piyomon;; 14;Veemon;Veemon;; 15;Hagurumon;Hagurumon;; -16;Candlemon;Candlemon;; -17;Chuumon;Chuumon;; -18;Tsukaimon;Tsukaimon;; +16;Candlemon;Candmon;; +17;Chuumon;Tyumon;; +18;Tsukaimon;Tukaimon;; 19;Kamemon;Kamemon;; 20;Kudamon;Kudamon;; 21;Lalamon;Lalamon;; 22;Impmon;Impmon;; 23;Guilmon;Guilmon;; 24;Patamon;Patamon;; -25;DemiDevimon;DemiDevimon;; +25;DemiDevimon;PicoDevimon;; 26;BlackGabumon;BlackGabumon;; 27;Psychemon;Psychemon;; 28;Goburimon;Goburimon;; -29;SnowAgumon;SnowAgumon;; +29;SnowAgumon;YukiAgumon;; 30;BlackAgumon;BlackAgumon;; 31;Gabumon;Gabumon;; 32;Solarmon;Solarmon;; 33;Tentomon;Tentomon;; 34;Gomamon;Gomamon;; 35;Palmon;Palmon;; -36;Dorumon;Dorumon;; +36;Dorumon;DORUmon;; 37;Commandramon;Commandramon;; 38;Greymon;Greymon;; 39;Gaogamon;Gaogamon;; 40;Birdramon;Birdramon;; -41;ExVeemon;ExVeemon;; +41;ExVeemon;XV-mon;; 42;Meramon;Meramon;; 43;Airdramon;Airdramon;; 44;Garurumon;Garurumon;; 45;Bakemon;Bakemon;; -46;BlackGatomon;BlackGatomon;; +46;BlackGatomon;BlackTailmon;; 47;GeoGreymon;GeoGreymon;; 48;Sunflowmon;Sunflowmon;; 49;Numemon;Numemon;; 50;Leomon;Leomon;; -51;Growlmon;Growlmon;; +51;Growlmon;Growmon;; 52;Angemon;Angemon;; -53;Growlmon (Orange);Growlmon (Orange);; -54;Gatomon;Gatomon;; +53;Growlmon (Orange);Growmon (Orange);; +54;Gatomon;Tailmon;; 55;Devimon;Devimon;; -56;BlackGrowlmon;BlackGrowlmon;; +56;BlackGrowlmon;BlackGrowmon;; 57;IceDevimon;IceDevimon;; -58;BlackGarurumon;BlackGarurumon;; +58;BlackGarurumon;Garurumon (Black);; 59;Gururumon;Gururumon;; 60;Geremon;Geremon;; 61;Kabuterimon;Kabuterimon;; -62;Sukamon;Sukamon;; +62;Sukamon;Scumon;; 63;Ikkakumon;Ikkakumon;; 64;Guardromon;Guardromon;; 65;Seadramon;Seadramon;; @@ -70,55 +70,55 @@ index;original;replace;excludeTerms;excludePaths 69;MachGaogamon;MachGaogamon;; 70;Garudamon;Garudamon;; 71;Paildramon;Paildramon;; -72;MagnaAngemon;MagnaAngemon;; +72;MagnaAngemon;HolyAngemon;; 73;LadyDevimon;LadyDevimon;; 74;Monzaemon;Monzaemon;; 75;RizeGreymon;RizeGreymon;; 76;Lilamon;Lilamon;; -77;Myotismon;Myotismon;; +77;Myotismon;Vamdemon;; 78;MegaSeadramon;MegaSeadramon;; -79;WarGrowlmon;WarGrowlmon;; -80;BlackWarGrowlmon;BlackWarGrowlmon;; +79;WarGrowlmon;MegaloGrowmon;; +80;BlackWarGrowlmon;BlackMegaloGrowmon;; 81;WereGarurumon;WereGarurumon;; 82;Angewomon;Angewomon;; 83;BlueMeramon;BlueMeramon;; -84;BlackWereGarurumon;BlackWereGarurumon;; +84;BlackWereGarurumon;WereGarurumon (Black);; 85;WarGrowlmon (Orange);WarGrowlmon (Orange);; -86;MegaKabuterimon;MegaKabuterimon;; +86;MegaKabuterimon;AtlurKabuterimon;; 87;Etemon;Etemon;; 88;Andromon;Andromon;; 89;Zudomon;Zudomon;; -90;MetalTyrannomon;MetalTyrannomon;; +90;MetalTyrannomon;MetalTyranomon;; 91;Megadramon;Megadramon;; 92;MetalGreymon (Virus);MetalGreymon (Virus);; 93;Tankdramon;Tankdramon;; 94;WarGreymon;WarGreymon;; 95;MirageGaogamon;MirageGaogamon;; -96;Phoenixmon;Phoenixmon;; +96;Phoenixmon;Hououmon;; 97;BlackWarGreymon;BlackWarGreymon;; 98;ShineGreymon;ShineGreymon;; 99;VictoryGreymon;VictoryGreymon;; -100;MarineAngemon;MarineAngemon;; +100;MarineAngemon;MarinAngemon;; 101;Rosemon;Rosemon;; 102;PlatinumNumemon;PlatinumNumemon;; 103;BanchoLeomon;BanchoLeomon;; 104;Darkdramon;Darkdramon;; 105;Chaosmon;Chaosmon;; 106;MetalGarurumon;MetalGarurumon;; -107;BlackMetalGarurumon;BlackMetalGarurumon;; -108;ZeedGarurumon;ZeedGarurumon;; -109;HerculesKabuterimon;HerculesKabuterimon;; +107;BlackMetalGarurumon;MetalGarurumon (Black);; +108;ZeedGarurumon;Z'dGarurumon;; +109;HerculesKabuterimon;HerakleKabuterimon;; 110;MetalEtemon;MetalEtemon;; 111;Vikemon;Vikemon;; -112;ChaosGallantmon;ChaosGallantmon;; -113;MaloMyotismon;MaloMyotismon;; +112;ChaosGallantmon;ChaosDukemon;; +113;MaloMyotismon;BelialVamdemon;; 114;Murmukusmon;Murmukusmon;; -115;Ghoulmon;Ghoulmon;; +115;Ghoulmon;Deathmon;; 116;Vikaralamon;Vikaralamon;; 117;Kumbhiramon;Kumbhiramon;; 118;Vajramon;Vajramon;; 119;Mihiramon;Mihiramon;; -120;Antylamon;Antylamon;; +120;Antylamon;Andiramon;; 121;Majiramon;Majiramon;; 122;Sandiramon;Sandiramon;; 123;Indramon;Indramon;; @@ -127,10 +127,10 @@ index;original;replace;excludeTerms;excludePaths 126;Shinduramon;Shinduramon;; 127;Caturamon;Caturamon;; 128;Chaosdramon;Chaosdramon;; -129;Machinedramon;Machinedramon;; +129;Machinedramon;Mugendramon;; 130;MetalSeadramon;MetalSeadramon;; 131;GigaSeadramon;GigaSeadramon;; -132;NeoMyotismon;NeoMyotismon;; +132;NeoMyotismon;NeoVamdemon;; 133;Dorbickmon;Dorbickmon;; 134;Splashmon;Splashmon;; 135;Zamielmon;Zamielmon;; @@ -139,29 +139,29 @@ index;original;replace;excludeTerms;excludePaths 138;WarGreymon X;WarGreymon X;; 139;BlackWarGreymon X;BlackWarGreymon X;; 140;Seraphimon;Seraphimon;; -141;Ophanimon;Ophanimon;; +141;Ophanimon;Ofanimon;; 142;Cherubimon;Cherubimon;; 143;Lucemon FM;Lucemon FM;; 144;Leviamon;Leviamon;; -145;Beelzemon;Beelzemon;; +145;Beelzemon;Beelzebumon;; 146;Lilithmon;Lilithmon;; 147;Belphemon Rage Mode;Belphemon Rage Mode;; 148;Barbamon;Barbamon;; -149;Daemon;Daemon;; -150;Goldramon;Goldramon;; -151;Magnadramon;Magnadramon;; +149;Daemon;Demon;; +150;Goldramon;Goddramon;; +151;Magnadramon;Holydramon;; 152;Megidramon;Megidramon;; -153;Azulongmon;Azulongmon;; +153;Azulongmon;Qinglongmon;; 154;Baihumon;Baihumon;; 155;Zhuqiaomon;Zhuqiaomon;; -156;Ebonwumon;Ebonwumon;; +156;Ebonwumon;Xuanwumon;; 157;AncientGreymon;AncientGreymon;; 158;AncientGarurumon;AncientGarurumon;; -159;AncientBeetlemon;AncientBeetlemon;; -160;AncientKazemon;AncientKazemon;; -161;AncientMegatheriummon;AncientMegatheriummon;; -162;AncientMermaidmon;AncientMermaidmon;; -163;AncientTroymon;AncientTroymon;; +159;AncientBeetlemon;AncientBeatmon;; +160;AncientKazemon;AncientIrismon;; +161;AncientMegatheriummon;AncientMegatheriumon;; +162;AncientMermaidmon;AncientMermaimon;; +163;AncientTroymon;AncientTroiamon;; 164;AncientWisemon;AncientWisemon;; 165;AncientSphinxmon;AncientSphinxmon;; 166;AncientVolcamon;AncientVolcamon;; @@ -171,19 +171,19 @@ index;original;replace;excludeTerms;excludePaths 170;Imperialdramon FM;Imperialdramon FM;; 171;Imperialdramon PM;Imperialdramon PM;; 172;Omegamon;Omegamon;; -173;Gallantmon;Gallantmon;; +173;Gallantmon;Dukemon;; 174;Magnamon;Magnamon;; 175;Dynasmon;Dynasmon;; -176;Crusadermon;Crusadermon;; -177;UlforceVeedramon;UlforceVeedramon;; -178;Craniamon;Craniamon;; -179;Kentaurosmon;Kentaurosmon;; -180;Leopardmon;Leopardmon;; +176;Crusadermon;Dukemon;; +177;UlforceVeedramon;UlforceV-dramon;; +178;Craniamon;Craniummon;; +179;Kentaurosmon;Sleipmon;; +180;Leopardmon;Duftmon;; 181;Examon;Examon;; 182;Alphamon;Alphamon;; 183;Marsmon;Marsmon;; 184;Neptunemon;Neptunemon;; -185;Merukimon;Merukimon;; +185;Merukimon;Mercurymon;; 186;Venusmon;Venusmon;; 187;Minervamon;Minervamon;; 188;Vulcanusmon;Vulcanusmon;; @@ -198,94 +198,94 @@ index;original;replace;excludeTerms;excludePaths 197;QueenChessmon;QueenChessmon;; 198;KingChessmon;KingChessmon;; 199;Agumon X;Agumon X;; -200;SkullScorpiomon X;SkullScorpiomon X;; -201;UlforceVeedramon X;UlforceVeedramon X;; +200;SkullScorpiomon X;Anomalocarimon X;; +201;UlforceVeedramon X;UlforceV-dramon X;; 202;Allomon X;Allomon X;; -203;Ebemon X;Ebemon X;; +203;Ebemon X;EBEmon X;; 204;Okuwamon X;Okuwamon X;; 205;Omegamon X;Omegamon X;; -206;Samudramon;Samudramon;; +206;Samudramon;Gaioumon;; 207;Chaosdramon X;Chaosdramon X;; 208;Gazimon X;Gazimon X;; -209;Crabmon X;Crabmon X;; +209;Crabmon X;Ganimon X;; 210;Gabumon X;Gabumon X;; 211;Garudamon X;Garudamon X;; 212;Garurumon X;Garurumon X;; 213;Guilmon X;Guilmon X;; -214;Growlmon X;Growlmon X;; -215;GranDracmon;GranDracmon;; +214;Growlmon X;Growmon X;; +215;GranDracmon;GrandDracumon;; 216;Greymon X;Greymon X;; 217;Kuwagamon X;Kuwagamon X;; -218;Cerberusmon X;Cerberusmon X;; +218;Cerberusmon X;Cerberumon X;; 219;Kokuwamon X;Kokuwamon X;; -220;Goldramon X;Goldramon X;; -221;Gotsumon X;Gotsumon X;; +220;Goldramon X;Goddramon X;; +221;Gotsumon X;Gottsumon X;; 222;Gomamon X;Gomamon X;; 223;Sangloupmon;Sangloupmon;; -224;Thundermon X;Thundermon X;; +224;Thundermon X;Thunderballmon X;; 225;Seadramon X;Seadramon X;; 226;SkullBaluchimon;SkullBaluchimon;; -227;SkullMammothmon X;SkullMammothmon X;; +227;SkullMammothmon X;SkullMammon X;; 228;Starmon X;Starmon X;; 229;TigerVespamon;TigerVespamon;; 230;Dinorexmon;Dinorexmon;; 231;Gatomon X;Gatomon X;; 232;Tylomon X;Tylomon X;; -233;DexDorugamon;DexDorugamon;; -234;DexDoruGreymon;DexDoruGreymon;; -235;Dexmon;Dexmon;; -236;Gallantmon X;Gallantmon X;; +233;DexDorugamon;Death-X-DORUgamon;; +234;DexDoruGreymon;Death-X-DORUguremon;; +235;Dexmon;Death-X-mon;; +236;Gallantmon X;Dukemon X;; 237;Dynasmon X;Dynasmon X;; -238;Leopardmon X;Leopardmon X;; +238;Leopardmon X;Duftmon X;; 239;Togemon X;Togemon X;; -240;Dracmon;Dracmon;; +240;Dracmon;Dracumon;; 241;Triceramon X;Triceramon X;; 242;Nefertimon X;Nefertimon X;; 243;Hagurumon X;Hagurumon X;; 244;Palmon X;Palmon X;; -245;IceLeomon X;IceLeomon X;; +245;IceLeomon X;Panjyamon X;; 246;PrinceMamemon X;PrinceMamemon X;; 247;Plesiomon X;Plesiomon X;; -248;Salamon X;Salamon X;; +248;Salamon X;Plotmon X;; 249;Vademon X;Vademon X;; 250;Betamon X;Betamon X;; -251;Beelzemon X;Beelzemon X;; -252;Magnadramon X;Magnadramon X;; +251;Beelzemon X;Beelzebumon X;; +252;Magnadramon X;Holydramon X;; 253;Magnamon X;Magnamon X;; -254;Matadormon;Matadormon;; +254;Matadormon;Matadrmon;; 255;Mamemon X;Mamemon X;; 256;Mantaraymon X;Mantaraymon X;; -257;Mammothmon X;Mammothmon X;; +257;Mammothmon X;Mammon X;; 258;MegaSeadramon X;MegaSeadramon X;; -259;WarGrowlmon X;WarGrowlmon X;; +259;WarGrowlmon X;MegaloGrowmon X;; 260;Megidramon X;Megidramon X;; 261;MetalGarurumon X;MetalGarurumon X;; 262;MetalGreymon X;MetalGreymon X;; -263;MetalTyrannomon X;MetalTyrannomon X;; +263;MetalTyrannomon X;MetalTyranomon X;; 264;MetalMamemon X;MetalMamemon X;; -265;MedievalGallantmon;MedievalGallantmon;; +265;MedievalGallantmon;MedievalDukemon;; 266;Monochromon X;Monochromon X;; -267;Lillymon X;Lillymon X;; +267;Lillymon X;Lilimon X;; 268;Leomon X;Leomon X;; 269;Rosemon X;Rosemon X;; 270;WereGarurumon X;WereGarurumon X;; -271;Tyrannomon;Tyrannomon;; -272;DarkTyrannomon;DarkTyrannomon;; -273;ExTyrannomon;ExTyrannomon;; -274;MasterTyrannomon;MasterTyrannomon;; +271;Tyrannomon;Tyranomon;; +272;DarkTyrannomon;DarkTyranomon;; +273;ExTyrannomon;Ex-Tyranomon;; +274;MasterTyrannomon;MasterTyranomon;; 275;MameTyramon;MameTyramon;; -276;RustTyrannomon;RustTyrannomon;; +276;RustTyrannomon;RustTyranomon;; 277;Kokuwamon;Kokuwamon;; 278;Okuwamon;Okuwamon;; 279;GranKuwagamon;GranKuwagamon;; 280;GrandisKuwagamon;GrandisKuwagamon;; 281;BladeKuwagamon;BladeKuwagamon;; 282;MetallifeKuwagamon;MetallifeKuwagamon;; -283;Kimeramon;Kimeramon;; -284;Dorugamon;Dorugamon;; -285;DoruGreymon;DoruGreymon;; -286;Dorugoramon;Dorugoramon;; -287;DexDorugoramon;DexDorugoramon;; +283;Kimeramon;Chimairamon;; +284;Dorugamon;DORUgamon;; +285;DoruGreymon;DORUguremon;; +286;Dorugoramon;DORUgoramon;; +287;DexDorugoramon;Death-X-DORUgoramon;; 288;Raptordramon;Raptordramon;; 289;Grademon;Grademon;; 290;Ryudamon;Ryudamon;; @@ -309,14 +309,14 @@ index;original;replace;excludeTerms;excludePaths 308;ShineGreymon BM;ShineGreymon BM;; 309;MirageGaogamon BM;MirageGaogamon BM;; 310;Rosemon BM;Rosemon BM;; -311;Ravemon BM;Ravemon BM;; -312;Aurumon;Aurumon;; +311;Ravemon BM;Ravmon BM;; +312;Aurumon;Owlmon;; 313;Swanmon;Swanmon;; 314;Sethmon;Sethmon;; 315;Pipismon;Pipismon;; -316;Pteramon;Pteramon;; -317;Halsemon;Halsemon;; -318;Elephantmon;Elephantmon;; +316;Pteramon;Pteranomon;; +317;Halsemon;Holsmon;; +318;Elephantmon;Elephamon;; 319;Kongoumon;Kongoumon;; 320;Peacockmon;Peacockmon;; 321;Maildramon;Maildramon;; @@ -325,14 +325,14 @@ index;original;replace;excludeTerms;excludePaths 324;Sagittarimon;Sagittarimon;; 325;Sheepmon;Sheepmon;; 326;Bullmon;Bullmon;; -327;Pegasusmon;Pegasusmon;; +327;Pegasusmon;Pegasmon;; 328;Moosemon;Moosemon;; 329;Kabukimon;Kabukimon;; 330;Shurimon;Shurimon;; 331;Nohemon;Nohemon;; 332;Frogmon;Frogmon;; 333;Ponchomon;Ponchomon;; -334;Yasyamon;Yasyamon;; +334;Yasyamon;Yaksamon;; 335;Archelomon;Archelomon;; 336;Orcamon;Orcamon;; 337;Submarimon;Submarimon;; @@ -341,12 +341,12 @@ index;original;replace;excludeTerms;excludePaths 340;Mantaraymon;Mantaraymon;; 341;Searchmon;Searchmon;; 342;Digmon;Digmon;; -343;Butterflymon;Butterflymon;; +343;Butterflymon;Butterflamon;; 344;Honeybeemon;Honeybeemon;; 345;Flybeemon;Flybeemon;; 346;Mothmon;Mothmon;; 347;Gargomon;Gargomon;; -348;Quetzalmon;Quetzalmon;; +348;Quetzalmon;Coatlmon;; 349;Seahomon;Seahomon;; 350;Nefertimon;Nefertimon;; 351;Harpymon;Harpymon;; @@ -359,79 +359,79 @@ index;original;replace;excludeTerms;excludePaths 358;Pucchiemon (Green);Pucchiemon (Green);; 359;Prairiemon;Prairiemon;; 360;Allomon;Allomon;; -361;Salamandermon;Salamandermon;; +361;Salamandermon;Salamandamon;; 362;Shadramon;Shadramon;; 363;Baromon;Baromon;; -364;FlameWizardmon;FlameWizardmon;; -365;Flamedramon;Flamedramon;; +364;FlameWizardmon;FlaWizardmon;; +365;Flamedramon;Fladramon;; 366;Boarmon;Boarmon;; 367;Lynxmon;Lynxmon;; 368;Kenkimon;Kenkimon;; -369;Thunderbirdmon;Thunderbirdmon;; +369;Thunderbirdmon;Thunderbirmon;; 370;Stegomon;Stegomon;; 371;Sepikmon;Sepikmon;; 372;Togemogumon;Togemogumon;; 373;Rabbitmon;Rabbitmon;; -374;Raidramon;Raidramon;; -375;Linkmon;Linkmon;; -376;GoldVeedramon;GoldVeedramon;; +374;Raidramon;Lighdramon;; +375;Linkmon;Rinkmon;; +376;GoldVeedramon;GoldV-dramon;; 377;Rapidmon (Armor);Rapidmon (Armor);; -378;Agunimon;Agunimon;; +378;Agunimon;Agnimon;; 379;Aldamon;Aldamon;; -380;BurningGreymon;BurningGreymon;; -381;EmperorGreymon;EmperorGreymon;; -382;Flamemon;Flamemon;; +380;BurningGreymon;Vritramon;; +381;EmperorGreymon;KaiserGreymon;; +382;Flamemon;Flamon;; 383;Calmaramon;Calmaramon;; 384;Ranamon;Ranamon;; 385;Daipenmon;Daipenmon;; -386;Kumamon;Kumamon;; -387;Korikakumon;Korikakumon;; +386;Kumamon;Chackmon;; +387;Korikakumon;Blizzarmon;; 388;JetSilphymon;JetSilphymon;; -389;Zephyrmon;Zephyrmon;; -390;Kazemon;Kazemon;; -391;Beetlemon;Beetlemon;; -392;MetalKabuterimon;MetalKabuterimon;; +389;Zephyrmon;Shutumon;; +390;Kazemon;Fairimon;; +391;Beetlemon;Blitzmon;; +392;MetalKabuterimon;Bolgmon;; 393;RhinoKabuterimon;RhinoKabuterimon;; 394;Arbormon;Arbormon;; 395;Petaldramon;Petaldramon;; 396;Gigasmon;Gigasmon;; -397;Grumblemon;Grumblemon;; -398;Sakkakumon;Sakkakumon;; -399;Mercurymon;Mercurymon;; -400;Lobomon;Lobomon;; -401;KendoGarurumon;KendoGarurumon;; -402;BeoWolfmon;BeoWolfmon;; +397;Grumblemon;Grottemon;; +398;Sakkakumon;Sephirothmon;; +399;Mercurymon;Mercuremon;; +400;Lobomon;Wolfmon;; +401;KendoGarurumon;Garummon;; +402;BeoWolfmon;Beowolfmon;; 403;MagnaGarurumon;MagnaGarurumon;; 404;Strabimon;Strabimon;; -405;JagerLoweemon;JagerLoweemon;; +405;JagerLoweemon;KaiserLeomon;; 406;Duskmon;Duskmon;; -407;Velgemon;Velgemon;; -408;Rhihimon;Rhihimon;; -409;Loweemon;Loweemon;; +407;Velgemon;Velgrmon;; +408;Rhihimon;Raihimon;; +409;Loweemon;Löwemon;; 410;Yggdrasill_7D6;Yggdrasill_7D6;; -411;Wizardmon;Wizardmon;; -412;Garbagemon;Garbagemon;; +411;Wizardmon;Wizarmon;; +412;Garbagemon;Gerbemon;; 413;Kuwagamon;Kuwagamon;; -414;Centarumon;Centarumon;; +414;Centarumon;Centalmon;; 415;Shellmon;Shellmon;; -416;Cherrymon;Cherrymon;; +416;Cherrymon;Jyureimon;; 417;Digitamamon;Digitamamon;; -418;Deramon;Deramon;; -419;ShogunGekomon;ShogunGekomon;; +418;Deramon;Delumon;; +419;ShogunGekomon;TonosamaGekomon;; 420;Drimogemon;Drimogemon;; 421;Nanimon;Nanimon;; 422;Mojyamon;Mojyamon;; 423;Monochromon;Monochromon;; -424;Frigimon;Frigimon;; -425;Lillymon;Lillymon;; -426;Salamon;Salamon;; +424;Frigimon;Yukidarumon;; +425;Lillymon;Lilimon;; +426;Salamon;Plotmon;; 427;WaruMonzaemon;WaruMonzaemon;; 428;Kuramon;Kuramon;; 429;Tsumemon;Tsumemon;; 430;Keramon;Keramon;; 431;Chrysalimon;Chrysalimon;; 432;Infermon;Infermon;; -433;Diaboromon;Diaboromon;; +433;Diaboromon;Diablomon;; 434;Sunmon;Sunmon;; 435;Coronamon;Coronamon;; 436;Firamon;Firamon;; @@ -444,131 +444,131 @@ index;original;replace;excludeTerms;excludePaths 443;Dianamon;Dianamon;; 444;Babamon;Babamon;; 445;Agumon (2006);Agumon (2006);; -446;ProfessorAgumon;ProfessorAgumon;; +446;ProfessorAgumon;Agumon Hakase;; 447;Stingmon;Stingmon;; 448;Wormmon;Wormmon;; 449;Aquilamon;Aquilamon;; -450;Armadillomon;Armadillomon;; -451;Wendigomon;Wendigomon;; -452;Gwappamon;Gwappamon;; +450;Armadillomon;Armadiomon;; +451;Wendigomon;Wendimon;; +452;Gwappamon;Gawappamon;; 453;Sakuyamon;Sakuyamon;; -454;Shawjamon;Shawjamon;; +454;Shawjamon;Shawujinmon;; 455;Shakkoumon;Shakkoumon;; 456;Silphymon;Silphymon;; 457;Taomon;Taomon;; -458;Chirinmon;Chirinmon;; -459;Gallantmon Crimson Mode;Gallantmon Crimson Mode;; +458;Chirinmon;Tyilinmon;; +459;Gallantmon Crimson Mode;Dukemon Crimson Mode;; 460;Falcomon;Falcomon;; 461;Peckmon;Peckmon;; 462;Monodramon;Monodramon;; -463;Crowmon;Crowmon;; -464;Ravemon;Ravemon;; +463;Crowmon;Yatagaramon;; +464;Ravemon;Ravmon;; 465;Reppamon;Reppamon;; 466;SkullGreymon;SkullGreymon;; 467;Hawkmon;Hawkmon;; 468;Ankylomon;Ankylomon;; 469;Terriermon;Terriermon;; -470;Gargomon;Gargomon;; +470;Gargomon;Galgomon;; 471;Lopmon;Lopmon;; 472;Cherubimon (Evil);Cherubimon (Evil);; 473;Rapidmon;Rapidmon;; -474;MegaGargomon;MegaGargomon;; +474;MegaGargomon;SaintGalgomon;; 475;Renamon;Renamon;; 476;Kyubimon;Kyubimon;; 477;Cyberdramon;Cyberdramon;; 478;Justimon (Blitz Arm);Justimon (Blitz Arm);; -479;Beelzemon Blast Mode;Beelzemon Blast Mode;; +479;Beelzemon Blast Mode;Beelzebumon Blast Mode;; 480;Mamemon;Mamemon;; 481;MetalMamemon;MetalMamemon;; 482;PrinceMamemon;PrinceMamemon;; -483;Ogremon;Ogremon;; -484;Veedramon;Veedramon;; -485;AeroVeedramon;AeroVeedramon;; -486;Piedmon;Piedmon;; -487;Vegiemon;Vegiemon;; +483;Ogremon;Orgemon;; +484;Veedramon;V-dramon;; +485;AeroVeedramon;AeroV-dramon;; +486;Piedmon;Piemon;; +487;Vegiemon;Vegimon;; 488;Woodmon;Woodmon;; -489;Puppetmon;Puppetmon;; +489;Puppetmon;Pinochimon;; 490;Gigadramon;Gigadramon;; -491;Piximon;Piximon;; +491;Piximon;Piccolomon;; 492;Vademon;Vademon;; 493;Betamon;Betamon;; -494;Hi-Andromon;Hi-Andromon;; +494;Hi-Andromon;HiAndromon;; 495;Lucemon;Lucemon;; 496;Boltmon;Boltmon;; -497;SkullMeramon;SkullMeramon;; -498;GrapLeomon;GrapLeomon;; +497;SkullMeramon;DeathMeramon;; +498;GrapLeomon;GrappuLeomon;; 499;SaberLeomon;SaberLeomon;; -500;IceLeomon;IceLeomon;; -501;Pabumon;Pabumon;; -502;Motimon;Motimon;; +500;IceLeomon;Panjyamon;; +501;Pabumon;Bubbmon;; +502;Motimon;Mochimon;; 503;Lucemon Satan Mode;Lucemon Satan Mode;; 504;Whamon;Whamon;; 505;Parrotmon;Parrotmon;; 506;Gekomon;Gekomon;; 507;Susanoomon;Susanoomon;; -508;Fake ProfessorAgumon;Fake ProfessorAgumon;; +508;Fake ProfessorAgumon;NiseAgumon Hakase;; 509;Lucemon Larva;Lucemon Larva;; -510;Alphamon Ouryuken;Alphamon Ouryuken;; -511;Millenniummon;Millenniummon;; -512;ZeedMillenniummon;ZeedMillenniummon;; -513;MoonMillenniummon;MoonMillenniummon;; +510;Alphamon Ouryuken;Alphamon: Ouryuken;; +511;Millenniummon;Millenniumon;; +512;ZeedMillenniummon;ZeedMillenniumon;; +513;MoonMillenniummon;MoonMillenniumon;; 514;Belphemon Sleep Mode;Belphemon Sleep Mode;; 515;KingEtemon;KingEtemon;; -516;ShogunMamemon;ShogunMamemon;; +516;ShogunMamemon;TonosamaMamemon;; 517;BigMamemon;BigMamemon;; 518;CatchMamemon;CatchMamemon;; 519;Fugamon;Fugamon;; -520;Shamanmon;Shamanmon;; +520;Shamanmon;Shamamon;; 521;GoldNumemon;GoldNumemon;; 522;PlatinumSukamon;PlatinumSukamon;; -523;SkullScorpiomon;SkullScorpiomon;; -524;Ebemon;Ebemon;; +523;SkullScorpiomon;Scorpiomon;; +524;Ebemon;EBEmon;; 525;Gazimon;Gazimon;; 526;Crabmon;Crabmon;; -527;Cerberusmon;Cerberusmon;; -528;Gotsumon;Gotsumon;; -529;Thundermon;Thundermon;; -530;SkullMammothmon;SkullMammothmon;; +527;Cerberusmon;Cerberumon;; +528;Gotsumon;Gottsumon;; +529;Thundermon;Thunderballmon;; +530;SkullMammothmon;SkullMammon;; 531;Starmon;Starmon;; 532;Titamon;Titamon;; 533;Triceramon;Triceramon;; 534;Plesiomon;Plesiomon;; -535;Mammothmon;Mammothmon;; -536;UltimateBrachiomon;UltimateBrachiomon;; -537;Fanbeemon;Fanbeemon;; -538;TobuCatmon;TobuCatmon;; +535;Mammothmon;Mammon;; +536;UltimateBrachiomon;UltimateBrachimon;; +537;Fanbeemon;Funbeemon;; +538;TobuCatmon;Tobucatmon;; 539;Dinotigermon;Dinotigermon;; 540;ClavisAngemon;ClavisAngemon;; 541;MetalPiranimon;MetalPiranimon;; 542;Rhinomon X;Rhinomon X;; -543;Pteramon X;Pteramon X;; +543;Pteramon X;Pteranomon X;; 544;Otamamon X;Otamamon X;; 545;Gesomon X;Gesomon X;; -546;Syakomon X;Syakomon X;; +546;Syakomon X;Shakomon X;; 547;Dobermon X;Dobermon X;; 548;Otamamon;Otamamon;; 549;Gesomon;Gesomon;; -550;Syakomon;Syakomon;; +550;Syakomon;Shakomon;; 551;Dobermon;Dobermon;; 552;Elecmon;Elecmon;; -553;Penguinmon;Penguinmon;; +553;Penguinmon;Penmon;; 554;Kunemon;Kunemon;; -555;Tsunomon;Tsunomon;; +555;Tsunomon;Tunomon;; 556;Punimon;Punimon;; 557;Tanemon;Tanemon;; -558;Kokatorimon;Kokatorimon;; +558;Kokatorimon;Cockatrimon;; 559;Unimon;Unimon;; -560;Ninjamon;Ninjamon;; +560;Ninjamon;Igamon;; 561;Coelamon;Coelamon;; 562;Giromon;Giromon;; 563;Nyokimon;Nyokimon;; 564;Yokomon;Yokomon;; -565;Pichimon;Pichimon;; +565;Pichimon;Pitchmon;; 566;Bukamon;Bukamon;; 567;Nyaromon;Nyaromon;; 568;YukimiBotamon;YukimiBotamon;; -569;Chibomon;Chibomon;; -570;DemiVeemon;DemiVeemon;; +569;Chibomon;Chicomon;; +570;DemiVeemon;Chibimon;; 571;Pururumon;Pururumon;; 572;Poromon;Poromon;; 573;Tsubumon;Tsubumon;; @@ -579,11 +579,11 @@ index;original;replace;excludeTerms;excludePaths 578;Gummymon;Gummymon;; 579;Relemon;Relemon;; 580;Viximon;Viximon;; -581;Conomon;Conomon;; -582;Kokomon;Kokomon;; -583;MetalKoromon;MetalKoromon;; +581;Conomon;Cocomon;; +582;Kokomon;Chocomon;; +583;MetalKoromon;Choromon;; 584;Kotemon;Kotemon;; 585;Chapmon;Chapmon;; -586;DemiMeramon;DemiMeramon;; -587;Calumon;Calumon;; -588;Kapurimon;Kapurimon;; \ No newline at end of file +586;DemiMeramon;PetitMeramon;; +587;Calumon;Culumon;; +588;Kapurimon;Caprimon;; \ No newline at end of file diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CardNames2.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CardNames2.csv index 926efba..ea6d020 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CardNames2.csv +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CardNames2.csv @@ -11,56 +11,56 @@ index;original;replace;excludeTerms;excludePaths 10;Gigimon;Gigimon;; 11;Agumon;Agumon;; 12;Gaomon;Gaomon;; -13;Biyomon;Biyomon;; +13;Biyomon;Piyomon;; 14;Veemon;Veemon;; 15;Hagurumon;Hagurumon;; -16;Candlemon;Candlemon;; -17;Chuumon;Chuumon;; -18;Tsukaimon;Tsukaimon;; +16;Candlemon;Candmon;; +17;Chuumon;Tyumon;; +18;Tsukaimon;Tukaimon;; 19;Kamemon;Kamemon;; 20;Kudamon;Kudamon;; 21;Lalamon;Lalamon;; 22;Impmon;Impmon;; 23;Guilmon;Guilmon;; 24;Patamon;Patamon;; -25;DemiDevimon;DemiDevimon;; +25;DemiDevimon;PicoDevimon;; 26;BlackGabumon;BlackGabumon;; 27;Psychemon;Psychemon;; 28;Goburimon;Goburimon;; -29;SnowAgumon;SnowAgumon;; +29;SnowAgumon;YukiAgumon;; 30;BlackAgumon;BlackAgumon;; 31;Gabumon;Gabumon;; 32;Solarmon;Solarmon;; 33;Tentomon;Tentomon;; 34;Gomamon;Gomamon;; 35;Palmon;Palmon;; -36;Dorumon;Dorumon;; +36;Dorumon;DORUmon;; 37;Commandramon;Commandramon;; 38;Greymon;Greymon;; 39;Gaogamon;Gaogamon;; 40;Birdramon;Birdramon;; -41;ExVeemon;ExVeemon;; +41;ExVeemon;XV-mon;; 42;Meramon;Meramon;; 43;Airdramon;Airdramon;; 44;Garurumon;Garurumon;; 45;Bakemon;Bakemon;; -46;BlackGatomon;BlackGatomon;; +46;BlackGatomon;BlackTailmon;; 47;GeoGreymon;GeoGreymon;; 48;Sunflowmon;Sunflowmon;; 49;Numemon;Numemon;; 50;Leomon;Leomon;; -51;Growlmon;Growlmon;; +51;Growlmon;Growmon;; 52;Angemon;Angemon;; -53;Growlmon (Orange);Growlmon (Orange);; -54;Gatomon;Gatomon;; +53;Growlmon (Orange);Growmon (Orange);; +54;Gatomon;Tailmon;; 55;Devimon;Devimon;; -56;BlackGrowlmon;BlackGrowlmon;; +56;BlackGrowlmon;BlackGrowmon;; 57;IceDevimon;IceDevimon;; -58;BlackGarurumon;BlackGarurumon;; +58;BlackGarurumon;Garurumon (Black);; 59;Gururumon;Gururumon;; 60;Geremon;Geremon;; 61;Kabuterimon;Kabuterimon;; -62;Sukamon;Sukamon;; +62;Sukamon;Scumon;; 63;Ikkakumon;Ikkakumon;; 64;Guardromon;Guardromon;; 65;Seadramon;Seadramon;; @@ -70,55 +70,55 @@ index;original;replace;excludeTerms;excludePaths 69;MachGaogamon;MachGaogamon;; 70;Garudamon;Garudamon;; 71;Paildramon;Paildramon;; -72;MagnaAngemon;MagnaAngemon;; +72;MagnaAngemon;HolyAngemon;; 73;LadyDevimon;LadyDevimon;; 74;Monzaemon;Monzaemon;; 75;RizeGreymon;RizeGreymon;; 76;Lilamon;Lilamon;; -77;Myotismon;Myotismon;; +77;Myotismon;Vamdemon;; 78;MegaSeadramon;MegaSeadramon;; -79;WarGrowlmon;WarGrowlmon;; -80;BlackWarGrowlmon;BlackWarGrowlmon;; +79;WarGrowlmon;MegaloGrowmon;; +80;BlackWarGrowlmon;BlackMegaloGrowmon;; 81;WereGarurumon;WereGarurumon;; 82;Angewomon;Angewomon;; 83;BlueMeramon;BlueMeramon;; -84;BlackWereGarurumon;BlackWereGarurumon;; +84;BlackWereGarurumon;WereGarurumon (Black);; 85;WarGrowlmon (Orange);WarGrowlmon (Orange);; -86;MegaKabuterimon;MegaKabuterimon;; +86;MegaKabuterimon;AtlurKabuterimon;; 87;Etemon;Etemon;; 88;Andromon;Andromon;; 89;Zudomon;Zudomon;; -90;MetalTyrannomon;MetalTyrannomon;; +90;MetalTyrannomon;MetalTyranomon;; 91;Megadramon;Megadramon;; 92;MetalGreymon (Virus);MetalGreymon (Virus);; 93;Tankdramon;Tankdramon;; 94;WarGreymon;WarGreymon;; 95;MirageGaogamon;MirageGaogamon;; -96;Phoenixmon;Phoenixmon;; +96;Phoenixmon;Hououmon;; 97;BlackWarGreymon;BlackWarGreymon;; 98;ShineGreymon;ShineGreymon;; 99;VictoryGreymon;VictoryGreymon;; -100;MarineAngemon;MarineAngemon;; +100;MarineAngemon;MarinAngemon;; 101;Rosemon;Rosemon;; 102;PlatinumNumemon;PlatinumNumemon;; 103;BanchoLeomon;BanchoLeomon;; 104;Darkdramon;Darkdramon;; 105;Chaosmon;Chaosmon;; 106;MetalGarurumon;MetalGarurumon;; -107;BlackMetalGarurumon;BlackMetalGarurumon;; -108;ZeedGarurumon;ZeedGarurumon;; -109;HerculesKabuterimon;HerculesKabuterimon;; +107;BlackMetalGarurumon;MetalGarurumon (Black);; +108;ZeedGarurumon;Z'dGarurumon;; +109;HerculesKabuterimon;HerakleKabuterimon;; 110;MetalEtemon;MetalEtemon;; 111;Vikemon;Vikemon;; -112;ChaosGallantmon;ChaosGallantmon;; -113;MaloMyotismon;MaloMyotismon;; +112;ChaosGallantmon;ChaosDukemon;; +113;MaloMyotismon;BelialVamdemon;; 114;Murmukusmon;Murmukusmon;; -115;Ghoulmon;Ghoulmon;; +115;Ghoulmon;Deathmon;; 116;Vikaralamon;Vikaralamon;; 117;Kumbhiramon;Kumbhiramon;; 118;Vajramon;Vajramon;; 119;Mihiramon;Mihiramon;; -120;Antylamon;Antylamon;; +120;Antylamon;Andiramon;; 121;Majiramon;Majiramon;; 122;Sandiramon;Sandiramon;; 123;Indramon;Indramon;; @@ -127,10 +127,10 @@ index;original;replace;excludeTerms;excludePaths 126;Shinduramon;Shinduramon;; 127;Caturamon;Caturamon;; 128;Chaosdramon;Chaosdramon;; -129;Machinedramon;Machinedramon;; +129;Machinedramon;Mugendramon;; 130;MetalSeadramon;MetalSeadramon;; 131;GigaSeadramon;GigaSeadramon;; -132;NeoMyotismon;NeoMyotismon;; +132;NeoMyotismon;NeoVamdemon;; 133;Dorbickmon;Dorbickmon;; 134;Splashmon;Splashmon;; 135;Zamielmon;Zamielmon;; @@ -139,29 +139,29 @@ index;original;replace;excludeTerms;excludePaths 138;WarGreymon X;WarGreymon X;; 139;BlackWarGreymon X;BlackWarGreymon X;; 140;Seraphimon;Seraphimon;; -141;Ophanimon;Ophanimon;; +141;Ophanimon;Ofanimon;; 142;Cherubimon;Cherubimon;; 143;Lucemon FM;Lucemon FM;; 144;Leviamon;Leviamon;; -145;Beelzemon;Beelzemon;; +145;Beelzemon;Beelzebumon;; 146;Lilithmon;Lilithmon;; 147;Belphemon Rage Mode;Belphemon Rage Mode;; 148;Barbamon;Barbamon;; -149;Daemon;Daemon;; -150;Goldramon;Goldramon;; -151;Magnadramon;Magnadramon;; +149;Daemon;Demon;; +150;Goldramon;Goddramon;; +151;Magnadramon;Holydramon;; 152;Megidramon;Megidramon;; -153;Azulongmon;Azulongmon;; +153;Azulongmon;Qinglongmon;; 154;Baihumon;Baihumon;; 155;Zhuqiaomon;Zhuqiaomon;; -156;Ebonwumon;Ebonwumon;; +156;Ebonwumon;Xuanwumon;; 157;AncientGreymon;AncientGreymon;; 158;AncientGarurumon;AncientGarurumon;; -159;AncientBeetlemon;AncientBeetlemon;; -160;AncientKazemon;AncientKazemon;; -161;AncientMegatheriummon;AncientMegatheriummon;; -162;AncientMermaidmon;AncientMermaidmon;; -163;AncientTroymon;AncientTroymon;; +159;AncientBeetlemon;AncientBeatmon;; +160;AncientKazemon;AncientIrismon;; +161;AncientMegatheriummon;AncientMegatheriumon;; +162;AncientMermaidmon;AncientMermaimon;; +163;AncientTroymon;AncientTroiamon;; 164;AncientWisemon;AncientWisemon;; 165;AncientSphinxmon;AncientSphinxmon;; 166;AncientVolcamon;AncientVolcamon;; @@ -171,19 +171,19 @@ index;original;replace;excludeTerms;excludePaths 170;Imperialdramon FM;Imperialdramon FM;; 171;Imperialdramon PM;Imperialdramon PM;; 172;Omegamon;Omegamon;; -173;Gallantmon;Gallantmon;; +173;Gallantmon;Dukemon;; 174;Magnamon;Magnamon;; 175;Dynasmon;Dynasmon;; -176;Crusadermon;Crusadermon;; -177;UlforceVeedramon;UlforceVeedramon;; -178;Craniamon;Craniamon;; -179;Kentaurosmon;Kentaurosmon;; -180;Leopardmon;Leopardmon;; +176;Crusadermon;Dukemon;; +177;UlforceVeedramon;UlforceV-dramon;; +178;Craniamon;Craniummon;; +179;Kentaurosmon;Sleipmon;; +180;Leopardmon;Duftmon;; 181;Examon;Examon;; 182;Alphamon;Alphamon;; 183;Marsmon;Marsmon;; 184;Neptunemon;Neptunemon;; -185;Merukimon;Merukimon;; +185;Merukimon;Mercurymon;; 186;Venusmon;Venusmon;; 187;Minervamon;Minervamon;; 188;Vulcanusmon;Vulcanusmon;; @@ -198,94 +198,94 @@ index;original;replace;excludeTerms;excludePaths 197;QueenChessmon;QueenChessmon;; 198;KingChessmon;KingChessmon;; 199;Agumon X;Agumon X;; -200;SkullScorpiomon X;SkullScorpiomon X;; -201;UlforceVeedramon X;UlforceVeedramon X;; +200;SkullScorpiomon X;Anomalocarimon X;; +201;UlforceVeedramon X;UlforceV-dramon X;; 202;Allomon X;Allomon X;; -203;Ebemon X;Ebemon X;; +203;Ebemon X;EBEmon X;; 204;Okuwamon X;Okuwamon X;; 205;Omegamon X;Omegamon X;; -206;Samudramon;Samudramon;; +206;Samudramon;Gaioumon;; 207;Chaosdramon X;Chaosdramon X;; 208;Gazimon X;Gazimon X;; -209;Crabmon X;Crabmon X;; +209;Crabmon X;Ganimon X;; 210;Gabumon X;Gabumon X;; 211;Garudamon X;Garudamon X;; 212;Garurumon X;Garurumon X;; 213;Guilmon X;Guilmon X;; -214;Growlmon X;Growlmon X;; -215;GranDracmon;GranDracmon;; +214;Growlmon X;Growmon X;; +215;GranDracmon;GrandDracumon;; 216;Greymon X;Greymon X;; 217;Kuwagamon X;Kuwagamon X;; -218;Cerberusmon X;Cerberusmon X;; +218;Cerberusmon X;Cerberumon X;; 219;Kokuwamon X;Kokuwamon X;; -220;Goldramon X;Goldramon X;; -221;Gotsumon X;Gotsumon X;; +220;Goldramon X;Goddramon X;; +221;Gotsumon X;Gottsumon X;; 222;Gomamon X;Gomamon X;; 223;Sangloupmon;Sangloupmon;; -224;Thundermon X;Thundermon X;; +224;Thundermon X;Thunderballmon X;; 225;Seadramon X;Seadramon X;; 226;SkullBaluchimon;SkullBaluchimon;; -227;SkullMammothmon X;SkullMammothmon X;; +227;SkullMammothmon X;SkullMammon X;; 228;Starmon X;Starmon X;; 229;TigerVespamon;TigerVespamon;; 230;Dinorexmon;Dinorexmon;; 231;Gatomon X;Gatomon X;; 232;Tylomon X;Tylomon X;; -233;DexDorugamon;DexDorugamon;; -234;DexDoruGreymon;DexDoruGreymon;; -235;Dexmon;Dexmon;; -236;Gallantmon X;Gallantmon X;; +233;DexDorugamon;Death-X-DORUgamon;; +234;DexDoruGreymon;Death-X-DORUguremon;; +235;Dexmon;Death-X-mon;; +236;Gallantmon X;Dukemon X;; 237;Dynasmon X;Dynasmon X;; -238;Leopardmon X;Leopardmon X;; +238;Leopardmon X;Duftmon X;; 239;Togemon X;Togemon X;; -240;Dracmon;Dracmon;; +240;Dracmon;Dracumon;; 241;Triceramon X;Triceramon X;; 242;Nefertimon X;Nefertimon X;; 243;Hagurumon X;Hagurumon X;; 244;Palmon X;Palmon X;; -245;IceLeomon X;IceLeomon X;; +245;IceLeomon X;Panjyamon X;; 246;PrinceMamemon X;PrinceMamemon X;; 247;Plesiomon X;Plesiomon X;; -248;Salamon X;Salamon X;; +248;Salamon X;Plotmon X;; 249;Vademon X;Vademon X;; 250;Betamon X;Betamon X;; -251;Beelzemon X;Beelzemon X;; -252;Magnadramon X;Magnadramon X;; +251;Beelzemon X;Beelzebumon X;; +252;Magnadramon X;Holydramon X;; 253;Magnamon X;Magnamon X;; -254;Matadormon;Matadormon;; +254;Matadormon;Matadrmon;; 255;Mamemon X;Mamemon X;; 256;Mantaraymon X;Mantaraymon X;; -257;Mammothmon X;Mammothmon X;; +257;Mammothmon X;Mammon X;; 258;MegaSeadramon X;MegaSeadramon X;; -259;WarGrowlmon X;WarGrowlmon X;; +259;WarGrowlmon X;MegaloGrowmon X;; 260;Megidramon X;Megidramon X;; 261;MetalGarurumon X;MetalGarurumon X;; 262;MetalGreymon X;MetalGreymon X;; -263;MetalTyrannomon X;MetalTyrannomon X;; +263;MetalTyrannomon X;MetalTyranomon X;; 264;MetalMamemon X;MetalMamemon X;; -265;MedievalGallantmon;MedievalGallantmon;; +265;MedievalGallantmon;MedievalDukemon;; 266;Monochromon X;Monochromon X;; -267;Lillymon X;Lillymon X;; +267;Lillymon X;Lilimon X;; 268;Leomon X;Leomon X;; 269;Rosemon X;Rosemon X;; 270;WereGarurumon X;WereGarurumon X;; -271;Tyrannomon;Tyrannomon;; -272;DarkTyrannomon;DarkTyrannomon;; -273;ExTyrannomon;ExTyrannomon;; -274;MasterTyrannomon;MasterTyrannomon;; +271;Tyrannomon;Tyranomon;; +272;DarkTyrannomon;DarkTyranomon;; +273;ExTyrannomon;Ex-Tyranomon;; +274;MasterTyrannomon;MasterTyranomon;; 275;MameTyramon;MameTyramon;; -276;RustTyrannomon;RustTyrannomon;; +276;RustTyrannomon;RustTyranomon;; 277;Kokuwamon;Kokuwamon;; 278;Okuwamon;Okuwamon;; 279;GranKuwagamon;GranKuwagamon;; 280;GrandisKuwagamon;GrandisKuwagamon;; 281;BladeKuwagamon;BladeKuwagamon;; 282;MetallifeKuwagamon;MetallifeKuwagamon;; -283;Kimeramon;Kimeramon;; -284;Dorugamon;Dorugamon;; -285;DoruGreymon;DoruGreymon;; -286;Dorugoramon;Dorugoramon;; -287;DexDorugoramon;DexDorugoramon;; +283;Kimeramon;Chimairamon;; +284;Dorugamon;DORUgamon;; +285;DoruGreymon;DORUguremon;; +286;Dorugoramon;DORUgoramon;; +287;DexDorugoramon;Death-X-DORUgoramon;; 288;Raptordramon;Raptordramon;; 289;Grademon;Grademon;; 290;Ryudamon;Ryudamon;; @@ -309,14 +309,14 @@ index;original;replace;excludeTerms;excludePaths 308;ShineGreymon BM;ShineGreymon BM;; 309;MirageGaogamon BM;MirageGaogamon BM;; 310;Rosemon BM;Rosemon BM;; -311;Ravemon BM;Ravemon BM;; -312;Aurumon;Aurumon;; +311;Ravemon BM;Ravmon BM;; +312;Aurumon;Owlmon;; 313;Swanmon;Swanmon;; 314;Sethmon;Sethmon;; 315;Pipismon;Pipismon;; -316;Pteramon;Pteramon;; -317;Halsemon;Halsemon;; -318;Elephantmon;Elephantmon;; +316;Pteramon;Pteranomon;; +317;Halsemon;Holsmon;; +318;Elephantmon;Elephamon;; 319;Kongoumon;Kongoumon;; 320;Peacockmon;Peacockmon;; 321;Maildramon;Maildramon;; @@ -325,14 +325,14 @@ index;original;replace;excludeTerms;excludePaths 324;Sagittarimon;Sagittarimon;; 325;Sheepmon;Sheepmon;; 326;Bullmon;Bullmon;; -327;Pegasusmon;Pegasusmon;; +327;Pegasusmon;Pegasmon;; 328;Moosemon;Moosemon;; 329;Kabukimon;Kabukimon;; 330;Shurimon;Shurimon;; 331;Nohemon;Nohemon;; 332;Frogmon;Frogmon;; 333;Ponchomon;Ponchomon;; -334;Yasyamon;Yasyamon;; +334;Yasyamon;Yaksamon;; 335;Archelomon;Archelomon;; 336;Orcamon;Orcamon;; 337;Submarimon;Submarimon;; @@ -341,12 +341,12 @@ index;original;replace;excludeTerms;excludePaths 340;Mantaraymon;Mantaraymon;; 341;Searchmon;Searchmon;; 342;Digmon;Digmon;; -343;Butterflymon;Butterflymon;; +343;Butterflymon;Butterflamon;; 344;Honeybeemon;Honeybeemon;; 345;Flybeemon;Flybeemon;; 346;Mothmon;Mothmon;; 347;Gargomon;Gargomon;; -348;Quetzalmon;Quetzalmon;; +348;Quetzalmon;Coatlmon;; 349;Seahomon;Seahomon;; 350;Nefertimon;Nefertimon;; 351;Harpymon;Harpymon;; @@ -359,79 +359,79 @@ index;original;replace;excludeTerms;excludePaths 358;Pucchiemon (Green);Pucchiemon (Green);; 359;Prairiemon;Prairiemon;; 360;Allomon;Allomon;; -361;Salamandermon;Salamandermon;; +361;Salamandermon;Salamandamon;; 362;Shadramon;Shadramon;; 363;Baromon;Baromon;; -364;FlameWizardmon;FlameWizardmon;; -365;Flamedramon;Flamedramon;; +364;FlameWizardmon;FlaWizardmon;; +365;Flamedramon;Fladramon;; 366;Boarmon;Boarmon;; 367;Lynxmon;Lynxmon;; 368;Kenkimon;Kenkimon;; -369;Thunderbirdmon;Thunderbirdmon;; +369;Thunderbirdmon;Thunderbirmon;; 370;Stegomon;Stegomon;; 371;Sepikmon;Sepikmon;; 372;Togemogumon;Togemogumon;; 373;Rabbitmon;Rabbitmon;; -374;Raidramon;Raidramon;; -375;Linkmon;Linkmon;; -376;GoldVeedramon;GoldVeedramon;; +374;Raidramon;Lighdramon;; +375;Linkmon;Rinkmon;; +376;GoldVeedramon;GoldV-dramon;; 377;Rapidmon (Armor);Rapidmon (Armor);; -378;Agunimon;Agunimon;; +378;Agunimon;Agnimon;; 379;Aldamon;Aldamon;; -380;BurningGreymon;BurningGreymon;; -381;EmperorGreymon;EmperorGreymon;; -382;Flamemon;Flamemon;; +380;BurningGreymon;Vritramon;; +381;EmperorGreymon;KaiserGreymon;; +382;Flamemon;Flamon;; 383;Calmaramon;Calmaramon;; 384;Ranamon;Ranamon;; 385;Daipenmon;Daipenmon;; -386;Kumamon;Kumamon;; -387;Korikakumon;Korikakumon;; +386;Kumamon;Chackmon;; +387;Korikakumon;Blizzarmon;; 388;JetSilphymon;JetSilphymon;; -389;Zephyrmon;Zephyrmon;; -390;Kazemon;Kazemon;; -391;Beetlemon;Beetlemon;; -392;MetalKabuterimon;MetalKabuterimon;; +389;Zephyrmon;Shutumon;; +390;Kazemon;Fairimon;; +391;Beetlemon;Blitzmon;; +392;MetalKabuterimon;Bolgmon;; 393;RhinoKabuterimon;RhinoKabuterimon;; 394;Arbormon;Arbormon;; 395;Petaldramon;Petaldramon;; 396;Gigasmon;Gigasmon;; -397;Grumblemon;Grumblemon;; -398;Sakkakumon;Sakkakumon;; -399;Mercurymon;Mercurymon;; -400;Lobomon;Lobomon;; -401;KendoGarurumon;KendoGarurumon;; -402;BeoWolfmon;BeoWolfmon;; +397;Grumblemon;Grottemon;; +398;Sakkakumon;Sephirothmon;; +399;Mercurymon;Mercuremon;; +400;Lobomon;Wolfmon;; +401;KendoGarurumon;Garummon;; +402;BeoWolfmon;Beowolfmon;; 403;MagnaGarurumon;MagnaGarurumon;; 404;Strabimon;Strabimon;; -405;JagerLoweemon;JagerLoweemon;; +405;JagerLoweemon;KaiserLeomon;; 406;Duskmon;Duskmon;; -407;Velgemon;Velgemon;; -408;Rhihimon;Rhihimon;; -409;Loweemon;Loweemon;; +407;Velgemon;Velgrmon;; +408;Rhihimon;Raihimon;; +409;Loweemon;Löwemon;; 410;Yggdrasill_7D6;Yggdrasill_7D6;; -411;Wizardmon;Wizardmon;; -412;Garbagemon;Garbagemon;; +411;Wizardmon;Wizarmon;; +412;Garbagemon;Gerbemon;; 413;Kuwagamon;Kuwagamon;; -414;Centarumon;Centarumon;; +414;Centarumon;Centalmon;; 415;Shellmon;Shellmon;; -416;Cherrymon;Cherrymon;; +416;Cherrymon;Jyureimon;; 417;Digitamamon;Digitamamon;; -418;Deramon;Deramon;; -419;ShogunGekomon;ShogunGekomon;; +418;Deramon;Delumon;; +419;ShogunGekomon;TonosamaGekomon;; 420;Drimogemon;Drimogemon;; 421;Nanimon;Nanimon;; 422;Mojyamon;Mojyamon;; 423;Monochromon;Monochromon;; -424;Frigimon;Frigimon;; -425;Lillymon;Lillymon;; -426;Salamon;Salamon;; +424;Frigimon;Yukidarumon;; +425;Lillymon;Lilimon;; +426;Salamon;Plotmon;; 427;WaruMonzaemon;WaruMonzaemon;; 428;Kuramon;Kuramon;; 429;Tsumemon;Tsumemon;; 430;Keramon;Keramon;; 431;Chrysalimon;Chrysalimon;; 432;Infermon;Infermon;; -433;Diaboromon;Diaboromon;; +433;Diaboromon;Diablomon;; 434;Sunmon;Sunmon;; 435;Coronamon;Coronamon;; 436;Firamon;Firamon;; @@ -444,131 +444,131 @@ index;original;replace;excludeTerms;excludePaths 443;Dianamon;Dianamon;; 444;Babamon;Babamon;; 445;Agumon (2006);Agumon (2006);; -446;ProfessorAgumon;ProfessorAgumon;; +446;ProfessorAgumon;Agumon Hakase;; 447;Stingmon;Stingmon;; 448;Wormmon;Wormmon;; 449;Aquilamon;Aquilamon;; -450;Armadillomon;Armadillomon;; -451;Wendigomon;Wendigomon;; -452;Gwappamon;Gwappamon;; +450;Armadillomon;Armadiomon;; +451;Wendigomon;Wendimon;; +452;Gwappamon;Gawappamon;; 453;Sakuyamon;Sakuyamon;; -454;Shawjamon;Shawjamon;; +454;Shawjamon;Shawujinmon;; 455;Shakkoumon;Shakkoumon;; 456;Silphymon;Silphymon;; 457;Taomon;Taomon;; -458;Chirinmon;Chirinmon;; -459;Gallantmon Crimson Mode;Gallantmon Crimson Mode;; +458;Chirinmon;Tyilinmon;; +459;Gallantmon Crimson Mode;Dukemon Crimson Mode;; 460;Falcomon;Falcomon;; 461;Peckmon;Peckmon;; 462;Monodramon;Monodramon;; -463;Crowmon;Crowmon;; -464;Ravemon;Ravemon;; +463;Crowmon;Yatagaramon;; +464;Ravemon;Ravmon;; 465;Reppamon;Reppamon;; 466;SkullGreymon;SkullGreymon;; 467;Hawkmon;Hawkmon;; 468;Ankylomon;Ankylomon;; 469;Terriermon;Terriermon;; -470;Gargomon;Gargomon;; +470;Gargomon;Galgomon;; 471;Lopmon;Lopmon;; 472;Cherubimon (Evil);Cherubimon (Evil);; 473;Rapidmon;Rapidmon;; -474;MegaGargomon;MegaGargomon;; +474;MegaGargomon;SaintGalgomon;; 475;Renamon;Renamon;; 476;Kyubimon;Kyubimon;; 477;Cyberdramon;Cyberdramon;; 478;Justimon (Blitz Arm);Justimon (Blitz Arm);; -479;Beelzemon Blast Mode;Beelzemon Blast Mode;; +479;Beelzemon Blast Mode;Beelzebumon Blast Mode;; 480;Mamemon;Mamemon;; 481;MetalMamemon;MetalMamemon;; 482;PrinceMamemon;PrinceMamemon;; -483;Ogremon;Ogremon;; -484;Veedramon;Veedramon;; -485;AeroVeedramon;AeroVeedramon;; -486;Piedmon;Piedmon;; -487;Vegiemon;Vegiemon;; +483;Ogremon;Orgemon;; +484;Veedramon;V-dramon;; +485;AeroVeedramon;AeroV-dramon;; +486;Piedmon;Piemon;; +487;Vegiemon;Vegimon;; 488;Woodmon;Woodmon;; -489;Puppetmon;Puppetmon;; +489;Puppetmon;Pinochimon;; 490;Gigadramon;Gigadramon;; -491;Piximon;Piximon;; +491;Piximon;Piccolomon;; 492;Vademon;Vademon;; 493;Betamon;Betamon;; -494;Hi-Andromon;Hi-Andromon;; +494;Hi-Andromon;HiAndromon;; 495;Lucemon;Lucemon;; 496;Boltmon;Boltmon;; -497;SkullMeramon;SkullMeramon;; -498;GrapLeomon;GrapLeomon;; +497;SkullMeramon;DeathMeramon;; +498;GrapLeomon;GrappuLeomon;; 499;SaberLeomon;SaberLeomon;; -500;IceLeomon;IceLeomon;; -501;Pabumon;Pabumon;; -502;Motimon;Motimon;; +500;IceLeomon;Panjyamon;; +501;Pabumon;Bubbmon;; +502;Motimon;Mochimon;; 503;Lucemon Satan Mode;Lucemon Satan Mode;; 504;Whamon;Whamon;; 505;Parrotmon;Parrotmon;; 506;Gekomon;Gekomon;; 507;Susanoomon;Susanoomon;; -508;Fake ProfessorAgumon;Fake ProfessorAgumon;; +508;Fake ProfessorAgumon;NiseAgumon Hakase;; 509;Lucemon Larva;Lucemon Larva;; -510;Alphamon Ouryuken;Alphamon Ouryuken;; -511;Millenniummon;Millenniummon;; -512;ZeedMillenniummon;ZeedMillenniummon;; -513;MoonMillenniummon;MoonMillenniummon;; +510;Alphamon Ouryuken;Alphamon: Ouryuken;; +511;Millenniummon;Millenniumon;; +512;ZeedMillenniummon;ZeedMillenniumon;; +513;MoonMillenniummon;MoonMillenniumon;; 514;Belphemon Sleep Mode;Belphemon Sleep Mode;; 515;KingEtemon;KingEtemon;; -516;ShogunMamemon;ShogunMamemon;; +516;ShogunMamemon;TonosamaMamemon;; 517;BigMamemon;BigMamemon;; 518;CatchMamemon;CatchMamemon;; 519;Fugamon;Fugamon;; -520;Shamanmon;Shamanmon;; +520;Shamanmon;Shamamon;; 521;GoldNumemon;GoldNumemon;; 522;PlatinumSukamon;PlatinumSukamon;; -523;SkullScorpiomon;SkullScorpiomon;; -524;Ebemon;Ebemon;; +523;SkullScorpiomon;Scorpiomon;; +524;Ebemon;EBEmon;; 525;Gazimon;Gazimon;; 526;Crabmon;Crabmon;; -527;Cerberusmon;Cerberusmon;; -528;Gotsumon;Gotsumon;; -529;Thundermon;Thundermon;; -530;SkullMammothmon;SkullMammothmon;; +527;Cerberusmon;Cerberumon;; +528;Gotsumon;Gottsumon;; +529;Thundermon;Thunderballmon;; +530;SkullMammothmon;SkullMammon;; 531;Starmon;Starmon;; 532;Titamon;Titamon;; 533;Triceramon;Triceramon;; 534;Plesiomon;Plesiomon;; -535;Mammothmon;Mammothmon;; -536;UltimateBrachiomon;UltimateBrachiomon;; -537;Fanbeemon;Fanbeemon;; -538;TobuCatmon;TobuCatmon;; +535;Mammothmon;Mammon;; +536;UltimateBrachiomon;UltimateBrachimon;; +537;Fanbeemon;Funbeemon;; +538;TobuCatmon;Tobucatmon;; 539;Dinotigermon;Dinotigermon;; 540;ClavisAngemon;ClavisAngemon;; 541;MetalPiranimon;MetalPiranimon;; 542;Rhinomon X;Rhinomon X;; -543;Pteramon X;Pteramon X;; +543;Pteramon X;Pteranomon X;; 544;Otamamon X;Otamamon X;; 545;Gesomon X;Gesomon X;; -546;Syakomon X;Syakomon X;; +546;Syakomon X;Shakomon X;; 547;Dobermon X;Dobermon X;; 548;Otamamon;Otamamon;; 549;Gesomon;Gesomon;; -550;Syakomon;Syakomon;; +550;Syakomon;Shakomon;; 551;Dobermon;Dobermon;; 552;Elecmon;Elecmon;; -553;Penguinmon;Penguinmon;; +553;Penguinmon;Penmon;; 554;Kunemon;Kunemon;; -555;Tsunomon;Tsunomon;; +555;Tsunomon;Tunomon;; 556;Punimon;Punimon;; 557;Tanemon;Tanemon;; -558;Kokatorimon;Kokatorimon;; +558;Kokatorimon;Cockatrimon;; 559;Unimon;Unimon;; -560;Ninjamon;Ninjamon;; +560;Ninjamon;Igamon;; 561;Coelamon;Coelamon;; 562;Giromon;Giromon;; 563;Nyokimon;Nyokimon;; 564;Yokomon;Yokomon;; -565;Pichimon;Pichimon;; +565;Pichimon;Pitchmon;; 566;Bukamon;Bukamon;; 567;Nyaromon;Nyaromon;; 568;YukimiBotamon;YukimiBotamon;; -569;Chibomon;Chibomon;; -570;DemiVeemon;DemiVeemon;; +569;Chibomon;Chicomon;; +570;DemiVeemon;Chibimon;; 571;Pururumon;Pururumon;; 572;Poromon;Poromon;; 573;Tsubumon;Tsubumon;; @@ -579,11 +579,11 @@ index;original;replace;excludeTerms;excludePaths 578;Gummymon;Gummymon;; 579;Relemon;Relemon;; 580;Viximon;Viximon;; -581;Conomon;Conomon;; -582;Kokomon;Kokomon;; -583;MetalKoromon;MetalKoromon;; +581;Conomon;Cocomon;; +582;Kokomon;Chocomon;; +583;MetalKoromon;Choromon;; 584;Kotemon;Kotemon;; 585;Chapmon;Chapmon;; -586;DemiMeramon;DemiMeramon;; -587;Calumon;Calumon;; -588;Kapurimon;Kapurimon;; \ No newline at end of file +586;DemiMeramon;PetitMeramon;; +587;Calumon;Culumon;; +588;Kapurimon;Caprimon;; \ No newline at end of file From 5f39d9b03ef651dedf8e67bc1de93c6e178635a7 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Wed, 15 May 2024 22:33:28 +0200 Subject: [PATCH 16/54] fixed multipart name recognition --- .../decode/randomizer/settings/NamingSettings.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index 9f25019..a27b5e8 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -98,7 +98,7 @@ private static TermType classifyTerm(String term, String path) { if (!digiNamePaths.contains(path)) { return TermType.GENERAL; } - return term.matches("[a-z][A-Z]") ? TermType.DIGIMONMULTI : TermType.DIGIMON; + return term.matches(".*[a-z][A-Z].*") ? TermType.DIGIMONMULTI : TermType.DIGIMON; } private static void btxSwitch(BTXEntry btxA, BTXEntry btxB) { @@ -184,6 +184,7 @@ public void replaceExact(BTXPayload btx, String path) { BTXEntry entry = btx.getEntryById(index).get(); if (!original.equals(replacement)) { entry.setString(replacement); + System.out.println(original + " -> " + replacement); } // Exact replacements block any future replacements on this particular line. insertRepData(path, -1, Integer.MAX_VALUE, 0); From a87ac6e06c390b5bc177d6c4a72c32dd62848db4 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Wed, 15 May 2024 22:37:43 +0200 Subject: [PATCH 17/54] Digi-Egg -> Digimental --- .../decode/randomizer/renamingPresets/KeyItemNames.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/KeyItemNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/KeyItemNames.csv index aefd5f0..da2219c 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/KeyItemNames.csv +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/KeyItemNames.csv @@ -64,7 +64,7 @@ index;original;replace;excludeTerms;excludePaths 62;Crest of Sincerity;Crest of Sincerity;; 63;Crest of Hope;Crest of Hope;; 64;Crest of Light;Crest of Light;; -65;Golden Digi-Egg;Golden Digi-Egg;; +65;Golden Digi-Egg;Golden Digimental;; 66;Bancho's Fighting Spirit;Bancho's Fighting Spirit;; 67;Training Bomb;Training Bomb;; 68;Trash Bag;Trash Bag;; From 47ab0e36c3257ae534103523fb153d442ae625d8 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Thu, 16 May 2024 12:48:40 +0200 Subject: [PATCH 18/54] serious general text replacement --- .../randomizer/settings/NamingSettings.java | 171 +++++++++++++----- 1 file changed, 125 insertions(+), 46 deletions(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index a27b5e8..d4051aa 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -44,9 +44,16 @@ import javafx.scene.control.TitledPane; import javafx.scene.control.Accordion; import javafx.scene.layout.VBox; + +import java.nio.file.Path; + import net.digimonworld.decode.randomizer.RandomizationContext; import net.digimonworld.decode.randomizer.utils.JavaFXUtils; import net.digimonworld.decode.randomizer.DecodeRandomizer; +import net.digimonworld.decodetools.core.Access; +import net.digimonworld.decodetools.core.FileAccess; +import net.digimonworld.decodetools.res.ResPayload; +import net.digimonworld.decodetools.res.ResPayload.Payload; public class NamingSettings implements Setting { @@ -55,19 +62,20 @@ public class NamingSettings implements Setting { private final BooleanProperty randomizeEnabled = new SimpleBooleanProperty(); private final BooleanProperty camelCase = new SimpleBooleanProperty(true); private final BooleanProperty manualCsv = new SimpleBooleanProperty(); - private final BooleanProperty replaceAll = new SimpleBooleanProperty(); + private final BooleanProperty replaceAll = new SimpleBooleanProperty(true); private final BooleanProperty pickle = new SimpleBooleanProperty(false); private final BooleanProperty ogre = new SimpleBooleanProperty(false); private final BooleanProperty blackPrefix = new SimpleBooleanProperty(false); private final Map propertyMap = new HashMap<>(); private final Map randoMap = new HashMap<>(); private final List randoTypes = List.of("Digimon Names", "Finisher Names", "Skill Names", "Character Names", "Item Names", "Medal Names"); + private final Map repMap = new HashMap<>(); private Accordion mainAc; /** * Visualization of a replacement map: * - * { "part0/arcv/Keep/LanguageKeep_jp.res/11:12": [ [0,4,2], [8,13,-1] ] } + * { "part0\arcv\Keep\LanguageKeep_jp.res\11:12" : [ [0,4,2], [8,13,-1] ] } * * Path schema works like this: * @@ -94,7 +102,7 @@ protected enum TermType { private static TermType classifyTerm(String term, String path) { //These files contain digimon names List digiNamePaths = List.of(11, 27, 28).stream() - .map(n -> "part0/arcv/Keep/LanguageKeep_jp.res/" + n).collect(Collectors.toList()); + .map(n -> "part0\\arcv\\Keep\\LanguageKeep_jp.res\\" + n).collect(Collectors.toList()); if (!digiNamePaths.contains(path)) { return TermType.GENERAL; } @@ -113,15 +121,19 @@ private class Replacement { public String original; public String replacement; private final List excludedTerms; - private List disabledPaths; + private final List disabledPaths = List.of(); private final int matchLength; private int index = -1; + private final boolean diffS; + private final boolean diffArt; + private final int baseOffset; public boolean global = true; + private final List vow = List.of("A", "E", "I", "O", "U", "Ü", "Ö", "Ä"); private class PathPosition { public int line = 0; - public int col = 0; + public int col = -1; public String path = ""; public boolean valid = true; @@ -134,8 +146,8 @@ public PathPosition(String pathDescriptor) { String[] splitter = pathDescriptor.split(":", -1); this.path = splitter[0]; this.line = Integer.parseInt(splitter[1]); - if (splitter[2] == null) { - this.col = 0; + if (splitter.length == 1) { + this.col = -1; } else { this.col = Integer.parseInt(splitter[2]); } @@ -168,7 +180,13 @@ public Replacement(String index, String original, String replacement, String raw this.replacement = this.replacement.replaceAll("([a-z])([A-Z])", "$1 $2"); } + this.diffS = replacement.endsWith("s") != original.endsWith("s"); + this.diffArt = vow.contains(this.replacement.substring(0, 1)) != vow.contains(this.original.substring(0, 1)); + this.matchLength = original.length(); + + this.baseOffset = replacement.length() - original.length(); + this.excludedTerms = List.of(rawExcludedTerms.split(",")); String[] pathos = rawDisabledPaths.split(","); for (String p : pathos) { @@ -190,14 +208,53 @@ public void replaceExact(BTXPayload btx, String path) { insertRepData(path, -1, Integer.MAX_VALUE, 0); } + private int correctApostrophe(BTXEntry btx, int start, int end) { + if (!diffS) { + return 0; + } + String text = btx.getString(); + if (text.length() == end) { + return 0; + } + + return 0; + } + + private int correctArticle(BTXEntry btx, int start, int end) { + if (!diffArt || start == 0) { + return 0; + } + return 0; + } + + public void replaceDynamic(BTXEntry btx, String path) { + String origText = btx.getString(); + int matchStart = findInText(origText, path); + if (matchStart == -1) { + return; + } + int matchEnd = matchStart + matchLength; + btx.setString(origText.substring(0, matchStart) + replacement + origText.substring(matchEnd, origText.length())); + + int artOff = correctArticle(btx, matchStart, matchEnd); + int apOff = correctApostrophe(btx, matchStart, matchEnd); + + matchStart = matchStart + artOff; + matchEnd = matchEnd + apOff; + int finalOffset = baseOffset + artOff + apOff; + System.out.println(finalOffset); + System.out.println(origText.substring(matchStart, matchEnd) + " -> " + btx.getString().substring(matchStart, matchEnd + finalOffset)); + + insertRepData(path, matchStart, matchEnd, finalOffset); + } + private int realPosition(String path, int index) { ArrayList repls = replacementMap.get(path); if (repls == null) { return index; } int finalOffset = 0; - for (int i = 0; i < repls.size(); i++) { - int[] current = repls.get(i); + for (int[] current : repls) { int start = current[0]; int offset = current[2]; if (start > index) { @@ -214,11 +271,11 @@ private boolean isOverlapping(String path, int index) { return false; } int pos = realPosition(path, index); - for (int i = 0; i < repls.size(); i++) { - int[] current = repls.get(i); + for (int[] current : repls) { int start = current[0]; int end = current[1]; - if (start > pos) { + // If the start position is bigger than the end of our match we don't need to check the rest + if (start > pos + matchLength) { break; } if (end < pos) { @@ -238,6 +295,7 @@ private void insertRepData(String path, int start, int end, int offset) { return; } ArrayList repls = replacementMap.get(path); + //Keeping the list of replacements of each BTX well ordered by inserting it before the first bigger start value for (int i = 0; i < repls.size(); i++) { int current = repls.get(i)[0]; if (current > start) { @@ -249,8 +307,7 @@ private void insertRepData(String path, int start, int end, int offset) { } private boolean termExclusion(String text, int index) { - for (int i = 0; i < excludedTerms.size(); i++) { - String term = excludedTerms.get(i); + for (String term : excludedTerms) { int exDex = text.indexOf(term); if (exDex == -1) { continue; @@ -264,30 +321,18 @@ private boolean termExclusion(String text, int index) { } private boolean pathExclusion(String text, String path, int index) { - int[] posData = getLinePos(text, realPosition(path, index)); - int line = posData[0]; - int col = posData[1]; - for (int i = 0; i < disabledPaths.size(); i++) { - PathPosition p = disabledPaths.get(i); - if (p.path.equals(path) && p.line == line && (p.col == 0 || p.col == col)) { + for (PathPosition p : disabledPaths) { + if (p.path.equals(path) && (p.col == -1 || p.col == index)) { return true; } } return false; } - private int[] getLinePos(String text, int index) { - String subtext = text.substring(0, index); - List splitlist = List.of(subtext.split("\n", -1)); - int lineNo = splitlist.size(); - int linePos = index - subtext.lastIndexOf("\n"); - - return new int[]{lineNo, linePos}; - } - - private boolean findInText(String text, String path) { + private int findInText(String text, String path) { int idx = text.indexOf(original); - return !(idx == -1 || termExclusion(text, idx) || pathExclusion(text, path, idx) || isOverlapping(path, idx)); + //If any of the exclusion + return (idx == -1 || termExclusion(text, idx) || pathExclusion(text, path, idx) || isOverlapping(path, idx)) ? -1 : idx; } } @@ -328,7 +373,7 @@ private static EventHandler buildHandler(String resourcePath, File List fls = Utils.listFiles(new File(origin.getFile())); fls.forEach(f -> { try { - Files.copy(f.toPath(), new File(targetDir.toString() + "/" + f.getName()).toPath(), StandardCopyOption.REPLACE_EXISTING); + Files.copy(f.toPath(), Path.of(targetDir.toString() + "\\" + f.getName()), StandardCopyOption.REPLACE_EXISTING); } catch (IOException exc) { exc.printStackTrace(); } @@ -355,7 +400,7 @@ public TitledPane create(GlobalKeepData data, LanguageKeep language) { randoPane.setId("random"); pane.setCollapsible(false); - File csvDir = new File("./renamingPresets/"); + File csvDir = new File(".\\renamingPresets\\"); manualCsv.set(csvDir.exists() && csvDir.isDirectory() && csvDir.listFiles().length != 0); ToggleSwitch camel = JavaFXUtils.buildToggleSwitch("camelCase names", Optional.empty(), Optional.of(camelCase)); @@ -391,7 +436,7 @@ public TitledPane create(GlobalKeepData data, LanguageKeep language) { e.printStackTrace(); } - File destFile = new File("./renamingPresets/" + s.substring(3) + ".csv"); + File destFile = new File(".\\renamingPresets\\" + s.substring(3) + ".csv"); try (BufferedWriter writer = new BufferedWriter(new FileWriter(destFile, StandardCharsets.UTF_8))) { writer.write("index;original;replace;excludeTerms;excludePaths\n"); @@ -403,7 +448,6 @@ public TitledPane create(GlobalKeepData data, LanguageKeep language) { writer.write(string); } catch (IOException e) { - e.printStackTrace(); } }); }; @@ -411,7 +455,7 @@ public TitledPane create(GlobalKeepData data, LanguageKeep language) { Button camelExp = new Button("Export CSVs for restoration preset"); Button curExp = new Button("Export CSVs for current names"); curExp.setOnAction(rawExportHandler); - camelExp.setOnAction(buildHandler("renamingPresets/", csvDir)); + camelExp.setOnAction(buildHandler("renamingPresets\\", csvDir)); restoreBox.getChildren().addAll( JavaFXUtils.buildToggleSwitch("Enabled", Optional.empty(), Optional.of(renameEnabled)), @@ -445,8 +489,8 @@ private class PathResolver { public PathResolver(RandomizationContext context) { this.context = context; - this.shortcuts.put("keep", "Keep/LanguageKeep_jp.res"); - this.shortcuts.put("map", "map/text"); + this.shortcuts.put("keep", "Keep\\LanguageKeep_jp.res"); + this.shortcuts.put("map", "map\\text"); this.keepMap.put("DigimonNames", "11"); this.keepMap.put("ItemNames", "0"); this.keepMap.put("KeyItemNames", "3"); @@ -466,15 +510,15 @@ public Tuple resolve(String path) throws ParseException { ArrayList frag = new ArrayList<>( List.of((keepMap.containsKey(path) ? ("keep-" + keepMap.get(path)) : path).split("-"))); int btxIndex = Integer.parseInt(frag.remove(frag.size() - 1)); - String finalPath = "part0/arcv/" + frag.stream() + String finalPath = "part0\\arcv\\" + frag.stream() .map(s -> shortcuts.containsKey(s) ? shortcuts.get(s) : s) - .collect(Collectors.joining("/")); + .collect(Collectors.joining("\\")); try { NormalKCAP pk = (NormalKCAP) context.getFile(finalPath).get(); if (frag.get(frag.size() - 1).equals("keep")) { pk = (NormalKCAP) pk.get(0); } - return new Tuple<>(finalPath + "/" + btxIndex, (BTXPayload) pk.get(btxIndex)); + return new Tuple<>(finalPath + "\\" + btxIndex, (BTXPayload) pk.get(btxIndex)); } catch (NoSuchElementException exc) { throw new ParseException("csv not correctly mapped", 0); } @@ -485,7 +529,6 @@ private void targetedBtxReplacement(BTXPayload btx, File f, String path) { System.out.println(f.getName()); try { List lines = Files.readAllLines(f.toPath(), StandardCharsets.UTF_8); - ArrayList reps = new ArrayList<>(); for (int i = 0; i < lines.size(); i++) { if (i == 0) { continue; @@ -497,8 +540,9 @@ private void targetedBtxReplacement(BTXPayload btx, File f, String path) { } Replacement rep = new Replacement(entries[0], entries[1], entries[2], entries[3], entries[4], path); rep.replaceExact(btx, path); - if (replaceAll.get() && rep.global) { - reps.add(rep); + //By adding only the first replacement of a word to the global replacement list, we only need to the global rules once. + if (replaceAll.get() && rep.global && !repMap.containsKey(rep.original)) { + repMap.put(rep.original, rep); } } } catch (Exception e) { @@ -515,7 +559,7 @@ public void randomize(RandomizationContext context) { PathResolver res = new PathResolver(context); if (mode.equals("restore")) { - File manualCsvDir = new File("./renamingPresets/"); + File manualCsvDir = new File(".\\renamingPresets\\"); File origin; if (manualCsv.get() && manualCsvDir.exists()) { origin = manualCsvDir; @@ -523,7 +567,7 @@ public void randomize(RandomizationContext context) { origin = new File(DecodeRandomizer.class.getResource("renamingPresets/").getFile()); } List presets = List.of(origin.listFiles()); - presets.stream().forEach(p -> { + presets.forEach(p -> { String pName = p.getName(); try { Tuple foundBtx = res.resolve(pName.substring(0, pName.length() - 4)); @@ -537,6 +581,41 @@ public void randomize(RandomizationContext context) { return; } + File startDir = new File(".\\working\\part0\\arcv\\"); + + //Shamelessly copied from the DecodeTools CSV export + Utils.listFiles(startDir).stream() + //Everything that could contain BTX + .filter(s -> s.getName().endsWith(".bin") || s.getName().endsWith(".pack") || s.getName().endsWith("_jp.res")).forEach(fA -> { + + try (Access b = new FileAccess(fA)) { + ResPayload f = ResPayload.craft(b); + var elements = f.getElementsWithType(Payload.BTX); + if (elements.isEmpty()) { + return; + } + Path pathos = fA.toPath(); + Path pString = pathos.subpath(2, pathos.getNameCount()); + System.out.println("Replacing text in " + pString.toString()); + + for (int i = 0; i < elements.size(); i++) { + var payload = (BTXPayload) elements.get(i); + String partialPath = pathos.toString() + "\\" + (i); + payload.getEntries().forEach(bt -> { + repMap.values().forEach(rep -> { + rep.replaceDynamic(bt.getValue(), partialPath + ":" + bt.getKey()); + }); + + }); + } + } catch (Exception e) { + e.printStackTrace(); + } + + }); + + repMap.clear(); + } else { Random rand = new Random(context.getInitialSeed() * "ShuffleTerms".hashCode()); randoTypes.stream().filter(k -> randoMap.get(k).get()).map(s -> s.replaceAll(" ", "")).forEach(name -> { From a6ffcc7679aa384560df2dd90260dd4ed033b338 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Thu, 16 May 2024 14:33:01 +0200 Subject: [PATCH 19/54] Fix File resolution --- .../randomizer/settings/NamingSettings.java | 74 +++++++++++-------- 1 file changed, 42 insertions(+), 32 deletions(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index d4051aa..5d1be08 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -205,7 +205,7 @@ public void replaceExact(BTXPayload btx, String path) { System.out.println(original + " -> " + replacement); } // Exact replacements block any future replacements on this particular line. - insertRepData(path, -1, Integer.MAX_VALUE, 0); + insertRepData(path + ":" + index, -1, Integer.MAX_VALUE, 0); } private int correctApostrophe(BTXEntry btx, int start, int end) { @@ -233,6 +233,7 @@ public void replaceDynamic(BTXEntry btx, String path) { if (matchStart == -1) { return; } + int matchEnd = matchStart + matchLength; btx.setString(origText.substring(0, matchStart) + replacement + origText.substring(matchEnd, origText.length())); @@ -242,8 +243,7 @@ public void replaceDynamic(BTXEntry btx, String path) { matchStart = matchStart + artOff; matchEnd = matchEnd + apOff; int finalOffset = baseOffset + artOff + apOff; - System.out.println(finalOffset); - System.out.println(origText.substring(matchStart, matchEnd) + " -> " + btx.getString().substring(matchStart, matchEnd + finalOffset)); + System.out.println(path + " | " + origText.substring(matchStart, matchEnd) + " -> " + btx.getString().substring(matchStart, matchEnd + finalOffset)); insertRepData(path, matchStart, matchEnd, finalOffset); } @@ -270,15 +270,16 @@ private boolean isOverlapping(String path, int index) { if (repls == null) { return false; } + int pos = realPosition(path, index); for (int[] current : repls) { int start = current[0]; int end = current[1]; // If the start position is bigger than the end of our match we don't need to check the rest - if (start > pos + matchLength) { + if (start <= pos + (matchLength - 1)) { break; } - if (end < pos) { + if (end >= pos && start < pos) { return true; } @@ -506,6 +507,14 @@ public PathResolver(RandomizationContext context) { this.keepMap.put("CardSetNames", "30"); } + public ResPayload resolveRaw(String finalPath) throws IOException { + try { + return context.getFile(finalPath).get(); + } catch (NoSuchElementException exc) { + throw new IOException("Path " + finalPath + " does not exist."); + } + } + public Tuple resolve(String path) throws ParseException { ArrayList frag = new ArrayList<>( List.of((keepMap.containsKey(path) ? ("keep-" + keepMap.get(path)) : path).split("-"))); @@ -583,36 +592,37 @@ public void randomize(RandomizationContext context) { File startDir = new File(".\\working\\part0\\arcv\\"); - //Shamelessly copied from the DecodeTools CSV export Utils.listFiles(startDir).stream() //Everything that could contain BTX - .filter(s -> s.getName().endsWith(".bin") || s.getName().endsWith(".pack") || s.getName().endsWith("_jp.res")).forEach(fA -> { - - try (Access b = new FileAccess(fA)) { - ResPayload f = ResPayload.craft(b); - var elements = f.getElementsWithType(Payload.BTX); - if (elements.isEmpty()) { - return; - } - Path pathos = fA.toPath(); - Path pString = pathos.subpath(2, pathos.getNameCount()); - System.out.println("Replacing text in " + pString.toString()); - - for (int i = 0; i < elements.size(); i++) { - var payload = (BTXPayload) elements.get(i); - String partialPath = pathos.toString() + "\\" + (i); - payload.getEntries().forEach(bt -> { - repMap.values().forEach(rep -> { - rep.replaceDynamic(bt.getValue(), partialPath + ":" + bt.getKey()); - }); - - }); - } - } catch (Exception e) { - e.printStackTrace(); - } + .filter(s + -> //s.getName().endsWith(".pack") || + s.getName().endsWith("_jp.res") + ).forEach(fA -> { + + try { + Path pathos = fA.toPath(); + Path pString = pathos.subpath(2, pathos.getNameCount()); + + var elements = res.resolveRaw(pString.toString()).getElementsWithType(Payload.BTX); + if (elements.isEmpty()) { + return; + } + + for (int i = 0; i < elements.size(); i++) { + var payload = (BTXPayload) elements.get(i); + String partialPath = pString.toString() + "\\" + (i); + payload.getEntries().forEach(bt -> { + repMap.values().forEach(rep -> { + rep.replaceDynamic(bt.getValue(), partialPath + ":" + bt.getKey()); + }); + + }); + } + } catch (IOException e) { + e.printStackTrace(); + } - }); + }); repMap.clear(); From f78dec9350ae75870f62554d3c45cc1899a770f9 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Thu, 16 May 2024 17:09:52 +0200 Subject: [PATCH 20/54] cleanup, better exclusions --- .../randomizer/settings/NamingSettings.java | 49 ++++++++++--------- .../renamingPresets/CharacterNames.csv | 2 +- .../randomizer/renamingPresets/ItemNames.csv | 2 +- 3 files changed, 28 insertions(+), 25 deletions(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index 5d1be08..7ec68f6 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -9,6 +9,7 @@ import java.util.stream.Collectors; import java.io.BufferedWriter; import java.nio.file.StandardCopyOption; +import java.nio.file.Path; import java.nio.file.Files; import java.io.File; import java.io.FileWriter; @@ -18,6 +19,8 @@ import java.nio.charset.StandardCharsets; import java.text.ParseException; import java.util.NoSuchElementException; +import java.util.Comparator; +import java.util.stream.Collector; import org.controlsfx.control.ToggleSwitch; @@ -28,11 +31,13 @@ import net.digimonworld.decodetools.data.keepdata.LanguageKeep; import net.digimonworld.decodetools.res.kcap.NormalKCAP; import net.digimonworld.decodetools.res.payload.BTXPayload; - import net.digimonworld.decodetools.core.DeleteDirectoryFileVisitor; import net.digimonworld.decodetools.core.Tuple; import net.digimonworld.decodetools.core.Utils; import net.digimonworld.decodetools.res.payload.BTXPayload.BTXEntry; +import net.digimonworld.decodetools.res.ResPayload; +import net.digimonworld.decodetools.res.ResPayload.Payload; + import javafx.beans.property.BooleanProperty; import javafx.beans.property.SimpleBooleanProperty; import javafx.event.ActionEvent; @@ -45,15 +50,9 @@ import javafx.scene.control.Accordion; import javafx.scene.layout.VBox; -import java.nio.file.Path; - import net.digimonworld.decode.randomizer.RandomizationContext; import net.digimonworld.decode.randomizer.utils.JavaFXUtils; import net.digimonworld.decode.randomizer.DecodeRandomizer; -import net.digimonworld.decodetools.core.Access; -import net.digimonworld.decodetools.core.FileAccess; -import net.digimonworld.decodetools.res.ResPayload; -import net.digimonworld.decodetools.res.ResPayload.Payload; public class NamingSettings implements Setting { @@ -187,7 +186,7 @@ public Replacement(String index, String original, String replacement, String raw this.baseOffset = replacement.length() - original.length(); - this.excludedTerms = List.of(rawExcludedTerms.split(",")); + this.excludedTerms = List.of(rawExcludedTerms.split(",")).stream().map(p -> p.replaceAll("\\$", original)).collect(Collectors.toList()); String[] pathos = rawDisabledPaths.split(","); for (String p : pathos) { if (p.toLowerCase().equals("all")) { @@ -216,7 +215,6 @@ private int correctApostrophe(BTXEntry btx, int start, int end) { if (text.length() == end) { return 0; } - return 0; } @@ -276,13 +274,12 @@ private boolean isOverlapping(String path, int index) { int start = current[0]; int end = current[1]; // If the start position is bigger than the end of our match we don't need to check the rest - if (start <= pos + (matchLength - 1)) { + if (start >= pos + (matchLength - 1)) { break; } if (end >= pos && start < pos) { return true; } - } return false; } @@ -309,6 +306,12 @@ private void insertRepData(String path, int start, int end, int offset) { private boolean termExclusion(String text, int index) { for (String term : excludedTerms) { + if (term.equals("[]")) { + if (!text.substring(Math.max(0, index - 2), Math.min(text.length(), index + 2)).matches(".*\b" + original + "\b.*")) { + return true; + } + continue; + } int exDex = text.indexOf(term); if (exDex == -1) { continue; @@ -439,14 +442,12 @@ public TitledPane create(GlobalKeepData data, LanguageKeep language) { File destFile = new File(".\\renamingPresets\\" + s.substring(3) + ".csv"); try (BufferedWriter writer = new BufferedWriter(new FileWriter(destFile, StandardCharsets.UTF_8))) { - writer.write("index;original;replace;excludeTerms;excludePaths\n"); String string = myList.stream() .filter(str -> !skippable.contains(str.getValue())) .map(str -> str.getKey().toString() + ';' + str.getValue() + ";" + str.getValue()) .collect(Collectors.joining(";;\n")) + ";;"; - writer.write(string); } catch (IOException e) { } @@ -460,9 +461,9 @@ public TitledPane create(GlobalKeepData data, LanguageKeep language) { restoreBox.getChildren().addAll( JavaFXUtils.buildToggleSwitch("Enabled", Optional.empty(), Optional.of(renameEnabled)), + repAll, manCs, camel, - repAll, blackCheck, orgeCheck, pickleCheck, @@ -592,30 +593,31 @@ public void randomize(RandomizationContext context) { File startDir = new File(".\\working\\part0\\arcv\\"); + //Sorting + List sortedReps = repMap.values().stream().sorted(Comparator.comparing(v -> v.original.length())).collect(Collectors.toList()); + Utils.listFiles(startDir).stream() //Everything that could contain BTX - .filter(s - -> //s.getName().endsWith(".pack") || - s.getName().endsWith("_jp.res") + .filter(s -> s.getName().endsWith("_jp.res") + || s.getName().endsWith(".pack") ).forEach(fA -> { try { - Path pathos = fA.toPath(); - Path pString = pathos.subpath(2, pathos.getNameCount()); + Path longPath = fA.toPath(); + Path normalPath = longPath.subpath(2, longPath.getNameCount()); - var elements = res.resolveRaw(pString.toString()).getElementsWithType(Payload.BTX); + var elements = res.resolveRaw(normalPath.toString()).getElementsWithType(Payload.BTX); if (elements.isEmpty()) { return; } for (int i = 0; i < elements.size(); i++) { var payload = (BTXPayload) elements.get(i); - String partialPath = pString.toString() + "\\" + (i); + String partialPath = normalPath.toString() + "\\" + (i); payload.getEntries().forEach(bt -> { - repMap.values().forEach(rep -> { + sortedReps.forEach(rep -> { rep.replaceDynamic(bt.getValue(), partialPath + ":" + bt.getKey()); }); - }); } } catch (IOException e) { @@ -625,6 +627,7 @@ public void randomize(RandomizationContext context) { }); repMap.clear(); + replacementMap.clear(); } else { Random rand = new Random(context.getInitialSeed() * "ShuffleTerms".hashCode()); diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CharacterNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CharacterNames.csv index 53ee7d6..f9b6b60 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CharacterNames.csv +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CharacterNames.csv @@ -21,7 +21,7 @@ index;original;replace;excludeTerms;excludePaths 1021;Salaryman A;Salaryman A;; 1022;Salaryman B;Salaryman B;; 1023;Lilimonzaemon;Lilimonzaemon;; -1024;Tai;Taichi;; +1024;Tai;Taichi;[]; 1025;Matt;Yamato;; 1026;Sora;Sora;; 1027;Davis;Daisuke;; diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/ItemNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/ItemNames.csv index f68d6dc..c9fadcc 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/ItemNames.csv +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/ItemNames.csv @@ -321,7 +321,7 @@ index;original;replace;excludeTerms;excludePaths 341;Evil Plush;Evil Plush;; 342;Fake Royalty Certificate;Fake Royalty Certificate;; 343;Staff of the Shrine Priestess;Staff of the Shrine Priestess;; -344;Emperial Dragon's Old Cannon;Emperial Dragon's Old Cannon;; +344;Emperial Dragon's Old Cannon;Imperial Dragon's Old Cannon;; 345;Omega Blade;Omega Blade;; 346;Jet-Black Magic Circle;Jet-Black Magic Circle;; 347;Blue Swiftness Armour;Blue Swiftness Armour;; From e2048a20c4e57f06ac1c172aa70729ad48c4ef8c Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Thu, 16 May 2024 17:11:24 +0200 Subject: [PATCH 21/54] minimize csv --- .../renamingPresets/AccessoryNames.csv | 126 +----- .../randomizer/renamingPresets/CardNames1.csv | 394 ------------------ .../randomizer/renamingPresets/CardNames2.csv | 394 ------------------ .../renamingPresets/CardSetNames.csv | 82 +--- .../renamingPresets/CharacterNames.csv | 39 +- .../renamingPresets/DigimonNames.csv | 148 +------ .../renamingPresets/FinisherNames.csv | 141 +------ .../renamingPresets/GlossaryNames.csv | 97 +---- .../randomizer/renamingPresets/MedalNames.csv | 101 +---- .../renamingPresets/NatureNames.csv | 16 - .../randomizer/renamingPresets/SkillNames.csv | 62 --- 11 files changed, 13 insertions(+), 1587 deletions(-) delete mode 100644 src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/NatureNames.csv delete mode 100644 src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/SkillNames.csv diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/AccessoryNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/AccessoryNames.csv index 445664f..99295f9 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/AccessoryNames.csv +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/AccessoryNames.csv @@ -1,133 +1,9 @@ index;original;replace;excludeTerms;excludePaths -1;Red Ribbon;Red Ribbon;; -4;Angel Ribbon;Angel Ribbon;; -8;Rose Bow;Rose Bow;; -10;Grey Tail;Grey Tail;; -12;Guil Tail;Guil Tail;; -15;Baste Tail;Baste Tail;; -16;Wanya Tail;Wanya Tail;; -18;Rena Tail;Rena Tail;; -19;Top Hat;Top Hat;; -25;Soul Hat;Soul Hat;; -26;Santa Hat;Santa Hat;; -27;Phantom Turban;Phantom Turban;; -28;Tao Eboshi;Tao Eboshi;; -29;Golden Crown;Golden Crown;; -30;Silver Tiara;Silver Tiara;; -31;Wizard Hat;Wizard Hat;; -32;Burger Hat;Burger Hat;; -33;Chef Hat;Chef Hat;; 35;Antyla Ears;Andira Ears;; -37;Guil Ears;Guil Ears;; -38;Baste Ears;Baste Ears;; -39;Wanya Ears;Wanya Ears;; -41;Rena Ears;Rena Ears;; -43;Grey Horn;Grey Horn;; -44;GeoGrey Horn;GeoGrey Horn;; -47;Reindeer Horns;Reindeer Horns;; -48;Ete Shades;Ete Shades;; -50;Joe's Glasses;Joe's Glasses;; -54;Bike Goggles;Bike Goggles;; 55;Tai's Goggles;Taichi's Goggles;; 56;Davis' Goggles;Daisuke's Goggles;; -57;Takato's Goggles;Takato's Goggles;; -58;Takuya's Goggles;Takuya's Goggles;; -59;Taiki's Goggles;Taiki's Goggles;; -61;Doruru Drill;Doruru Drill;; -62;Red Scarf;Red Scarf;; -63;Bandana;Bandana;; -66;Rena Scarf;Rena Scarf;; -68;Aegis;Aegis;; -73;Red Nose;Red Nose;; -74;Moni Satchel;Moni Satchel;; -75;Red Satchel;Red Satchel;; -76;Black Satchel;Black Satchel;; -77;Forehead Axe;Forehead Axe;; -79;Shinobi Shuriken;Shinobi Shuriken;; -83;Floating Swim Ring;Floating Swim Ring;; -84;Strawberry Doughnut;Strawberry Doughnut;; -85;Yellow Poo;Yellow Poo;; -87;Kingpin;Kingpin;; -89;Boko Belly Band;Boko Belly Band;; -90;Angel Wings;Angel Wings;; -91;Bat Wings;Bat Wings;; 92;Tai's Digivice;Taichi's Digivice;; -93;Pirate Hat;Pirate Hat;; -94;V-Dragon Wings;V-Dragon Wings;; -95;V-Dragon Mark;V-Dragon Mark;; -97;V-Dragon Horn;V-Dragon Horn;; -98;Pirate Gun;Pirate Gun;; -99;Jolly Roger;Jolly Roger;; -100;Golden Skull;Golden Skull;; -101;Rouge Ribbon;Rouge Ribbon;; -102;Swirl Glasses;Swirl Glasses;; -103;Eye Patch;Eye Patch;; 104;Myotis Mask;Vam Mask;; -105;Medical Eye Patch;Medical Eye Patch;; -106;Black Cloak;Black Cloak;; -107;Red Cloak;Red Cloak;; -108;King's Crown;King's Crown;; -109;Shakkou Coronet;Shakkou Coronet;; 110;T.K.'s Cap;Takeru's Cap;; -111;Graduate Cap;Graduate Cap;; 112;Puppet Cap;Pinocchi Cap;; -113;Samurai Helmet;Samurai Helmet;; -114;Mohican Hair;Mohican Hair;; -115;Regent Head;Regent Head;; -116;Mush Hat;Mush Hat;; -117;Bears Cap;Bears Cap;; -118;Digimon World Cap;Digimon World Cap;; -119;Big Cap;Big Cap;; -120;Safety Helmet;Safety Helmet;; -121;Teacher Beret;Teacher Beret;; -122;Student Cap;Student Cap;; -123;Straw Hat;Straw Hat;; -124;Jester Hat;Jester Hat;; -125;Afro Head;Afro Head;; -126;Dandy Hat;Dandy Hat;; -127;Olympia Sword;Olympia Sword;; -128;MacField Mic;MacField Mic;; -129;Wizard Rod;Wizard Rod;; -130;Elder's Rod;Elder's Rod;; -131;Thor's Hammer;Thor's Hammer;; -132;Shinobi Blade;Shinobi Blade;; -133;Party Pumpkin;Party Pumpkin;; -134;Xros Loader;Xros Loader;; -135;Plant Decoration;Plant Decoration;; -136;Secret Scroll;Secret Scroll;; -137;White Swan;White Swan;; -138;Intravenous Drip;Intravenous Drip;; -139;Star Emblem;Star Emblem;; -140;Angel Halo;Angel Halo;; -141;Lollipop;Lollipop;; -142;Genie's Waistband;Genie's Waistband;; -143;Ballet Skirt;Ballet Skirt;; -144;Toilet Paper Roll;Toilet Paper Roll;; -145;Rubber Plunger;Rubber Plunger;; -146;Bandage;Bandage;; -147;Digimon Mini;Digimon Mini;; -148;Sashimono Banner;Sashimono Banner;; -149;Fishing Rod;Fishing Rod;; -150;Old Camera;Old Camera;; -151;Champion Belt;Champion Belt;; -152;Kiss Mark;Kiss Mark;; -153;Face Mask;Face Mask;; -154;Patterned Bandage;Patterned Bandage;; -155;Banner Flag;Banner Flag;; -156;Grey Backhorn;Grey Backhorn;; -157;Geo Backhorn;Geo Backhorn;; -158;White Tie;White Tie;; -159;Purple Scarf;Purple Scarf;; -160;Gas Mask;Gas Mask;; -161;Hockey Mask;Hockey Mask;; -163;Mjolnir;Mjolnir;; -164;Ouryuken;Ouryuken;; -165;Sphinx Wings;Sphinx Wings;; -166;Ancient Volcano;Ancient Volcano;; -167;Infinity Cannon;Infinity Cannon;; -168;Hyper Infinity Cannon;Hyper Infinity Cannon;; -169;Dera Bush;Delu Bush;; -170;Shogun Horn;Shogun Horn;; -171;Banana Hair;Banana Hair;; -172;Shout Headphones;Shout Headphones;; -173;Pegasus Mix Mori;Pegasus Mix Mori;; \ No newline at end of file +169;Dera Bush;Delu Bush;; \ No newline at end of file diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CardNames1.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CardNames1.csv index ea6d020..fba0a04 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CardNames1.csv +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CardNames1.csv @@ -1,589 +1,195 @@ index;original;replace;excludeTerms;excludePaths -1;Botamon;Botamon;; -2;Dodomon;Dodomon;; -3;Yuramon;Yuramon;; -4;Poyomon;Poyomon;; -5;Jyarimon;Jyarimon;; -6;Koromon;Koromon;; -7;Wanyamon;Wanyamon;; -8;Budmon;Budmon;; -9;Tokomon;Tokomon;; -10;Gigimon;Gigimon;; -11;Agumon;Agumon;; -12;Gaomon;Gaomon;; 13;Biyomon;Piyomon;; -14;Veemon;Veemon;; -15;Hagurumon;Hagurumon;; 16;Candlemon;Candmon;; 17;Chuumon;Tyumon;; 18;Tsukaimon;Tukaimon;; -19;Kamemon;Kamemon;; -20;Kudamon;Kudamon;; -21;Lalamon;Lalamon;; -22;Impmon;Impmon;; -23;Guilmon;Guilmon;; -24;Patamon;Patamon;; 25;DemiDevimon;PicoDevimon;; -26;BlackGabumon;BlackGabumon;; -27;Psychemon;Psychemon;; -28;Goburimon;Goburimon;; 29;SnowAgumon;YukiAgumon;; -30;BlackAgumon;BlackAgumon;; -31;Gabumon;Gabumon;; -32;Solarmon;Solarmon;; -33;Tentomon;Tentomon;; -34;Gomamon;Gomamon;; -35;Palmon;Palmon;; 36;Dorumon;DORUmon;; -37;Commandramon;Commandramon;; -38;Greymon;Greymon;; -39;Gaogamon;Gaogamon;; -40;Birdramon;Birdramon;; 41;ExVeemon;XV-mon;; -42;Meramon;Meramon;; -43;Airdramon;Airdramon;; -44;Garurumon;Garurumon;; -45;Bakemon;Bakemon;; 46;BlackGatomon;BlackTailmon;; -47;GeoGreymon;GeoGreymon;; -48;Sunflowmon;Sunflowmon;; -49;Numemon;Numemon;; -50;Leomon;Leomon;; 51;Growlmon;Growmon;; -52;Angemon;Angemon;; 53;Growlmon (Orange);Growmon (Orange);; 54;Gatomon;Tailmon;; -55;Devimon;Devimon;; 56;BlackGrowlmon;BlackGrowmon;; -57;IceDevimon;IceDevimon;; 58;BlackGarurumon;Garurumon (Black);; -59;Gururumon;Gururumon;; -60;Geremon;Geremon;; -61;Kabuterimon;Kabuterimon;; 62;Sukamon;Scumon;; -63;Ikkakumon;Ikkakumon;; -64;Guardromon;Guardromon;; -65;Seadramon;Seadramon;; -66;Togemon;Togemon;; -67;Sealsdramon;Sealsdramon;; -68;MetalGreymon;MetalGreymon;; -69;MachGaogamon;MachGaogamon;; -70;Garudamon;Garudamon;; -71;Paildramon;Paildramon;; 72;MagnaAngemon;HolyAngemon;; -73;LadyDevimon;LadyDevimon;; -74;Monzaemon;Monzaemon;; -75;RizeGreymon;RizeGreymon;; -76;Lilamon;Lilamon;; 77;Myotismon;Vamdemon;; -78;MegaSeadramon;MegaSeadramon;; 79;WarGrowlmon;MegaloGrowmon;; 80;BlackWarGrowlmon;BlackMegaloGrowmon;; -81;WereGarurumon;WereGarurumon;; -82;Angewomon;Angewomon;; -83;BlueMeramon;BlueMeramon;; 84;BlackWereGarurumon;WereGarurumon (Black);; -85;WarGrowlmon (Orange);WarGrowlmon (Orange);; 86;MegaKabuterimon;AtlurKabuterimon;; -87;Etemon;Etemon;; -88;Andromon;Andromon;; -89;Zudomon;Zudomon;; 90;MetalTyrannomon;MetalTyranomon;; -91;Megadramon;Megadramon;; -92;MetalGreymon (Virus);MetalGreymon (Virus);; -93;Tankdramon;Tankdramon;; -94;WarGreymon;WarGreymon;; -95;MirageGaogamon;MirageGaogamon;; 96;Phoenixmon;Hououmon;; -97;BlackWarGreymon;BlackWarGreymon;; -98;ShineGreymon;ShineGreymon;; -99;VictoryGreymon;VictoryGreymon;; 100;MarineAngemon;MarinAngemon;; -101;Rosemon;Rosemon;; -102;PlatinumNumemon;PlatinumNumemon;; -103;BanchoLeomon;BanchoLeomon;; -104;Darkdramon;Darkdramon;; -105;Chaosmon;Chaosmon;; -106;MetalGarurumon;MetalGarurumon;; 107;BlackMetalGarurumon;MetalGarurumon (Black);; 108;ZeedGarurumon;Z'dGarurumon;; 109;HerculesKabuterimon;HerakleKabuterimon;; -110;MetalEtemon;MetalEtemon;; -111;Vikemon;Vikemon;; 112;ChaosGallantmon;ChaosDukemon;; 113;MaloMyotismon;BelialVamdemon;; -114;Murmukusmon;Murmukusmon;; 115;Ghoulmon;Deathmon;; -116;Vikaralamon;Vikaralamon;; -117;Kumbhiramon;Kumbhiramon;; -118;Vajramon;Vajramon;; -119;Mihiramon;Mihiramon;; 120;Antylamon;Andiramon;; -121;Majiramon;Majiramon;; -122;Sandiramon;Sandiramon;; -123;Indramon;Indramon;; -124;Pajiramon;Pajiramon;; -125;Makuramon;Makuramon;; -126;Shinduramon;Shinduramon;; -127;Caturamon;Caturamon;; -128;Chaosdramon;Chaosdramon;; 129;Machinedramon;Mugendramon;; -130;MetalSeadramon;MetalSeadramon;; -131;GigaSeadramon;GigaSeadramon;; 132;NeoMyotismon;NeoVamdemon;; -133;Dorbickmon;Dorbickmon;; -134;Splashmon;Splashmon;; -135;Zamielmon;Zamielmon;; -136;Olegmon;Olegmon;; -137;Gravimon;Gravimon;; -138;WarGreymon X;WarGreymon X;; -139;BlackWarGreymon X;BlackWarGreymon X;; -140;Seraphimon;Seraphimon;; 141;Ophanimon;Ofanimon;; -142;Cherubimon;Cherubimon;; -143;Lucemon FM;Lucemon FM;; -144;Leviamon;Leviamon;; 145;Beelzemon;Beelzebumon;; -146;Lilithmon;Lilithmon;; -147;Belphemon Rage Mode;Belphemon Rage Mode;; -148;Barbamon;Barbamon;; 149;Daemon;Demon;; 150;Goldramon;Goddramon;; 151;Magnadramon;Holydramon;; -152;Megidramon;Megidramon;; 153;Azulongmon;Qinglongmon;; -154;Baihumon;Baihumon;; -155;Zhuqiaomon;Zhuqiaomon;; 156;Ebonwumon;Xuanwumon;; -157;AncientGreymon;AncientGreymon;; -158;AncientGarurumon;AncientGarurumon;; 159;AncientBeetlemon;AncientBeatmon;; 160;AncientKazemon;AncientIrismon;; 161;AncientMegatheriummon;AncientMegatheriumon;; 162;AncientMermaidmon;AncientMermaimon;; 163;AncientTroymon;AncientTroiamon;; -164;AncientWisemon;AncientWisemon;; -165;AncientSphinxmon;AncientSphinxmon;; -166;AncientVolcamon;AncientVolcamon;; -167;Apocalymon;Apocalymon;; -168;Huanglongmon;Huanglongmon;; -169;Imperialdramon;Imperialdramon;; -170;Imperialdramon FM;Imperialdramon FM;; -171;Imperialdramon PM;Imperialdramon PM;; -172;Omegamon;Omegamon;; 173;Gallantmon;Dukemon;; -174;Magnamon;Magnamon;; -175;Dynasmon;Dynasmon;; 176;Crusadermon;Dukemon;; 177;UlforceVeedramon;UlforceV-dramon;; 178;Craniamon;Craniummon;; 179;Kentaurosmon;Sleipmon;; 180;Leopardmon;Duftmon;; -181;Examon;Examon;; -182;Alphamon;Alphamon;; -183;Marsmon;Marsmon;; -184;Neptunemon;Neptunemon;; 185;Merukimon;Mercurymon;; -186;Venusmon;Venusmon;; -187;Minervamon;Minervamon;; -188;Vulcanusmon;Vulcanusmon;; -189;Clockmon;Clockmon;; -190;Jijimon;Jijimon;; -191;PawnChessmon (White);PawnChessmon (White);; -192;PawnChessmon (Black);PawnChessmon (Black);; -193;KnightChessmon (White);KnightChessmon (White);; -194;KnightChessmon (Black);KnightChessmon (Black);; -195;BishopChessmon;BishopChessmon;; -196;RookChessmon;RookChessmon;; -197;QueenChessmon;QueenChessmon;; -198;KingChessmon;KingChessmon;; -199;Agumon X;Agumon X;; 200;SkullScorpiomon X;Anomalocarimon X;; 201;UlforceVeedramon X;UlforceV-dramon X;; -202;Allomon X;Allomon X;; 203;Ebemon X;EBEmon X;; -204;Okuwamon X;Okuwamon X;; -205;Omegamon X;Omegamon X;; 206;Samudramon;Gaioumon;; -207;Chaosdramon X;Chaosdramon X;; -208;Gazimon X;Gazimon X;; 209;Crabmon X;Ganimon X;; -210;Gabumon X;Gabumon X;; -211;Garudamon X;Garudamon X;; -212;Garurumon X;Garurumon X;; -213;Guilmon X;Guilmon X;; 214;Growlmon X;Growmon X;; 215;GranDracmon;GrandDracumon;; -216;Greymon X;Greymon X;; -217;Kuwagamon X;Kuwagamon X;; 218;Cerberusmon X;Cerberumon X;; -219;Kokuwamon X;Kokuwamon X;; 220;Goldramon X;Goddramon X;; 221;Gotsumon X;Gottsumon X;; -222;Gomamon X;Gomamon X;; -223;Sangloupmon;Sangloupmon;; 224;Thundermon X;Thunderballmon X;; -225;Seadramon X;Seadramon X;; -226;SkullBaluchimon;SkullBaluchimon;; 227;SkullMammothmon X;SkullMammon X;; -228;Starmon X;Starmon X;; -229;TigerVespamon;TigerVespamon;; -230;Dinorexmon;Dinorexmon;; -231;Gatomon X;Gatomon X;; -232;Tylomon X;Tylomon X;; 233;DexDorugamon;Death-X-DORUgamon;; 234;DexDoruGreymon;Death-X-DORUguremon;; 235;Dexmon;Death-X-mon;; 236;Gallantmon X;Dukemon X;; -237;Dynasmon X;Dynasmon X;; 238;Leopardmon X;Duftmon X;; -239;Togemon X;Togemon X;; 240;Dracmon;Dracumon;; -241;Triceramon X;Triceramon X;; -242;Nefertimon X;Nefertimon X;; -243;Hagurumon X;Hagurumon X;; -244;Palmon X;Palmon X;; 245;IceLeomon X;Panjyamon X;; -246;PrinceMamemon X;PrinceMamemon X;; -247;Plesiomon X;Plesiomon X;; 248;Salamon X;Plotmon X;; -249;Vademon X;Vademon X;; -250;Betamon X;Betamon X;; 251;Beelzemon X;Beelzebumon X;; 252;Magnadramon X;Holydramon X;; -253;Magnamon X;Magnamon X;; 254;Matadormon;Matadrmon;; -255;Mamemon X;Mamemon X;; -256;Mantaraymon X;Mantaraymon X;; 257;Mammothmon X;Mammon X;; -258;MegaSeadramon X;MegaSeadramon X;; 259;WarGrowlmon X;MegaloGrowmon X;; -260;Megidramon X;Megidramon X;; -261;MetalGarurumon X;MetalGarurumon X;; -262;MetalGreymon X;MetalGreymon X;; 263;MetalTyrannomon X;MetalTyranomon X;; -264;MetalMamemon X;MetalMamemon X;; 265;MedievalGallantmon;MedievalDukemon;; -266;Monochromon X;Monochromon X;; 267;Lillymon X;Lilimon X;; -268;Leomon X;Leomon X;; -269;Rosemon X;Rosemon X;; -270;WereGarurumon X;WereGarurumon X;; 271;Tyrannomon;Tyranomon;; 272;DarkTyrannomon;DarkTyranomon;; 273;ExTyrannomon;Ex-Tyranomon;; 274;MasterTyrannomon;MasterTyranomon;; -275;MameTyramon;MameTyramon;; 276;RustTyrannomon;RustTyranomon;; -277;Kokuwamon;Kokuwamon;; -278;Okuwamon;Okuwamon;; -279;GranKuwagamon;GranKuwagamon;; -280;GrandisKuwagamon;GrandisKuwagamon;; -281;BladeKuwagamon;BladeKuwagamon;; -282;MetallifeKuwagamon;MetallifeKuwagamon;; 283;Kimeramon;Chimairamon;; 284;Dorugamon;DORUgamon;; 285;DoruGreymon;DORUguremon;; 286;Dorugoramon;DORUgoramon;; 287;DexDorugoramon;Death-X-DORUgoramon;; -288;Raptordramon;Raptordramon;; -289;Grademon;Grademon;; -290;Ryudamon;Ryudamon;; -291;Ginryumon;Ginryumon;; -292;Hisyaryumon;Hisyaryumon;; -293;Ouryumon;Ouryumon;; -294;Shoutmon;Shoutmon;; -295;Shoutmon X2;Shoutmon X2;; -296;Shoutmon X3;Shoutmon X3;; -297;Shoutmon X4;Shoutmon X4;; -298;Shoutmon X4B;Shoutmon X4B;; -299;Shoutmon X5;Shoutmon X5;; -300;Shoutmon X5B;Shoutmon X5B;; -301;OmegaShoutmon;OmegaShoutmon;; -302;Shoutmon DX;Shoutmon DX;; -303;Shoutmon X7;Shoutmon X7;; -304;Gumdramon;Gumdramon;; -305;Arresterdramon;Arresterdramon;; -306;ToyAgumon;ToyAgumon;; -307;Omekamon;Omekamon;; -308;ShineGreymon BM;ShineGreymon BM;; -309;MirageGaogamon BM;MirageGaogamon BM;; -310;Rosemon BM;Rosemon BM;; 311;Ravemon BM;Ravmon BM;; 312;Aurumon;Owlmon;; -313;Swanmon;Swanmon;; -314;Sethmon;Sethmon;; -315;Pipismon;Pipismon;; 316;Pteramon;Pteranomon;; 317;Halsemon;Holsmon;; 318;Elephantmon;Elephamon;; -319;Kongoumon;Kongoumon;; -320;Peacockmon;Peacockmon;; -321;Maildramon;Maildramon;; -322;Rhinomon;Rhinomon;; -323;Goatmon;Goatmon;; -324;Sagittarimon;Sagittarimon;; -325;Sheepmon;Sheepmon;; -326;Bullmon;Bullmon;; 327;Pegasusmon;Pegasmon;; -328;Moosemon;Moosemon;; -329;Kabukimon;Kabukimon;; -330;Shurimon;Shurimon;; -331;Nohemon;Nohemon;; -332;Frogmon;Frogmon;; -333;Ponchomon;Ponchomon;; 334;Yasyamon;Yaksamon;; -335;Archelomon;Archelomon;; -336;Orcamon;Orcamon;; -337;Submarimon;Submarimon;; -338;Tylomon;Tylomon;; -339;Depthmon;Depthmon;; -340;Mantaraymon;Mantaraymon;; -341;Searchmon;Searchmon;; -342;Digmon;Digmon;; 343;Butterflymon;Butterflamon;; -344;Honeybeemon;Honeybeemon;; -345;Flybeemon;Flybeemon;; -346;Mothmon;Mothmon;; -347;Gargomon;Gargomon;; 348;Quetzalmon;Coatlmon;; -349;Seahomon;Seahomon;; -350;Nefertimon;Nefertimon;; -351;Harpymon;Harpymon;; -352;Manbomon;Manbomon;; -353;Opossummon;Opossummon;; -354;Chamelemon;Chamelemon;; -355;Kangarumon;Kangarumon;; -356;Toucanmon;Toucanmon;; -357;Pucchiemon;Pucchiemon;; -358;Pucchiemon (Green);Pucchiemon (Green);; -359;Prairiemon;Prairiemon;; -360;Allomon;Allomon;; 361;Salamandermon;Salamandamon;; -362;Shadramon;Shadramon;; -363;Baromon;Baromon;; 364;FlameWizardmon;FlaWizardmon;; 365;Flamedramon;Fladramon;; -366;Boarmon;Boarmon;; -367;Lynxmon;Lynxmon;; -368;Kenkimon;Kenkimon;; 369;Thunderbirdmon;Thunderbirmon;; -370;Stegomon;Stegomon;; -371;Sepikmon;Sepikmon;; -372;Togemogumon;Togemogumon;; -373;Rabbitmon;Rabbitmon;; 374;Raidramon;Lighdramon;; 375;Linkmon;Rinkmon;; 376;GoldVeedramon;GoldV-dramon;; -377;Rapidmon (Armor);Rapidmon (Armor);; 378;Agunimon;Agnimon;; -379;Aldamon;Aldamon;; 380;BurningGreymon;Vritramon;; 381;EmperorGreymon;KaiserGreymon;; 382;Flamemon;Flamon;; -383;Calmaramon;Calmaramon;; -384;Ranamon;Ranamon;; -385;Daipenmon;Daipenmon;; 386;Kumamon;Chackmon;; 387;Korikakumon;Blizzarmon;; -388;JetSilphymon;JetSilphymon;; 389;Zephyrmon;Shutumon;; 390;Kazemon;Fairimon;; 391;Beetlemon;Blitzmon;; 392;MetalKabuterimon;Bolgmon;; -393;RhinoKabuterimon;RhinoKabuterimon;; -394;Arbormon;Arbormon;; -395;Petaldramon;Petaldramon;; -396;Gigasmon;Gigasmon;; 397;Grumblemon;Grottemon;; 398;Sakkakumon;Sephirothmon;; 399;Mercurymon;Mercuremon;; 400;Lobomon;Wolfmon;; 401;KendoGarurumon;Garummon;; 402;BeoWolfmon;Beowolfmon;; -403;MagnaGarurumon;MagnaGarurumon;; -404;Strabimon;Strabimon;; 405;JagerLoweemon;KaiserLeomon;; -406;Duskmon;Duskmon;; 407;Velgemon;Velgrmon;; 408;Rhihimon;Raihimon;; 409;Loweemon;Löwemon;; -410;Yggdrasill_7D6;Yggdrasill_7D6;; 411;Wizardmon;Wizarmon;; 412;Garbagemon;Gerbemon;; -413;Kuwagamon;Kuwagamon;; 414;Centarumon;Centalmon;; -415;Shellmon;Shellmon;; 416;Cherrymon;Jyureimon;; -417;Digitamamon;Digitamamon;; 418;Deramon;Delumon;; 419;ShogunGekomon;TonosamaGekomon;; -420;Drimogemon;Drimogemon;; -421;Nanimon;Nanimon;; -422;Mojyamon;Mojyamon;; -423;Monochromon;Monochromon;; 424;Frigimon;Yukidarumon;; 425;Lillymon;Lilimon;; 426;Salamon;Plotmon;; -427;WaruMonzaemon;WaruMonzaemon;; -428;Kuramon;Kuramon;; -429;Tsumemon;Tsumemon;; -430;Keramon;Keramon;; -431;Chrysalimon;Chrysalimon;; -432;Infermon;Infermon;; 433;Diaboromon;Diablomon;; -434;Sunmon;Sunmon;; -435;Coronamon;Coronamon;; -436;Firamon;Firamon;; -437;Flaremon;Flaremon;; -438;Apollomon;Apollomon;; -439;Moonmon;Moonmon;; -440;Lunamon;Lunamon;; -441;Lekismon;Lekismon;; -442;Crescemon;Crescemon;; -443;Dianamon;Dianamon;; -444;Babamon;Babamon;; -445;Agumon (2006);Agumon (2006);; 446;ProfessorAgumon;Agumon Hakase;; -447;Stingmon;Stingmon;; -448;Wormmon;Wormmon;; -449;Aquilamon;Aquilamon;; 450;Armadillomon;Armadiomon;; 451;Wendigomon;Wendimon;; 452;Gwappamon;Gawappamon;; -453;Sakuyamon;Sakuyamon;; 454;Shawjamon;Shawujinmon;; -455;Shakkoumon;Shakkoumon;; -456;Silphymon;Silphymon;; -457;Taomon;Taomon;; 458;Chirinmon;Tyilinmon;; 459;Gallantmon Crimson Mode;Dukemon Crimson Mode;; -460;Falcomon;Falcomon;; -461;Peckmon;Peckmon;; -462;Monodramon;Monodramon;; 463;Crowmon;Yatagaramon;; 464;Ravemon;Ravmon;; -465;Reppamon;Reppamon;; -466;SkullGreymon;SkullGreymon;; -467;Hawkmon;Hawkmon;; -468;Ankylomon;Ankylomon;; -469;Terriermon;Terriermon;; 470;Gargomon;Galgomon;; -471;Lopmon;Lopmon;; -472;Cherubimon (Evil);Cherubimon (Evil);; -473;Rapidmon;Rapidmon;; 474;MegaGargomon;SaintGalgomon;; -475;Renamon;Renamon;; -476;Kyubimon;Kyubimon;; -477;Cyberdramon;Cyberdramon;; -478;Justimon (Blitz Arm);Justimon (Blitz Arm);; 479;Beelzemon Blast Mode;Beelzebumon Blast Mode;; -480;Mamemon;Mamemon;; -481;MetalMamemon;MetalMamemon;; -482;PrinceMamemon;PrinceMamemon;; 483;Ogremon;Orgemon;; 484;Veedramon;V-dramon;; 485;AeroVeedramon;AeroV-dramon;; 486;Piedmon;Piemon;; 487;Vegiemon;Vegimon;; -488;Woodmon;Woodmon;; 489;Puppetmon;Pinochimon;; -490;Gigadramon;Gigadramon;; 491;Piximon;Piccolomon;; -492;Vademon;Vademon;; -493;Betamon;Betamon;; 494;Hi-Andromon;HiAndromon;; -495;Lucemon;Lucemon;; -496;Boltmon;Boltmon;; 497;SkullMeramon;DeathMeramon;; 498;GrapLeomon;GrappuLeomon;; -499;SaberLeomon;SaberLeomon;; 500;IceLeomon;Panjyamon;; 501;Pabumon;Bubbmon;; 502;Motimon;Mochimon;; -503;Lucemon Satan Mode;Lucemon Satan Mode;; -504;Whamon;Whamon;; -505;Parrotmon;Parrotmon;; -506;Gekomon;Gekomon;; -507;Susanoomon;Susanoomon;; 508;Fake ProfessorAgumon;NiseAgumon Hakase;; -509;Lucemon Larva;Lucemon Larva;; 510;Alphamon Ouryuken;Alphamon: Ouryuken;; 511;Millenniummon;Millenniumon;; 512;ZeedMillenniummon;ZeedMillenniumon;; 513;MoonMillenniummon;MoonMillenniumon;; -514;Belphemon Sleep Mode;Belphemon Sleep Mode;; -515;KingEtemon;KingEtemon;; 516;ShogunMamemon;TonosamaMamemon;; -517;BigMamemon;BigMamemon;; -518;CatchMamemon;CatchMamemon;; -519;Fugamon;Fugamon;; 520;Shamanmon;Shamamon;; -521;GoldNumemon;GoldNumemon;; -522;PlatinumSukamon;PlatinumSukamon;; 523;SkullScorpiomon;Scorpiomon;; 524;Ebemon;EBEmon;; -525;Gazimon;Gazimon;; -526;Crabmon;Crabmon;; 527;Cerberusmon;Cerberumon;; 528;Gotsumon;Gottsumon;; 529;Thundermon;Thunderballmon;; 530;SkullMammothmon;SkullMammon;; -531;Starmon;Starmon;; -532;Titamon;Titamon;; -533;Triceramon;Triceramon;; -534;Plesiomon;Plesiomon;; 535;Mammothmon;Mammon;; 536;UltimateBrachiomon;UltimateBrachimon;; 537;Fanbeemon;Funbeemon;; 538;TobuCatmon;Tobucatmon;; -539;Dinotigermon;Dinotigermon;; -540;ClavisAngemon;ClavisAngemon;; -541;MetalPiranimon;MetalPiranimon;; -542;Rhinomon X;Rhinomon X;; 543;Pteramon X;Pteranomon X;; -544;Otamamon X;Otamamon X;; -545;Gesomon X;Gesomon X;; 546;Syakomon X;Shakomon X;; -547;Dobermon X;Dobermon X;; -548;Otamamon;Otamamon;; -549;Gesomon;Gesomon;; 550;Syakomon;Shakomon;; -551;Dobermon;Dobermon;; -552;Elecmon;Elecmon;; 553;Penguinmon;Penmon;; -554;Kunemon;Kunemon;; 555;Tsunomon;Tunomon;; -556;Punimon;Punimon;; -557;Tanemon;Tanemon;; 558;Kokatorimon;Cockatrimon;; -559;Unimon;Unimon;; 560;Ninjamon;Igamon;; -561;Coelamon;Coelamon;; -562;Giromon;Giromon;; -563;Nyokimon;Nyokimon;; -564;Yokomon;Yokomon;; 565;Pichimon;Pitchmon;; -566;Bukamon;Bukamon;; -567;Nyaromon;Nyaromon;; -568;YukimiBotamon;YukimiBotamon;; 569;Chibomon;Chicomon;; 570;DemiVeemon;Chibimon;; -571;Pururumon;Pururumon;; -572;Poromon;Poromon;; -573;Tsubumon;Tsubumon;; -574;Upamon;Upamon;; -575;Leafmon;Leafmon;; -576;Minomon;Minomon;; -577;Zerimon;Zerimon;; -578;Gummymon;Gummymon;; -579;Relemon;Relemon;; -580;Viximon;Viximon;; 581;Conomon;Cocomon;; 582;Kokomon;Chocomon;; 583;MetalKoromon;Choromon;; -584;Kotemon;Kotemon;; -585;Chapmon;Chapmon;; 586;DemiMeramon;PetitMeramon;; 587;Calumon;Culumon;; 588;Kapurimon;Caprimon;; \ No newline at end of file diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CardNames2.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CardNames2.csv index ea6d020..fba0a04 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CardNames2.csv +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CardNames2.csv @@ -1,589 +1,195 @@ index;original;replace;excludeTerms;excludePaths -1;Botamon;Botamon;; -2;Dodomon;Dodomon;; -3;Yuramon;Yuramon;; -4;Poyomon;Poyomon;; -5;Jyarimon;Jyarimon;; -6;Koromon;Koromon;; -7;Wanyamon;Wanyamon;; -8;Budmon;Budmon;; -9;Tokomon;Tokomon;; -10;Gigimon;Gigimon;; -11;Agumon;Agumon;; -12;Gaomon;Gaomon;; 13;Biyomon;Piyomon;; -14;Veemon;Veemon;; -15;Hagurumon;Hagurumon;; 16;Candlemon;Candmon;; 17;Chuumon;Tyumon;; 18;Tsukaimon;Tukaimon;; -19;Kamemon;Kamemon;; -20;Kudamon;Kudamon;; -21;Lalamon;Lalamon;; -22;Impmon;Impmon;; -23;Guilmon;Guilmon;; -24;Patamon;Patamon;; 25;DemiDevimon;PicoDevimon;; -26;BlackGabumon;BlackGabumon;; -27;Psychemon;Psychemon;; -28;Goburimon;Goburimon;; 29;SnowAgumon;YukiAgumon;; -30;BlackAgumon;BlackAgumon;; -31;Gabumon;Gabumon;; -32;Solarmon;Solarmon;; -33;Tentomon;Tentomon;; -34;Gomamon;Gomamon;; -35;Palmon;Palmon;; 36;Dorumon;DORUmon;; -37;Commandramon;Commandramon;; -38;Greymon;Greymon;; -39;Gaogamon;Gaogamon;; -40;Birdramon;Birdramon;; 41;ExVeemon;XV-mon;; -42;Meramon;Meramon;; -43;Airdramon;Airdramon;; -44;Garurumon;Garurumon;; -45;Bakemon;Bakemon;; 46;BlackGatomon;BlackTailmon;; -47;GeoGreymon;GeoGreymon;; -48;Sunflowmon;Sunflowmon;; -49;Numemon;Numemon;; -50;Leomon;Leomon;; 51;Growlmon;Growmon;; -52;Angemon;Angemon;; 53;Growlmon (Orange);Growmon (Orange);; 54;Gatomon;Tailmon;; -55;Devimon;Devimon;; 56;BlackGrowlmon;BlackGrowmon;; -57;IceDevimon;IceDevimon;; 58;BlackGarurumon;Garurumon (Black);; -59;Gururumon;Gururumon;; -60;Geremon;Geremon;; -61;Kabuterimon;Kabuterimon;; 62;Sukamon;Scumon;; -63;Ikkakumon;Ikkakumon;; -64;Guardromon;Guardromon;; -65;Seadramon;Seadramon;; -66;Togemon;Togemon;; -67;Sealsdramon;Sealsdramon;; -68;MetalGreymon;MetalGreymon;; -69;MachGaogamon;MachGaogamon;; -70;Garudamon;Garudamon;; -71;Paildramon;Paildramon;; 72;MagnaAngemon;HolyAngemon;; -73;LadyDevimon;LadyDevimon;; -74;Monzaemon;Monzaemon;; -75;RizeGreymon;RizeGreymon;; -76;Lilamon;Lilamon;; 77;Myotismon;Vamdemon;; -78;MegaSeadramon;MegaSeadramon;; 79;WarGrowlmon;MegaloGrowmon;; 80;BlackWarGrowlmon;BlackMegaloGrowmon;; -81;WereGarurumon;WereGarurumon;; -82;Angewomon;Angewomon;; -83;BlueMeramon;BlueMeramon;; 84;BlackWereGarurumon;WereGarurumon (Black);; -85;WarGrowlmon (Orange);WarGrowlmon (Orange);; 86;MegaKabuterimon;AtlurKabuterimon;; -87;Etemon;Etemon;; -88;Andromon;Andromon;; -89;Zudomon;Zudomon;; 90;MetalTyrannomon;MetalTyranomon;; -91;Megadramon;Megadramon;; -92;MetalGreymon (Virus);MetalGreymon (Virus);; -93;Tankdramon;Tankdramon;; -94;WarGreymon;WarGreymon;; -95;MirageGaogamon;MirageGaogamon;; 96;Phoenixmon;Hououmon;; -97;BlackWarGreymon;BlackWarGreymon;; -98;ShineGreymon;ShineGreymon;; -99;VictoryGreymon;VictoryGreymon;; 100;MarineAngemon;MarinAngemon;; -101;Rosemon;Rosemon;; -102;PlatinumNumemon;PlatinumNumemon;; -103;BanchoLeomon;BanchoLeomon;; -104;Darkdramon;Darkdramon;; -105;Chaosmon;Chaosmon;; -106;MetalGarurumon;MetalGarurumon;; 107;BlackMetalGarurumon;MetalGarurumon (Black);; 108;ZeedGarurumon;Z'dGarurumon;; 109;HerculesKabuterimon;HerakleKabuterimon;; -110;MetalEtemon;MetalEtemon;; -111;Vikemon;Vikemon;; 112;ChaosGallantmon;ChaosDukemon;; 113;MaloMyotismon;BelialVamdemon;; -114;Murmukusmon;Murmukusmon;; 115;Ghoulmon;Deathmon;; -116;Vikaralamon;Vikaralamon;; -117;Kumbhiramon;Kumbhiramon;; -118;Vajramon;Vajramon;; -119;Mihiramon;Mihiramon;; 120;Antylamon;Andiramon;; -121;Majiramon;Majiramon;; -122;Sandiramon;Sandiramon;; -123;Indramon;Indramon;; -124;Pajiramon;Pajiramon;; -125;Makuramon;Makuramon;; -126;Shinduramon;Shinduramon;; -127;Caturamon;Caturamon;; -128;Chaosdramon;Chaosdramon;; 129;Machinedramon;Mugendramon;; -130;MetalSeadramon;MetalSeadramon;; -131;GigaSeadramon;GigaSeadramon;; 132;NeoMyotismon;NeoVamdemon;; -133;Dorbickmon;Dorbickmon;; -134;Splashmon;Splashmon;; -135;Zamielmon;Zamielmon;; -136;Olegmon;Olegmon;; -137;Gravimon;Gravimon;; -138;WarGreymon X;WarGreymon X;; -139;BlackWarGreymon X;BlackWarGreymon X;; -140;Seraphimon;Seraphimon;; 141;Ophanimon;Ofanimon;; -142;Cherubimon;Cherubimon;; -143;Lucemon FM;Lucemon FM;; -144;Leviamon;Leviamon;; 145;Beelzemon;Beelzebumon;; -146;Lilithmon;Lilithmon;; -147;Belphemon Rage Mode;Belphemon Rage Mode;; -148;Barbamon;Barbamon;; 149;Daemon;Demon;; 150;Goldramon;Goddramon;; 151;Magnadramon;Holydramon;; -152;Megidramon;Megidramon;; 153;Azulongmon;Qinglongmon;; -154;Baihumon;Baihumon;; -155;Zhuqiaomon;Zhuqiaomon;; 156;Ebonwumon;Xuanwumon;; -157;AncientGreymon;AncientGreymon;; -158;AncientGarurumon;AncientGarurumon;; 159;AncientBeetlemon;AncientBeatmon;; 160;AncientKazemon;AncientIrismon;; 161;AncientMegatheriummon;AncientMegatheriumon;; 162;AncientMermaidmon;AncientMermaimon;; 163;AncientTroymon;AncientTroiamon;; -164;AncientWisemon;AncientWisemon;; -165;AncientSphinxmon;AncientSphinxmon;; -166;AncientVolcamon;AncientVolcamon;; -167;Apocalymon;Apocalymon;; -168;Huanglongmon;Huanglongmon;; -169;Imperialdramon;Imperialdramon;; -170;Imperialdramon FM;Imperialdramon FM;; -171;Imperialdramon PM;Imperialdramon PM;; -172;Omegamon;Omegamon;; 173;Gallantmon;Dukemon;; -174;Magnamon;Magnamon;; -175;Dynasmon;Dynasmon;; 176;Crusadermon;Dukemon;; 177;UlforceVeedramon;UlforceV-dramon;; 178;Craniamon;Craniummon;; 179;Kentaurosmon;Sleipmon;; 180;Leopardmon;Duftmon;; -181;Examon;Examon;; -182;Alphamon;Alphamon;; -183;Marsmon;Marsmon;; -184;Neptunemon;Neptunemon;; 185;Merukimon;Mercurymon;; -186;Venusmon;Venusmon;; -187;Minervamon;Minervamon;; -188;Vulcanusmon;Vulcanusmon;; -189;Clockmon;Clockmon;; -190;Jijimon;Jijimon;; -191;PawnChessmon (White);PawnChessmon (White);; -192;PawnChessmon (Black);PawnChessmon (Black);; -193;KnightChessmon (White);KnightChessmon (White);; -194;KnightChessmon (Black);KnightChessmon (Black);; -195;BishopChessmon;BishopChessmon;; -196;RookChessmon;RookChessmon;; -197;QueenChessmon;QueenChessmon;; -198;KingChessmon;KingChessmon;; -199;Agumon X;Agumon X;; 200;SkullScorpiomon X;Anomalocarimon X;; 201;UlforceVeedramon X;UlforceV-dramon X;; -202;Allomon X;Allomon X;; 203;Ebemon X;EBEmon X;; -204;Okuwamon X;Okuwamon X;; -205;Omegamon X;Omegamon X;; 206;Samudramon;Gaioumon;; -207;Chaosdramon X;Chaosdramon X;; -208;Gazimon X;Gazimon X;; 209;Crabmon X;Ganimon X;; -210;Gabumon X;Gabumon X;; -211;Garudamon X;Garudamon X;; -212;Garurumon X;Garurumon X;; -213;Guilmon X;Guilmon X;; 214;Growlmon X;Growmon X;; 215;GranDracmon;GrandDracumon;; -216;Greymon X;Greymon X;; -217;Kuwagamon X;Kuwagamon X;; 218;Cerberusmon X;Cerberumon X;; -219;Kokuwamon X;Kokuwamon X;; 220;Goldramon X;Goddramon X;; 221;Gotsumon X;Gottsumon X;; -222;Gomamon X;Gomamon X;; -223;Sangloupmon;Sangloupmon;; 224;Thundermon X;Thunderballmon X;; -225;Seadramon X;Seadramon X;; -226;SkullBaluchimon;SkullBaluchimon;; 227;SkullMammothmon X;SkullMammon X;; -228;Starmon X;Starmon X;; -229;TigerVespamon;TigerVespamon;; -230;Dinorexmon;Dinorexmon;; -231;Gatomon X;Gatomon X;; -232;Tylomon X;Tylomon X;; 233;DexDorugamon;Death-X-DORUgamon;; 234;DexDoruGreymon;Death-X-DORUguremon;; 235;Dexmon;Death-X-mon;; 236;Gallantmon X;Dukemon X;; -237;Dynasmon X;Dynasmon X;; 238;Leopardmon X;Duftmon X;; -239;Togemon X;Togemon X;; 240;Dracmon;Dracumon;; -241;Triceramon X;Triceramon X;; -242;Nefertimon X;Nefertimon X;; -243;Hagurumon X;Hagurumon X;; -244;Palmon X;Palmon X;; 245;IceLeomon X;Panjyamon X;; -246;PrinceMamemon X;PrinceMamemon X;; -247;Plesiomon X;Plesiomon X;; 248;Salamon X;Plotmon X;; -249;Vademon X;Vademon X;; -250;Betamon X;Betamon X;; 251;Beelzemon X;Beelzebumon X;; 252;Magnadramon X;Holydramon X;; -253;Magnamon X;Magnamon X;; 254;Matadormon;Matadrmon;; -255;Mamemon X;Mamemon X;; -256;Mantaraymon X;Mantaraymon X;; 257;Mammothmon X;Mammon X;; -258;MegaSeadramon X;MegaSeadramon X;; 259;WarGrowlmon X;MegaloGrowmon X;; -260;Megidramon X;Megidramon X;; -261;MetalGarurumon X;MetalGarurumon X;; -262;MetalGreymon X;MetalGreymon X;; 263;MetalTyrannomon X;MetalTyranomon X;; -264;MetalMamemon X;MetalMamemon X;; 265;MedievalGallantmon;MedievalDukemon;; -266;Monochromon X;Monochromon X;; 267;Lillymon X;Lilimon X;; -268;Leomon X;Leomon X;; -269;Rosemon X;Rosemon X;; -270;WereGarurumon X;WereGarurumon X;; 271;Tyrannomon;Tyranomon;; 272;DarkTyrannomon;DarkTyranomon;; 273;ExTyrannomon;Ex-Tyranomon;; 274;MasterTyrannomon;MasterTyranomon;; -275;MameTyramon;MameTyramon;; 276;RustTyrannomon;RustTyranomon;; -277;Kokuwamon;Kokuwamon;; -278;Okuwamon;Okuwamon;; -279;GranKuwagamon;GranKuwagamon;; -280;GrandisKuwagamon;GrandisKuwagamon;; -281;BladeKuwagamon;BladeKuwagamon;; -282;MetallifeKuwagamon;MetallifeKuwagamon;; 283;Kimeramon;Chimairamon;; 284;Dorugamon;DORUgamon;; 285;DoruGreymon;DORUguremon;; 286;Dorugoramon;DORUgoramon;; 287;DexDorugoramon;Death-X-DORUgoramon;; -288;Raptordramon;Raptordramon;; -289;Grademon;Grademon;; -290;Ryudamon;Ryudamon;; -291;Ginryumon;Ginryumon;; -292;Hisyaryumon;Hisyaryumon;; -293;Ouryumon;Ouryumon;; -294;Shoutmon;Shoutmon;; -295;Shoutmon X2;Shoutmon X2;; -296;Shoutmon X3;Shoutmon X3;; -297;Shoutmon X4;Shoutmon X4;; -298;Shoutmon X4B;Shoutmon X4B;; -299;Shoutmon X5;Shoutmon X5;; -300;Shoutmon X5B;Shoutmon X5B;; -301;OmegaShoutmon;OmegaShoutmon;; -302;Shoutmon DX;Shoutmon DX;; -303;Shoutmon X7;Shoutmon X7;; -304;Gumdramon;Gumdramon;; -305;Arresterdramon;Arresterdramon;; -306;ToyAgumon;ToyAgumon;; -307;Omekamon;Omekamon;; -308;ShineGreymon BM;ShineGreymon BM;; -309;MirageGaogamon BM;MirageGaogamon BM;; -310;Rosemon BM;Rosemon BM;; 311;Ravemon BM;Ravmon BM;; 312;Aurumon;Owlmon;; -313;Swanmon;Swanmon;; -314;Sethmon;Sethmon;; -315;Pipismon;Pipismon;; 316;Pteramon;Pteranomon;; 317;Halsemon;Holsmon;; 318;Elephantmon;Elephamon;; -319;Kongoumon;Kongoumon;; -320;Peacockmon;Peacockmon;; -321;Maildramon;Maildramon;; -322;Rhinomon;Rhinomon;; -323;Goatmon;Goatmon;; -324;Sagittarimon;Sagittarimon;; -325;Sheepmon;Sheepmon;; -326;Bullmon;Bullmon;; 327;Pegasusmon;Pegasmon;; -328;Moosemon;Moosemon;; -329;Kabukimon;Kabukimon;; -330;Shurimon;Shurimon;; -331;Nohemon;Nohemon;; -332;Frogmon;Frogmon;; -333;Ponchomon;Ponchomon;; 334;Yasyamon;Yaksamon;; -335;Archelomon;Archelomon;; -336;Orcamon;Orcamon;; -337;Submarimon;Submarimon;; -338;Tylomon;Tylomon;; -339;Depthmon;Depthmon;; -340;Mantaraymon;Mantaraymon;; -341;Searchmon;Searchmon;; -342;Digmon;Digmon;; 343;Butterflymon;Butterflamon;; -344;Honeybeemon;Honeybeemon;; -345;Flybeemon;Flybeemon;; -346;Mothmon;Mothmon;; -347;Gargomon;Gargomon;; 348;Quetzalmon;Coatlmon;; -349;Seahomon;Seahomon;; -350;Nefertimon;Nefertimon;; -351;Harpymon;Harpymon;; -352;Manbomon;Manbomon;; -353;Opossummon;Opossummon;; -354;Chamelemon;Chamelemon;; -355;Kangarumon;Kangarumon;; -356;Toucanmon;Toucanmon;; -357;Pucchiemon;Pucchiemon;; -358;Pucchiemon (Green);Pucchiemon (Green);; -359;Prairiemon;Prairiemon;; -360;Allomon;Allomon;; 361;Salamandermon;Salamandamon;; -362;Shadramon;Shadramon;; -363;Baromon;Baromon;; 364;FlameWizardmon;FlaWizardmon;; 365;Flamedramon;Fladramon;; -366;Boarmon;Boarmon;; -367;Lynxmon;Lynxmon;; -368;Kenkimon;Kenkimon;; 369;Thunderbirdmon;Thunderbirmon;; -370;Stegomon;Stegomon;; -371;Sepikmon;Sepikmon;; -372;Togemogumon;Togemogumon;; -373;Rabbitmon;Rabbitmon;; 374;Raidramon;Lighdramon;; 375;Linkmon;Rinkmon;; 376;GoldVeedramon;GoldV-dramon;; -377;Rapidmon (Armor);Rapidmon (Armor);; 378;Agunimon;Agnimon;; -379;Aldamon;Aldamon;; 380;BurningGreymon;Vritramon;; 381;EmperorGreymon;KaiserGreymon;; 382;Flamemon;Flamon;; -383;Calmaramon;Calmaramon;; -384;Ranamon;Ranamon;; -385;Daipenmon;Daipenmon;; 386;Kumamon;Chackmon;; 387;Korikakumon;Blizzarmon;; -388;JetSilphymon;JetSilphymon;; 389;Zephyrmon;Shutumon;; 390;Kazemon;Fairimon;; 391;Beetlemon;Blitzmon;; 392;MetalKabuterimon;Bolgmon;; -393;RhinoKabuterimon;RhinoKabuterimon;; -394;Arbormon;Arbormon;; -395;Petaldramon;Petaldramon;; -396;Gigasmon;Gigasmon;; 397;Grumblemon;Grottemon;; 398;Sakkakumon;Sephirothmon;; 399;Mercurymon;Mercuremon;; 400;Lobomon;Wolfmon;; 401;KendoGarurumon;Garummon;; 402;BeoWolfmon;Beowolfmon;; -403;MagnaGarurumon;MagnaGarurumon;; -404;Strabimon;Strabimon;; 405;JagerLoweemon;KaiserLeomon;; -406;Duskmon;Duskmon;; 407;Velgemon;Velgrmon;; 408;Rhihimon;Raihimon;; 409;Loweemon;Löwemon;; -410;Yggdrasill_7D6;Yggdrasill_7D6;; 411;Wizardmon;Wizarmon;; 412;Garbagemon;Gerbemon;; -413;Kuwagamon;Kuwagamon;; 414;Centarumon;Centalmon;; -415;Shellmon;Shellmon;; 416;Cherrymon;Jyureimon;; -417;Digitamamon;Digitamamon;; 418;Deramon;Delumon;; 419;ShogunGekomon;TonosamaGekomon;; -420;Drimogemon;Drimogemon;; -421;Nanimon;Nanimon;; -422;Mojyamon;Mojyamon;; -423;Monochromon;Monochromon;; 424;Frigimon;Yukidarumon;; 425;Lillymon;Lilimon;; 426;Salamon;Plotmon;; -427;WaruMonzaemon;WaruMonzaemon;; -428;Kuramon;Kuramon;; -429;Tsumemon;Tsumemon;; -430;Keramon;Keramon;; -431;Chrysalimon;Chrysalimon;; -432;Infermon;Infermon;; 433;Diaboromon;Diablomon;; -434;Sunmon;Sunmon;; -435;Coronamon;Coronamon;; -436;Firamon;Firamon;; -437;Flaremon;Flaremon;; -438;Apollomon;Apollomon;; -439;Moonmon;Moonmon;; -440;Lunamon;Lunamon;; -441;Lekismon;Lekismon;; -442;Crescemon;Crescemon;; -443;Dianamon;Dianamon;; -444;Babamon;Babamon;; -445;Agumon (2006);Agumon (2006);; 446;ProfessorAgumon;Agumon Hakase;; -447;Stingmon;Stingmon;; -448;Wormmon;Wormmon;; -449;Aquilamon;Aquilamon;; 450;Armadillomon;Armadiomon;; 451;Wendigomon;Wendimon;; 452;Gwappamon;Gawappamon;; -453;Sakuyamon;Sakuyamon;; 454;Shawjamon;Shawujinmon;; -455;Shakkoumon;Shakkoumon;; -456;Silphymon;Silphymon;; -457;Taomon;Taomon;; 458;Chirinmon;Tyilinmon;; 459;Gallantmon Crimson Mode;Dukemon Crimson Mode;; -460;Falcomon;Falcomon;; -461;Peckmon;Peckmon;; -462;Monodramon;Monodramon;; 463;Crowmon;Yatagaramon;; 464;Ravemon;Ravmon;; -465;Reppamon;Reppamon;; -466;SkullGreymon;SkullGreymon;; -467;Hawkmon;Hawkmon;; -468;Ankylomon;Ankylomon;; -469;Terriermon;Terriermon;; 470;Gargomon;Galgomon;; -471;Lopmon;Lopmon;; -472;Cherubimon (Evil);Cherubimon (Evil);; -473;Rapidmon;Rapidmon;; 474;MegaGargomon;SaintGalgomon;; -475;Renamon;Renamon;; -476;Kyubimon;Kyubimon;; -477;Cyberdramon;Cyberdramon;; -478;Justimon (Blitz Arm);Justimon (Blitz Arm);; 479;Beelzemon Blast Mode;Beelzebumon Blast Mode;; -480;Mamemon;Mamemon;; -481;MetalMamemon;MetalMamemon;; -482;PrinceMamemon;PrinceMamemon;; 483;Ogremon;Orgemon;; 484;Veedramon;V-dramon;; 485;AeroVeedramon;AeroV-dramon;; 486;Piedmon;Piemon;; 487;Vegiemon;Vegimon;; -488;Woodmon;Woodmon;; 489;Puppetmon;Pinochimon;; -490;Gigadramon;Gigadramon;; 491;Piximon;Piccolomon;; -492;Vademon;Vademon;; -493;Betamon;Betamon;; 494;Hi-Andromon;HiAndromon;; -495;Lucemon;Lucemon;; -496;Boltmon;Boltmon;; 497;SkullMeramon;DeathMeramon;; 498;GrapLeomon;GrappuLeomon;; -499;SaberLeomon;SaberLeomon;; 500;IceLeomon;Panjyamon;; 501;Pabumon;Bubbmon;; 502;Motimon;Mochimon;; -503;Lucemon Satan Mode;Lucemon Satan Mode;; -504;Whamon;Whamon;; -505;Parrotmon;Parrotmon;; -506;Gekomon;Gekomon;; -507;Susanoomon;Susanoomon;; 508;Fake ProfessorAgumon;NiseAgumon Hakase;; -509;Lucemon Larva;Lucemon Larva;; 510;Alphamon Ouryuken;Alphamon: Ouryuken;; 511;Millenniummon;Millenniumon;; 512;ZeedMillenniummon;ZeedMillenniumon;; 513;MoonMillenniummon;MoonMillenniumon;; -514;Belphemon Sleep Mode;Belphemon Sleep Mode;; -515;KingEtemon;KingEtemon;; 516;ShogunMamemon;TonosamaMamemon;; -517;BigMamemon;BigMamemon;; -518;CatchMamemon;CatchMamemon;; -519;Fugamon;Fugamon;; 520;Shamanmon;Shamamon;; -521;GoldNumemon;GoldNumemon;; -522;PlatinumSukamon;PlatinumSukamon;; 523;SkullScorpiomon;Scorpiomon;; 524;Ebemon;EBEmon;; -525;Gazimon;Gazimon;; -526;Crabmon;Crabmon;; 527;Cerberusmon;Cerberumon;; 528;Gotsumon;Gottsumon;; 529;Thundermon;Thunderballmon;; 530;SkullMammothmon;SkullMammon;; -531;Starmon;Starmon;; -532;Titamon;Titamon;; -533;Triceramon;Triceramon;; -534;Plesiomon;Plesiomon;; 535;Mammothmon;Mammon;; 536;UltimateBrachiomon;UltimateBrachimon;; 537;Fanbeemon;Funbeemon;; 538;TobuCatmon;Tobucatmon;; -539;Dinotigermon;Dinotigermon;; -540;ClavisAngemon;ClavisAngemon;; -541;MetalPiranimon;MetalPiranimon;; -542;Rhinomon X;Rhinomon X;; 543;Pteramon X;Pteranomon X;; -544;Otamamon X;Otamamon X;; -545;Gesomon X;Gesomon X;; 546;Syakomon X;Shakomon X;; -547;Dobermon X;Dobermon X;; -548;Otamamon;Otamamon;; -549;Gesomon;Gesomon;; 550;Syakomon;Shakomon;; -551;Dobermon;Dobermon;; -552;Elecmon;Elecmon;; 553;Penguinmon;Penmon;; -554;Kunemon;Kunemon;; 555;Tsunomon;Tunomon;; -556;Punimon;Punimon;; -557;Tanemon;Tanemon;; 558;Kokatorimon;Cockatrimon;; -559;Unimon;Unimon;; 560;Ninjamon;Igamon;; -561;Coelamon;Coelamon;; -562;Giromon;Giromon;; -563;Nyokimon;Nyokimon;; -564;Yokomon;Yokomon;; 565;Pichimon;Pitchmon;; -566;Bukamon;Bukamon;; -567;Nyaromon;Nyaromon;; -568;YukimiBotamon;YukimiBotamon;; 569;Chibomon;Chicomon;; 570;DemiVeemon;Chibimon;; -571;Pururumon;Pururumon;; -572;Poromon;Poromon;; -573;Tsubumon;Tsubumon;; -574;Upamon;Upamon;; -575;Leafmon;Leafmon;; -576;Minomon;Minomon;; -577;Zerimon;Zerimon;; -578;Gummymon;Gummymon;; -579;Relemon;Relemon;; -580;Viximon;Viximon;; 581;Conomon;Cocomon;; 582;Kokomon;Chocomon;; 583;MetalKoromon;Choromon;; -584;Kotemon;Kotemon;; -585;Chapmon;Chapmon;; 586;DemiMeramon;PetitMeramon;; 587;Calumon;Culumon;; 588;Kapurimon;Caprimon;; \ No newline at end of file diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CardSetNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CardSetNames.csv index 6a50afd..e93108e 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CardSetNames.csv +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CardSetNames.csv @@ -1,30 +1,11 @@ index;original;replace;excludeTerms;excludePaths -0;Royal Knights: Founder;Royal Knights: Founder;; -1;7 Great Demon Lords;7 Great Demon Lords;; -2;Celestial Digimon;Celestial Digimon;; 3;Digimon Sovereigns;Holy Beasts;; -4;Deva;Deva;; -5;Four Great Dragons;Four Great Dragons;; -6;Ten Legendary Warriors;Ten Legendary Warriors;; -7;Crack Team;Crack Team;; -8;D-Brigade;D-Brigade;; -9;Big Death Stars;Big Death Stars;; 10;Ebonwumon's Followers;Xuanwumon's Followers;; 11;Azulongmon's Followers;Qinglongmon's Followers;; -12;Zhuqiaomon's Followers;Zhuqiaomon's Followers;; -13;Baihumon's Followers;Baihumon's Followers;; -14;Agumon Line;Agumon Line;; -15;Gabumon Line;Gabumon Line;; 16;Biyomon Line;Piyomon Line;; -17;Tentomon Line;Tentomon Line;; -18;Palmon Line;Palmon Line;; -19;Gomamon Line;Gomamon Line;; -20;Patamon Line;Patamon Line;; 21;Gatomon Line;Tailmon Line;; 22;Veemon Line;V-mon Line;; 23;Armadillomon Line;Armadimon Line;; -24;Hawkmon Line;Hawkmon Line;; -25;Wormmon Line;Wormmon Line;; 26;Digi-Egg of Courage;Digimental of Courage;; 27;Digi-Egg of Friendship;Digimental of Friendship;; 28;Digi-Egg of Love;Digimental of Love;; @@ -36,65 +17,14 @@ index;original;replace;excludeTerms;excludePaths 34;Digi-Egg of Kindness;Digimental of Kindness;; 35;Digi-Egg of Miracles;Digimental of Miracles;; 36;Digi-Egg of Fate;Digimental of Fate;; -37;Guilmon Line;Guilmon Line;; -38;Terriermon Line;Terriermon Line;; -39;Renamon Line;Renamon Line;; -40;Agunimon Line;Agunimon Line;; 41;BeoWolfmon Line;Beowolfmon Line;; -42;Evil Warriors;Evil Warriors;; -43;Evil Beasts;Evil Beasts;; -44;Agumon 2006 Line;Agumon 2006 Line;; -45;Gaomon Line;Gaomon Line;; -46;Lalamon Line;Lalamon Line;; -47;Falcomon Line;Falcomon Line;; -48;Four Bursts;Four Bursts;; -49;Shoutmon Line;Shoutmon Line;; -50;Gumdramon Line;Gumdramon Line;; -51;X-Antibody of Destiny;X-Antibody of Destiny;; -52;The Sword;The Sword;; -53;Death-X-Evolution;Death-X-Evolution;; 54;Veedramon Line;V-dramon Line;; -55;Sun God of Olympos;Sun God of Olympos;; -56;Moonlight God of Olympos;Moonlight God of Olympos;; -57;The Worst Virus;The Worst Virus;; -58;Heroes of Justice;Heroes of Justice;; -59;Kudamon Line;Kudamon Line;; -60;Kamemon Line;Kamemon Line;; -61;Sorrowful Fallen Angels;Sorrowful Fallen Angels;; -62;The Ogre's Way of Life;The Ogre's Way of Life;; -63;DNA Digivolutions 1;DNA Digivolutions 1;; -64;DNA Digivolutions 2;DNA Digivolutions 2;; -65;DNA Digivolutions 3;DNA Digivolutions 3;; -66;DNA Digivolutions 4;DNA Digivolutions 4;; -67;DNA Digivolutions 5;DNA Digivolutions 5;; +63;DNA Digivolutions 1;Jogress Evolutions 1;; +64;DNA Digivolutions 2;Jogress Evolutions 2;; +65;DNA Digivolutions 3;Jogress Evolutions 3;; +66;DNA Digivolutions 4;Jogress Evolutions 4;; +67;DNA Digivolutions 5;Jogress Evolutions 5;; 68;Kimera Data;Chimera Data;; -69;Mamemon's;Mamemon's;; -70;Nine Kuwaga's;Nine Kuwaga's;; -71;Eight Agumon;Eight Agumon;; -72;Chess Digimon;Chess Digimon;; 73;Tyranno Brothers;Tyrano Brothers;; -74;Lion's Heroes;Lion's Heroes;; -75;Viral Knights;Viral Knights;; -76;Messenger of Heaven;Messenger of Heaven;; -77;Hell Devils;Hell Devils;; -78;Worst Demon Lord;Worst Demon Lord;; -79;Burning Flame;Burning Flame;; -80;Mysteries of the Universe;Mysteries of the Universe;; -81;Undead Monsters;Undead Monsters;; -82;Demon Lords of Gluttony;Demon Lords of Gluttony;; -83;Millennium;Millennium;; -84;Lord of the Night;Lord of the Night;; -85;Monkey Pack;Monkey Pack;; -86;Odd Teddies;Odd Teddies;; -87;Black Digimon 1;Black Digimon 1;; -88;Black Digimon 2;Black Digimon 2;; -89;Tricolour Gabumon;Tricolour Gabumon;; -90;Tricolour Garurumon;Tricolour Garurumon;; 91;Tricolour Growlmon;Tricolour Growmon;; -92;Tricolour WarGrowlmon;Tricolour MegaloGrowmon;; -93;Different Numemon;Different Numemon;; -94;Jiji-Baba Set;Jiji-Baba Set;; -95;Professor Digimon;Professor Digimon;; -96;From Toy Land;From Toy Land;; -97;Two Good Friends;Two Good Friends;; -98;Filth Friendship;Filth Friendship;; \ No newline at end of file +92;Tricolour WarGrowlmon;Tricolour MegaloGrowmon;; \ No newline at end of file diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CharacterNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CharacterNames.csv index f9b6b60..6a53588 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CharacterNames.csv +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/CharacterNames.csv @@ -1,45 +1,10 @@ index;original;replace;excludeTerms;excludePaths -1002;Akiho;Akiho;; -1003;Niko;Niko;; -1004;Yuuya;Yuuya;; -1005;Mirei;Mirei;; -1006;Dr. Petrov;Dr. Petrov;; -1007;Lili;Lili;; -1008;Sebastian;Sebastian;; -1009;Male Child A;Male Child A;; -1010;Male Child B;Male Child B;; -1011;Female Child A;Female Child A;; -1012;Female Child B;Female Child B;; -1013;Male Student A;Male Student A;; -1014;Male Student B;Male Student B;; -1015;Female Student A;Female Student A;; -1016;Female Student B;Female Student B;; -1017;Man A;Man A;; -1018;Man B;Man B;; -1019;Woman A;Woman A;; -1020;Woman B;Woman B;; -1021;Salaryman A;Salaryman A;; -1022;Salaryman B;Salaryman B;; -1023;Lilimonzaemon;Lilimonzaemon;; 1024;Tai;Taichi;[]; -1025;Matt;Yamato;; -1026;Sora;Sora;; +1025;Matt;Yamato;[]; 1027;Davis;Daisuke;; -1028;Takato;Takato;; -1029;Iyoku, editor-in-chief;Iyoku, editor-in-chief;; -1030;Male Student C;Male Student C;; -1031;Female Student C;Female Student C;; 1032;Izzy Izumi;Koushiro Izumi;; -1033;Mimi Tachikawa;Mimi Tachikawa;; -1034;Joe Kido;Joe Kido;; -1035;Takeru Takaishi;Takeru Takaishi;; 1036;Kari Kamiya;Hikari Yagami;; 1037;Marcus Damon;Masaru Daimon;; 1055;Izzy Izumi;Kosuhiro Izumi;; -1056;Mimi Tachikawa;Mimi Tachikawa;; -1057;Joe Kido;Joe Kido;; -1058;Takeru Takaishi;Takeru Takaishi;; 1059;Kari Kamiya;Hikari Yagami;; -1060;Marcus Damon;Masaru Daimon;; -1062;Taiga;Taiga;; -1063;Rina;Rina;; \ No newline at end of file +1060;Marcus Damon;Masaru Daimon;; \ No newline at end of file diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/DigimonNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/DigimonNames.csv index be5f06c..c0cfe0f 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/DigimonNames.csv +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/DigimonNames.csv @@ -1,219 +1,73 @@ index;original;replace;excludeTerms;excludePaths -1;Dodomon;Dodomon;; -2;Botamon;Botamon;; 3;Jarimon;Jyarimon;; -4;Yuramon;Yuramon;; -5;Poyomon;Poyomon;; -6;Wanyamon;Wanyamon;; -7;Koromon;Koromon;; -8;Gigimon;Gigimon;; -9;Budmon;Budmon;; -10;Tokomon;Tokomon;; -11;Hagurumon;Hagurumon;; 12;Candlemon;Candmon;; 13;Chuumon;Tyumon;; 14;Tsukaimon;Tukaimon;; 15;Agumon;Agumon;; -16;Kamemon;Kamemon;; -17;Kudamon;Kudamon;; -18;Gaomon;Gaomon;; -19;Lalamon;Lalamon;; -20;Impmon;Impmon;; -21;Guilmon;Guilmon;; -22;Patamon;Patamon;; 23;DemiDevimon;PicoDevimon;; 24;BlackGabumon;Gabumon (Black);; -25;Psychemon;Psychemon;; -26;Goburimon;Goburimon;; 27;Dorumon;DORUmon;; 28;Veemon;V-mon;; 29;SnowAgumon;YukiAgumon;; 30;BlackAgumon;Agumon (Black);; -31;Gabumon;Gabumon;; -33;Solarmon;Solarmon;; -35;Tentomon;Tentomon;; 36;Biyomon;Piyomon;; -37;Meramon;Meramon;; -38;Airdramon;Airdramon;; -39;Garurumon;Garurumon;; -40;Bakemon;Bakemon;; -43;Whamon;Whamon;; 45;BlackGatomon;BlackTailmon;; -47;GeoGreymon;GeoGreymon;; -48;Sunflowmon;Sunflowmon;; -49;Gaogamon;Gaogamon;; -50;Numemon;Numemon;; -51;Leomon;Leomon;; 53;Growlmon;Growmon;; -54;Angemon;Angemon;; 55;Growlmon (Orange);Growmon (Orange);; 56;Gatomon;Tailmon;; -57;Devimon;Devimon;; 58;BlackGrowlmon;BlackGrowmon;; -59;IceDevimon;IceDevimon;; 61;BlackGarurumon;Garurumon (Black);; -62;Gururumon;Gururumon;; -63;Geremon;Geremon;; -66;Kabuterimon;Kabuterimon;; 67;Birdramon;Birdramon;; 68;Sukamon;Scumon;; 69;Vegiemon;Vegimon;; -70;Greymon;Greymon;; -72;Lucemon FM;Lucemon FM;; -74;Monzaemon;Monzaemon;; -75;RizeGreymon;RizeGreymon;; -76;Lilamon;Lilamon;; -77;MachGaogamon;MachGaogamon;; 81;Myotismon;Vamdemon;; -82;Stingmon;Stingmon;; 83;MagnaAngemon;HolyAngemon;; -84;LadyDevimon;LadyDevimon;; -85;MegaSeadramon;MegaSeadramon;; -87;WarGrowlmon;WarGrowlmon;; 88;B-WarGrowlmon;MegaloGrowmon (Black);; -89;WereGarurumon;WereGarurumon;; -90;Angewomon;Angewomon;; -91;BlueMeramon;BlueMeramon;; 92;B-WereGarurumon;WereGarurumon (Black);; 95;WarGrowlmon (Orange);MegaloGrowmon (Orange);; -97;Megadramon;Megadramon;; -98;MetalGreymon;MetalGreymon;; 99;MegaKabuterimon;AtlurKabuterimon;; -100;Garudamon;Garudamon;; -101;Etemon;Etemon;; 102;MarineAngemon;MarinAngemon;; -103;WarGreymon;WarGreymon;; -104;Lilithmon;Lilithmon;; 105;Beelzemon;Beelzebumon;; -106;Barbamon;Barbamon;; -107;Leviamon;Leviamon;; 108;Daemon;Demon;; -109;Belphemon;Belphemon;; -110;Chaosmon;Chaosmon;; -111;Darkdramon;Darkdramon;; -112;BanchoLeomon;BanchoLeomon;; -113;Rosemon;Rosemon;; -114;PlatinumNumemon;PlatinumNumemon;; -116;Omegamon;Omegamon;; -117;ShineGreymon;ShineGreymon;; -118;MirageGaogamon;MirageGaogamon;; -120;WarGreymon X;WarGreymon X;; 121;Gallantmon;Dukemon;; -122;MetalGarurumon;MetalGarurumon;; 123;ChaosGallantmon;ChaosDukemon;; -124;BlackWarGreymon;BlackWarGreymon;; -125;BlackMetalGarurumon;BlackMetalGarurumon;; 131;ZeedGarurumon;Z'dGarurumon;; -132;VictoryGreymon;VictoryGreymon;; -136;Examon;Examon;; -137;Jijimon;Jijimon;; 138;HerculesKabuterimon;HerakleKabuterimon;; 139;Phoenixmon;Hououmon;; -140;MetalEtemon;MetalEtemon;; -141;Seraphimon;Seraphimon;; -142;MetalGreymon (Virus);MetalGreymon (Virus);; -143;Apocalymon;Apocalymon;; -144;Vitium;Vitium;; -145;Vitium;Vitium;; -146;Vitium;Vitium;; -147;Vitium;Vitium;; -148;BlackWarGreymon X;BlackWarGreymon X;; -149;Agumon;Agumon;; -150;Guardromon;Guardromon;; -151;Andromon;Andromon;; -152;Gomamon;Gomamon;; -153;Ikkakumon;Ikkakumon;; -154;Zudomon;Zudomon;; -155;Vikemon;Vikemon;; -156;Seadramon;Seadramon;; -157;Palmon;Palmon;; -158;Togemon;Togemon;; -159;Examon (Boss);Examon (Boss);; -160;Monzaemon (Alternate Color);Monzaemon (Alternate Color);; -161;Rosemon X;Rosemon X;; -162;Agumon X;Agumon X;; -163;Greymon X;Greymon X;; -164;Seadramon X;Seadramon X;; -165;Gomamon X;Gomamon X;; -166;Omegamon X;Omegamon X;; 167;Gallantmon X;Dukemon X;; 168;Lillymon;Lilimon;; -169;Yggdrasill;Yggdrasill;; 170;Salamon;Plotmon;; 171;Salamon X;Plotmon X;; 172;Tyrannomon;Tyranomon;; 173;MetalTyrannomon;MetalTyranomon;; 174;ExVeemon;XV-mon;; 175;Dexmon;Death-X-mon;; -176;Kuwagamon;Kuwagamon;; -177;Shellmon;Shellmon;; -178;Monochromon;Monochromon;; 179;Frigimon;Yukidarumon;; -180;Mojyamon;Mojyamon;; 181;Centarumon;Centalmon;; -182;Drimogemon;Drimogemon;; -183;Digitamamon;Digitamamon;; -184;Nanimon;Nanimon;; 185;ShogunGekomon;TonosamaGekomon;; 186;Wizardmon;Wizarmon;; 187;Deramon;Delumon;; 188;Cherrymon;Jyureimon;; 189;Garbagemon;Gerbemon;; -190;WaruMonzaemon;WaruMonzaemon;; -191;Magnamon;Magnamon;; 192;RustTyrannomon;RustTyranomon;; -193;Agumon;Agumon;; 194;Machinedramon;Mugendramon;; -195;Pabumon;Pabumon;; 196;Motimon;Mochimon;; -197;Betamon;Betamon;; -198;Lucemon;Lucemon;; -199;Renamon;Renamon;; -200;Wormmon;Wormmon;; -201;Woodmon;Woodmon;; 202;Ogremon;Orgemon;; -203;Kyubimon;Kyubimon;; 204;Dorugamon;DORUgamon;; 205;Veedramon;V-dramon;; -206;Clockmon;Clockmon;; -207;Gekomon;Gekomon;; 208;AeroVeedramon;AeroV-dramon;; -209;Okuwamon;Okuwamon;; -210;Gigadramon;Gigadramon;; 211;GrapLeomon;GrappuLeomon;; -212;SkullGreymon;SkullGreymon;; -213;Taomon;Taomon;; 214;SkullMeramon;DeathMeramon;; 215;DoruGreymon;DORUguremon;; -216;Paildramon;Paildramon;; 217;IceLeomon;Panjyamon;; 218;Piximon;Piccolomon;; -219;Vademon;Vademon;; -220;Mamemon;Mamemon;; -221;MetalMamemon;MetalMamemon;; -222;Parrotmon;Parrotmon;; 223;MasterTyrannomon;MasterTyranomon;; -224;Alphamon;Alphamon;; 225;UlforceVeedramon;UlforceV-dramon;; 226;UlforceVeedramon X;UlforceV-dramon X;; -227;Imperialdramon FM;Imperialdramon FM;; -228;Imperialdramon PM;Imperialdramon PM;; 229;Ophanimon;Ofanimon;; -230;Chaosdramon;Chaosdramon;; 231;GrandKuwagamon;GranKuwagamon;; -232;SaberLeomon;SaberLeomon;; -233;Sakuyamon;Sakuyamon;; 234;Hi-Andromon;HiAndromon;; 235;Piedmon;Piemon;; 236;Puppetmon;Pinochimon;; -237;PrinceMamemon;PrinceMamemon;; 238;Beelzemon X;Beelzebumon X;; -239;Boltmon;Boltmon;; -240;Magnamon X;Magnamon X;; -241;MetalGarurumon X;MetalGarurumon X;; -242;MetalSeadramon;MetalSeadramon;; -243;Lucemon Satan Mode;Lucemon Satan Mode;; -244;Punimon;Punimon;; -245;Tsunomon;Tunomon;; -246;Belphemon Sleep Mode;Belphemon Sleep Mode;; -247;Titamon;Titamon;; \ No newline at end of file +245;Tsunomon;Tunomon;; \ No newline at end of file diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/FinisherNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/FinisherNames.csv index 9a68fdf..5e92d94 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/FinisherNames.csv +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/FinisherNames.csv @@ -1,46 +1,26 @@ index;original;replace;excludeTerms;excludePaths 1;Cog Crusher;Darkness Gear;; 2;Flame Bomber;Bonfire;; -3;Cheese Bomb;Cheese Bomb;; -4;Bad Message;Bad Message;; 5;Pepper Breath;Baby Flame;; 6;Armored Arrow;Pointer Arrow;; 7;Horn Blaster;Holy Shot;; -8;Rolling Upper;Rolling Upper;; 9;Seed Blast;Nuts Shoot;; 10;Bada Boom;Night of Fire;; 11;Fireball;Fire Ball;; 12;Boom Bubble;Air Shot;; 13;Demi Darts;Pico Darts;; 14;Blue Blaster;Petit Fire;; -15;Colorful Spark;Colorful Spark;; -16;Goburi Strike;Goburi Strike;; -17;Metal Cannon;Metal Cannon;; 18;Vee Headbutt;V-mon Head;; 19;Frozen Wind;Little Blizzard;; 20;Pepper Breath;Baby Flame;; 21;Blue Blaster;Petit Fire;; -22;Special Move 22;Special Move 22;; -23;Shiny Ring;Shiny Ring;; -24;Special Move 24;Special Move 24;; 25;Super Shocker;Petit Thunder;; 26;Spiral Twister;Magical Fire;; -27;Burning Fist;Burning Fist;; -28;Spinning Needle;Spinning Needle;; 29;Howling Blaster;Fox Fire;; 30;Evil Charm;Death Charm;; -31;Special Move 31;Special Move 31;; -32;Special Move 32;Special Move 32;; -33;Special Move 33;Special Move 33;; -34;Special Move 34;Special Move 34;; 35;Lightning Paw;Neko Punch;; -36;Special Move 36;Special Move 36;; 37;Nova Blast;Mega Flame;; -38;Sunshine Beam;Sunshine Beam;; -39;Spiral Blow;Spiral Blow;; 40;Nume-Sludge;Poop Throw;; -41;Fist of the Beast King;Fist of the Beast King;; -42;Special Move 42;Special Move 42;; 43;Pyro Blaster;Exhaust Flame;; 44;Hand of Fate;Heaven's Knuckle;; 45;Pyro Blaster;Exhaust Flame;; @@ -48,188 +28,69 @@ index;original;replace;excludeTerms;excludePaths 47;Touch of Evil;Death Claw;; 48;Pyro Blaster;Exhaust Flame;; 49;Frozen Claw;Frost Claw;; -50;Special Move 50;Special Move 50;; 51;Howling Blaster;Fox Fire;; -52;Chaos Fire;Chaos Fire;; -53;Hyper Smell;Hyper Smell;; -54;Special Move 54;Special Move 54;; -55;Special Move 55;Special Move 55;; 56;Electro Shocker;Mega Blaster;; -57;Meteor Wing;Meteor Wing;; 58;Party Time;Poop Throw;; 59;Party Time;Poop Throw;; 60;Nova Blast;Mega Flame;; -61;Special Move 61;Special Move 61;; 62;Ultimate Sacrifice;Dead or Alive;; -63;Special Move 63;Special Move 63;; 64;Hearts Attack;Lovely Attack;; -65;Rising Destroyer;Rising Destroyer;; -66;Lila Shower;Lila Shower;; -67;Winning Knuckle;Winning Knuckle;; -68;Special Move 68;Special Move 68;; -69;Special Move 69;Special Move 69;; -70;Special Move 70;Special Move 70;; 71;Grisly Wing;Night Raid;; 72;Spiking Strike;Spiking Finish;; 73;Gate of Destiny;Heaven's Gate;; -74;Darkness Wave;Darkness Wave;; 75;Lightning Javelin;Thunder Javelin;; -76;Special Move 76;Special Move 76;; -77;Atomic Blaster;Atomic Blaster;; -78;Atomic Blaster;Atomic Blaster;; 79;Wolf Claw;Kaiser Nail;; 80;Celestial Arrow;Holy Arrow;; -81;Ice Phantom;Ice Phantom;; 82;Wolf Claw;Kaiser Nail;; -83;Special Move 83;Special Move 83;; -84;Special Move 84;Special Move 84;; -85;Atomic Blaster;Atomic Blaster;; -86;Special Move 86;Special Move 86;; 87;Dark Side Attack;Genocide Attack;; 88;Giga Blaster;Giga Destroyer;; -89;Horn Buster;Horn Buster;; 90;Wing Blade;Shadow Wing;; 91;Concert Crush;Love Serenade;; 92;Kahuna Waves;Ocean Love;; 93;Terra Force;Gaia Force;; -94;Phantom Pain;Phantom Pain;; -95;Double Impact;Double Impact;; -96;Pandemonium Lost;Pandemonium Lost;; -97;Special Move 97;Special Move 97;; -98;Special Move 98;Special Move 98;; -99;Special Move 99;Special Move 99;; -100;Dark Prominence;Dark Prominence;; -101;Dark Roar;Dark Roar;; 102;Lion Slash;Shishiraouzan;; -103;Thorn Whip;Thorn Whip;; 104;Excrement;Platinum Excrement;; -105;Special Move 105;Special Move 105;; 106;Supreme Cannon;Garuru Cannon;; -107;Glorious Burst;Glorious Burst;; -108;Full Moon Blaster;Full Moon Blaster;; -109;Special Move 109;Special Move 109;; -110;Poseidon Force;Poseidon Force;; 111;Lightning Joust;Royal Saber;; 112;Metal Wolf Claw;Cocytus Breath;; 113;Demon's Disaster;Demons Disaster;; 114;Terra Destroyer;Dark Gaia Force;; 115;Metal Wolf Claw;Cocytus Breath;; -116;Special Move 116;Special Move 116;; -117;Special Move 117;Special Move 117;; -118;Special Move 118;Special Move 118;; -119;Special Move 119;Special Move 119;; -120;Special Move 120;Special Move 120;; 121;Full Metal Breath;Full Metal Blaze;; -122;Trident Gaia;Trident Gaia;; -123;Special Move 123;Special Move 123;; -124;Special Move 124;Special Move 124;; -125;Special Move 125;Special Move 125;; -126;Pendragon's Glory;Pendragon's Glory;; -127;Special Move 127;Special Move 127;; -128;Giga Blaster;Giga Blaster;; -129;Starlight Explosion;Starlight Explosion;; -130;Banana Slip;Banana Slip;; 131;Strike of the Seven Stars;Seven Heavens;; 132;Giga Blaster;Giga Destroyer;; -133;Darkness Zone;Darkness Zone;; -134;Boss Childhood Frame;Boss Childhood Frame;; -135;Garbage Collection;Garbage Collection;; -136;Reduction;Reduction;; -137;Refactoring;Refactoring;; -138;Hades Force;Hades Force;; 139;Pepper Breath;Baby Flame;; -140;Destruction Grenade;Destruction Grenade;; 141;Thunder Blast;Spiral Sword;; -142;Marching Fishes;Marching Fishes;; 143;Harpoon Torpedo;Harpoon Vulcan;; 144;Vulcan's Hammer;Hammer Spark;; -145;Arctic Blizzard;Arctic Blizzard;; 146;Ice Blast;Ice Arrow;; -147;Poison Ivy;Poison Ivy;; 148;Needle Spray;Prickly Bang Bang;; -149;Pendragon's Glory;Pendragon's Glory;; 150;Hearts Attack;Lovely Attack;; -151;Rosen Blood;Rosen Blood;; -152;Baby Burner;Baby Burner;; -153;Mega Burst;Mega Burst;; -154;Ice Spear;Ice Spear;; -155;Goma Milk Death;Goma Milk Death;; -156;All Delete;All Delete;; -157;Sieg Saber;Sieg Saber;; -158;Flower Cannon;Flower Cannon;; -159;Giant Crystal;Giant Crystal;; -160;Puppy Howling;Puppy Howling;; -161;Puppy Howling;Puppy Howling;; -162;Fire Breath;Fire Breath;; -163;Nuclear Laser;Nuclear Laser;; -164;X-Laser;X-Laser;; -165;Process F;Process F;; -166;Scissor Arms;Scissor Arms;; -167;Special Move 167;Special Move 167;; -168;Special Move 168;Special Move 168;; -169;Special Move 169;Special Move 169;; -170;Special Move 170;Special Move 170;; -171;Hunting Cannon;Hunting Cannon;; -172;Special Move 172;Special Move 172;; -173;Nightmare Syndrome;Nightmare Syndrome;; -174;Special Move 174;Special Move 174;; -175;Special Move 175;Special Move 175;; -176;Special Move 176;Special Move 176;; -177;Special Move 177;Special Move 177;; -178;Cherry Bomb;Cherry Bomb;; -179;Special Move 179;Special Move 179;; -180;Heartbreak Attack;Heartbreak Attack;; -181;Shining Gold Solar Storm;Shining Gold Solar Storm;; -182;Terror's Cluster;Terror's Cluster;; 183;Pepper Breath;Baby Flame;; 184;Infinity Cannon;Mugen Cannon;; -185;Electric Shock;Electric Shock;; -186;Grand Cross;Grand Cross;; 187;Diamond Storm;Koyōsetsu;; 188;Sticky Net;Nebaneba Net;; -189;Branch Drain;Branch Drain;; -190;Tyrant Fist;Tyrant Fist;; 191;Dragon Wheel;Koenryū;; -192;Power Metal;Power Metal;; 193;V-Nova Blast;V-Breath Arrow;; -194;Chrono Breaker;Chrono Breaker;; 195;Crash Symphony;Crush Symphony;; -196;Dragon Impulse;Dragon Impulse;; 197;Double Scissor Claw;Scissor Arms Ω;; -198;Genocide Gear;Genocide Gear;; 199;Cyclone Turbine;Senpū Turbine Geri;; 200;Dark Shot;Ground Zero;; 201;Talisman of Light;Bonhitsusen;; 202;Metal Fireball;Heavy Metal Fire;; 203;Galactic Flare;Cosmo Flash;; -204;Desperado Blaster;Desperado Blaster;; 205;Frozen Fury;Hyoujūken;; 206;Pit Bomb;Bit Bomb;; 207;Abduction Beam;Abduction Kousen;; 208;Smirk Bomb;Big Smiley Bomber;; 209;Metal Smirk Bomb;Energy Bomb;; 210;Mjoelnir Thunder;Mjölnir Thunder;; -211;Master Fire;Master Fire;; 212;Ultimate Ouryuken;Kyūkyoku Senjin Ouryūken;; 213;Ray of Victory;Shining V Force;; 214;Ray of Victory;Shining V Force;; 215;Giga Crusher;Giga Death;; -216;Omega Blade;Omega Blade;; -217;Eden's Javelin;Eden's Javelin;; 218;Hyper Infinity Cannon;Hyper Mugen Cannon;; -219;Dimension Scissor;Dimension Scissor;; -220;Infinity Arrow;Infinity Arrow;; 221;Amethyst Mandala;Kongoukai Mandara;; -222;Atomic Ray;Atomic Ray;; -223;Trump Sword;Trump Sword;; 224;Puppet Pummel;Bullet Hammer;; -225;Smiley Warhead;Smiley Warhead;; -226;Double Impact;Double Impact;; -227;Tomahawk Steiner;Tomahawk Steiner;; -228;Shining Gold Solar Storm;Shining Gold Solar Storm;; -229;Metal Storm;Metal Storm;; 230;River of Power;Ultimate Stream;; -231;Divine Atonement;Divine Atonement;; -232;Eternal Nightmare;Eternal Nightmare;; -233;Soul Core Attack;Konpaku Shingeki;; -234;Special Move 999;Special Move 999;; \ No newline at end of file +233;Soul Core Attack;Konpaku Shingeki;; \ No newline at end of file diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/GlossaryNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/GlossaryNames.csv index 5b37036..63d590c 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/GlossaryNames.csv +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/GlossaryNames.csv @@ -1,97 +1,2 @@ index;original;replace;excludeTerms;excludePaths -0;Railroad Plains;Railroad Plains;; -1;Signpost Forest;Signpost Forest;; -2;Fluorescent Cave;Fluorescent Cave;; -3;Sunken Capital;Sunken Capital;; -4;Gravel Wasteland;Gravel Wasteland;; -5;Night Canyon;Night Canyon;; -6;Sewer Maze;Sewer Maze;; -7;Bonkeno Volcano;Bonkeno Volcano;; -8;Powdery Cliff;Powdery Cliff;; -9;Binary Castle;Binary Castle;; -10;Akiho Rindo;Akiho Rindo;; -11;Nikolai Petrov;Nikolai Petrov;; -12;Digitorin;Digitorin;; -13;Sashenka;Sashenka;; -14;;;; -15;Yuuya Kuga;Yuuya Kuga;; -16;Black;Black;; -17;Mirei Mikagura;Mirei Mikagura;; -18;Mirei's Partners;Mirei's Partners;; -19;Dr. Petrov;Dr. Petrov;; -20;Kenzou Kuga;Kenzou Kuga;; -21;Partner Digimon;Partner Digimon;; -22;File Island;File Island;; -23;Digital World;Digital World;; -24;Digimon;Digimon;; -25;Chrome Digizoid;Chrome Digizoid;; -26;X-Antibody;X-Antibody;; -27;Digivice;Digivice;; -28;GIGO Company;GIGO Company;; -29;Digital Monsters;Digital Monsters;; -30;Blackening Incident;Blackening Incident;; -31;Memorial Stela;Memorial Stela;; -32;Digitize;Digitize;; -33;Re:Digitize;Re:Digitize;; -34;Digitower;Digitower;; -35;Digital Life Form;Digital Life Form;; -36;Garbage Data;Garbage Data;; -37;Colosseum;Colosseum;; -38;Digital Divide;Digital Divide;; -39;GIGO HQ;GIGO HQ;; -40;GIGO;GIGO;; -41;Dimensional Distortion;Dimensional Distortion;; -42;Ancient Bone Swamp;Ancient Bone Swamp;; -43;Vitium;Vitium;; -44;Tamer;Tamer;; -45;LIFE;LIFE;; -46;Special;Special;; -47;Attribute;Attribute;; -48;Nature;Nature;; -49;Emotions;Emotions;; -50;Weight;Weight;; -51;Digimon;Digimon;; -52;Active Hours;Active Hours;; -53;Happiness;Happiness;; -54;Discipline;Discipline;; -55;Poop;Poop;; -56;Digital Storage;Digital Storage;; -57;DigiMemory;DigiMemory;; -58;Brains;Brains;; -59;Speed;Speed;; -60;Care Mistakes;Care Mistakes;; -61;Training;Training;; -62;Warehouse;Warehouse;; -63;Restaurant;Restaurant;; -64;Item Shop;Item Shop;; -65;Training Gym;Training Gym;; -66;Angel Clinic;Angel Clinic;; -67;Treasure Hunting Shop;Treasure Hunting Shop;; -68;Secret Item Shop;Secret Item Shop;; -69;Card Collector;Card Collector;; -70;Birdra Transport;Birdra Transport;; -71;Accessory Shop;Accessory Shop;; -72;Taiga;Taiga;; -73;Dimensional Collapse;Dimensional Collapse;; -74;X-Program (temporary);X-Program (temporary);; -75;Mt. Infinity (temporary);Mt. Infinity (temporary);; -76;Mt. Infinity Anomaly (temporary);Mt. Infinity Anomaly (temporary);; -77;Train Garage;Train Garage;; -78;Cherry's Observatory;Cherry's Observatory;; -79;Whamon's Wharf;Whamon's Wharf;; -80;Big Cauldron Hall;Big Cauldron Hall;; -81;Rina Shinomiya;Rina Shinomiya;; -82;Lili;Lili;; -83;Sebastian;Sebastian;; -84;X-Program;X-Program;; -85;Infinity Mountain;Infinity Mountain;; -86;Yggdrasill;Yggdrasill;; -87;Machinedramon;Mugendramon;; -88;7 Great Demon Lords;7 Great Demon Lords;; -89;Dark Area;Dark Area;; -90;Digitter;Digitter;; -91;Decode Ability;Decode Ability;; -92;Larva Decoder;Larva Decoder;; -93;Parrot Carrier;Parrot Carrier;; -94;DoReMiFa Mansion;DoReMiFa Mansion;; -95;Master Bar;Master Bar;; \ No newline at end of file +87;Machinedramon;Mugendramon;; \ No newline at end of file diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/MedalNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/MedalNames.csv index f97146b..6f2d82c 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/MedalNames.csv +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/MedalNames.csv @@ -1,101 +1,2 @@ index;original;replace;excludeTerms;excludePaths -0;Throbbing Adaptability;Throbbing Adaptability;; -1;Jijimon's Gratitude;Jijimon's Gratitude;; -2;Bancho;Bancho;; -3;World Savior;World Savior;; -4;Water Walker;Water Walker;; -5;Forest Guide;Forest Guide;; -6;Eye for Detail;Eye for Detail;; -7;Bike Expert;Bike Expert;; -8;Hercules;Hercules;; -9;Kind Heart;Kind Heart;; -10;Lucky Duck;Lucky Duck;; -11;Time Guardian;Time Guardian;; -12;Ultimate;Ultimate;; -13;Ultimaster;Ultimaster;; -14;Agumon is ♥;Agumon is ♥;; -15;I ♥ DIGIMON;I ♥ DIGIMON;; -16;Dr. Digimon;Dr. Digimon;; -17;Transcended Grief;Transcended Grief;; -18;City Workhorse;City Workhorse;; -19;City Leader;City Leader;; -20;City Hero;City Hero;; -21;Tenacious Devil;Tenacious Devil;; -22;Strong Veteran;Strong Veteran;; -23;Eagle-Eye;Eagle-Eye;; -24;Perfect Win;Perfect Win;; -25;Challenger;Challenger;; -26;Nice Combo;Nice Combo;; -27;Timekeeper;Timekeeper;; -28;Friendship!;Friendship!;; -29;Colosseum Champion;Colosseum Champion;; -30;Gladiator;Gladiator;; -31;Leave it to me!;Leave it to me!;; -32;I ♥ QUESTS;I ♥ QUESTS;; -33;Local Gamer;Local Gamer;; -34;Card Mania;Card Mania;; -35;Rookie Collector;Rookie Collector;; -36;Advanced Collector;Advanced Collector;; -37;Professional Collector;Professional Collector;; -38;Royal Collector;Royal Collector;; -39;File Island Collector;File Island Collector;; -40;Fire Master;Fire Master;; -41;Ice Master;Ice Master;; -42;Air Master;Air Master;; -43;Nature Master;Nature Master;; -44;Combat Master;Combat Master;; -45;L&D Master;L&D Master;; -46;Machine Master;Machine Master;; -47;Filth Master;Filth Master;; -48;Master of all Skills;Master of all Skills;; -49;One Pointer;One Pointer;; -50;Digimon Stylist;Digimon Stylist;; -51;I ♥ ACCESORIES;I ♥ ACCESORIES;; -52;Information Collector;Information Collector;; -53;Many Friends;Many Friends;; -54;Walking Dictionary;Walking Dictionary;; -55;Full Potential;Full Potential;; -56;Digital Merchant;Digital Merchant;; -57;Cyberspace Resident;Cyberspace Resident;; -58;Novice Fisherman;Novice Fisherman;; -59;Hooked on Fishing;Hooked on Fishing;; -60;Fish Master;Fish Master;; -61;Strongest;Strongest;; -62;X-Evolution;X-Evolution;; -63;Tyranno-Mania;Tyrano-Mania;; -64;Tweet-Mania;Tweet-Mania;; -65;Kuwagamon's Disciple;Kuwagamon's Disciple;; -66;Meat Field Firefighter;Meat Field Firefighter;; -67;Local Drinks Mania;Local Drinks Mania;; -68;DoReMiFa Manager;DoReMiFa Manager;; -69;Carpenter Assistant;Carpenter Assistant;; -70;Marvelous Manager;Marvelous Manager;; -71;World's No.1 Manager;World's No.1 Manager;; -72;Garbage Collector;Garbage Collector;; -73;Marathon Runner;Marathon Runner;; -74;Saving Freak;Saving Freak;; -75;Crown Hunter;Crown Hunter;; -76;I ♥ MEAT;I ♥ MEAT;; -77;Gourmet;Gourmet;; -78;Treasure Mania;Treasure Mania;; -79;Frequent flier;Frequent flier;; -80;Fond of Divination;Fond of Divination;; -81;Magical Experiments;Magical Experiments;; -82;Garbage Fisher;Garbage Fisher;; -83;Hide-and-seek Freak;Hide-and-seek Freak;; -84;Bodyguard-Mania;Bodyguard-Mania;; -85;Awakening the Giant;Awakening the Giant;; -86;Universe Whisperer;Universe Whisperer;; -87;Bearer of the Aptitude;Bearer of the Aptitude;; -88;Time Traveller;Time Traveller;; -89;Tenkaichi Champion;Tenkaichi Champion;; -90;Bounty Hunter;Bounty Hunter;; -91;Killing Machine;Killing Machine;; -92;Invincible;Invincible;; -93;Frigiman;Frigiman;; -94;Grown-up;Grown-up;; -95;Abyss Returnee;Abyss Returnee;; -96;Infinity Conqueror;Infinity Conqueror;; -97;World Challenger;World Challenger;; -98;Legendary Hiro;Legendary Hiro;; -99;Re:Digitize;Re:Digitize;; \ No newline at end of file +63;Tyranno-Mania;Tyrano-Mania;; \ No newline at end of file diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/NatureNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/NatureNames.csv deleted file mode 100644 index f2ff75e..0000000 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/NatureNames.csv +++ /dev/null @@ -1,16 +0,0 @@ -index;original;replace;excludeTerms;excludePaths -0;Lively;Lively;; -1;Brave;Brave;; -2;Hardy;Hardy;; -3;Relaxed;Relaxed;; -4;Clever;Clever;; -5;Quiet;Quiet;; -6;Calm;Calm;; -7;Strategist;Strategist;; -8;Timid;Timid;; -9;Combi A;Combi A;; -10;Combi B;Combi B;; -11;Schemer;Schemer;; -12;Burst;Burst;; -13;Build;Build;; -14;Crafty;Crafty;; \ No newline at end of file diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/SkillNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/SkillNames.csv deleted file mode 100644 index 2c64537..0000000 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/SkillNames.csv +++ /dev/null @@ -1,62 +0,0 @@ -index;original;replace;excludeTerms;excludePaths -1;Fire Breath;Fire Breath;; -2;Fire Tower;Fire Tower;; -3;Fire Wall;Fire Wall;; -4;Mine;Mine;; -5;Spread Bomb;Spread Bomb;; -6;Magma Bomb;Magma Bomb;; -7;Flame Storm;Flame Storm;; -8;Bubble Breath;Bubble Breath;; -9;Hailstone;Hailstone;; -10;Splash;Splash;; -11;Waterfall;Waterfall;; -12;Heavy Rain;Heavy Rain;; -13;Ice Statue;Ice Statue;; -14;Aurora Freeze;Aurora Freeze;; -15;Electric Shoot;Electric Shoot;; -16;Wind Shoes;Wind Shoes;; -17;Air Cutter;Air Cutter;; -18;Electric Cloud;Electric Cloud;; -19;Thunderstorm;Thunderstorm;; -20;Confuse Storm;Confuse Storm;; -21;Hurricane;Hurricane;; -22;Poison Powder;Poison Powder;; -23;Earth Coat;Earth Coat;; -24;Poison Circle;Poison Circle;; -25;Roots Bind;Roots Bind;; -26;Rock Fall;Rock Fall;; -27;Land Slide;Land Slide;; -28;Poison Storm;Poison Storm;; -29;Sonic Jab;Sonic Jab;; -30;Muscle Charge;Muscle Charge;; -31;Spin Attack;Spin Attack;; -32;Heavy Impact;Heavy Impact;; -33;War Cry;War Cry;; -34;Charge Attack;Charge Attack;; -35;Fighting Aura;Fighting Aura;; -36;Dark Spirit;Dark Spirit;; -37;Light Soul;Light Soul;; -38;Loose Cloud;Loose Cloud;; -39;Flash;Flash;; -40;Evil Squall;Evil Squall;; -41;Holy Sunshine;Holy Sunshine;; -42;Judgment;Judgment;; -43;Mechanical Claw;Mechanical Claw;; -44;Upgrade;Upgrade;; -45;Energy Ball;Energy Ball;; -46;Anti-Attack Field;Anti-Attack Field;; -47;Heavy Laser;Heavy Laser;; -48;Machine Fall;Machine Fall;; -49;DG Dimension V2;DG Dimension V2;; -50;Dirty Kick;Dirty Kick;; -51;Ultra Stink Spray;Ultra Stink Spray;; -52;Poop Trap;Poop Trap;; -53;Poop Barrier;Poop Barrier;; -54;Random Poop Toss;Random Poop Toss;; -55;Poop Fall;Poop Fall;; -56;Ultimate Poop Hell;Ultimate Poop Hell;; -57;Bubbles;Bubbles;; -58;Deadly Counter;Deadly Counter;; -59;Data Wave;Data Wave;; -60;Access Block;Access Block;; -61;Lossy Compression;Lossy Compression;; \ No newline at end of file From 934c2b71aa51db4239553067fb835611ae6c5d4d Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Thu, 16 May 2024 17:34:30 +0200 Subject: [PATCH 22/54] reordering, testing exclsuions --- .../randomizer/settings/NamingSettings.java | 16 +++++++--------- .../randomizer/renamingPresets/keep-15.csv | 8 ++++---- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index 7ec68f6..0a49da6 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -120,7 +120,7 @@ private class Replacement { public String original; public String replacement; private final List excludedTerms; - private final List disabledPaths = List.of(); + private final ArrayList disabledPaths = new ArrayList(); private final int matchLength; private int index = -1; private final boolean diffS; @@ -594,14 +594,13 @@ public void randomize(RandomizationContext context) { File startDir = new File(".\\working\\part0\\arcv\\"); //Sorting - List sortedReps = repMap.values().stream().sorted(Comparator.comparing(v -> v.original.length())).collect(Collectors.toList()); - + List sortedReps = repMap.values().stream().sorted(Comparator.comparing(v -> v.original.length() * -1)).collect(Collectors.toList()); + ArrayList> fileEntries = new ArrayList(); Utils.listFiles(startDir).stream() //Everything that could contain BTX .filter(s -> s.getName().endsWith("_jp.res") || s.getName().endsWith(".pack") ).forEach(fA -> { - try { Path longPath = fA.toPath(); Path normalPath = longPath.subpath(2, longPath.getNameCount()); @@ -610,21 +609,20 @@ public void randomize(RandomizationContext context) { if (elements.isEmpty()) { return; } - for (int i = 0; i < elements.size(); i++) { var payload = (BTXPayload) elements.get(i); String partialPath = normalPath.toString() + "\\" + (i); payload.getEntries().forEach(bt -> { - sortedReps.forEach(rep -> { - rep.replaceDynamic(bt.getValue(), partialPath + ":" + bt.getKey()); - }); + fileEntries.add(new Tuple(partialPath + ":" + bt.getKey(), bt.getValue())); }); } } catch (IOException e) { e.printStackTrace(); } - }); + sortedReps.forEach(rep -> { + fileEntries.forEach(t -> rep.replaceDynamic(t.getValue(), t.getKey())); + }); repMap.clear(); replacementMap.clear(); diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/keep-15.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/keep-15.csv index 0d3df07..52e5026 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/keep-15.csv +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/keep-15.csv @@ -11,12 +11,12 @@ index;original;replace;excludeTerms;excludePaths 9;BRN;BRN;; 10;Digimon;Digimon;; 11;Form;Form;; -12;Fresh;Baby I;; +12;Fresh;Baby I;Freshly;part0\arcv\Keep\LanguageKeep_jp.res\14:4227:-1 13;In-Training;Baby II;; 14;Rookie;Child;; -15;Champion;Adult;; -16;Ultimate;Perfect;; -17;Mega;Ultimate;; +15;Champion;Adult;Digimon\n$,Colosseum $,Tenkaichi $,You're the $; +16;Ultimate;Perfect;$ Piece,$ X Antibody,$Brachiomon,$Brachimon,$ Stream,$ body,$ victory,$ Sacrifice,$ Ouryuken,$ Poop Hell,$ Weapon,$ Cup,$ Herbal,$ Slicer,$ Enemy,$ Thunder,$\nBlast,$ Quake; +17;Mega;Ultimate;$ Meat,$ Blaster;$seadramon,$dramon,$Seadramon,$ Burst,$battle,$ly; 18;Armor;Armor;; 19;Special;Special;; 20;Attribute;Attribute;; From b31f5a80cced2feda51fabadeffb63c13459e7e1 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Thu, 16 May 2024 18:03:38 +0200 Subject: [PATCH 23/54] handling articles and apostrophes --- .../randomizer/settings/NamingSettings.java | 44 ++++++++++++++++--- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index 0a49da6..1f01d5a 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -207,7 +207,8 @@ public void replaceExact(BTXPayload btx, String path) { insertRepData(path + ":" + index, -1, Integer.MAX_VALUE, 0); } - private int correctApostrophe(BTXEntry btx, int start, int end) { + //Fixing mistakes like Davis' -> Daisuke' etc + private int correctApostrophe(BTXEntry btx, int end) { if (!diffS) { return 0; } @@ -215,14 +216,43 @@ private int correctApostrophe(BTXEntry btx, int start, int end) { if (text.length() == end) { return 0; } - return 0; + if (replacement.endsWith("s")) { + // remove s after apostrophe + if (text.substring(end, Math.min(end + 2, text.length())).equals("'s")) { + btx.setString(text.substring(0, end + 1) + text.substring(end + 2)); + return -1; + } else { + return 0; + } + } else { + // add s after apostrophe + if (text.substring(end, Math.min(end + 1, text.length())).equals("'")) { + btx.setString(text.substring(0, end + 1) + "s" + text.substring(end + 1)); + return 1; + } + return 0; + } } - private int correctArticle(BTXEntry btx, int start, int end) { + //Fixing mistakes like "a Scorpiomon" -> "a Anomalicarimon" + private int correctArticle(BTXEntry btx, int start) { if (!diffArt || start == 0) { return 0; } - return 0; + String text = btx.getString(); + if (vow.contains(replacement.substring(0, 1))) { + if (text.substring(Math.max(0, start - 3), start).matches(".*\ba\b.*")) { + btx.setString(text.substring(0, start - 1) + "n" + text.substring(start - 1)); + return 1; + } + return 0; + } else { + if (text.substring(Math.max(0, start - 4), start).matches(".*\ban\b.*")) { + btx.setString(text.substring(0, start - 2) + text.substring(start - 1)); + return -1; + } + return 0; + } } public void replaceDynamic(BTXEntry btx, String path) { @@ -233,10 +263,10 @@ public void replaceDynamic(BTXEntry btx, String path) { } int matchEnd = matchStart + matchLength; - btx.setString(origText.substring(0, matchStart) + replacement + origText.substring(matchEnd, origText.length())); + btx.setString(origText.substring(0, matchStart) + replacement + origText.substring(matchEnd)); - int artOff = correctArticle(btx, matchStart, matchEnd); - int apOff = correctApostrophe(btx, matchStart, matchEnd); + int artOff = correctArticle(btx, matchStart); + int apOff = correctApostrophe(btx, matchEnd); matchStart = matchStart + artOff; matchEnd = matchEnd + apOff; From a819bf5d1c4ad749bd05cb33d93606518ecc39b5 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Thu, 16 May 2024 20:21:59 +0200 Subject: [PATCH 24/54] Crest names --- .../decode/randomizer/renamingPresets/ItemNames.csv | 4 ++-- .../decode/randomizer/renamingPresets/KeyItemNames.csv | 4 ++-- .../decode/randomizer/renamingPresets/keep-15.csv | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/ItemNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/ItemNames.csv index c9fadcc..d3f2701 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/ItemNames.csv +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/ItemNames.csv @@ -348,8 +348,8 @@ index;original;replace;excludeTerms;excludePaths 369;Chip of Friendship;Chip of Friendship;; 370;Chip of Love;Chip of Love;; 371;Chip of Knowledge;Chip of Knowledge;; -372;Chip of Sincerity;Chip of Sincerity;; -373;Chip of Reliability;Chip of Reliability;; +372;Chip of Sincerity;Chip of Purity;; +373;Chip of Reliability;Chip of Sincerity;; 374;Chip of Hope;Chip of Hope;; 375;Chip of Light;Chip of Light;; 376;V Chip;V Chip;; diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/KeyItemNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/KeyItemNames.csv index da2219c..4cebc2e 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/KeyItemNames.csv +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/KeyItemNames.csv @@ -60,8 +60,8 @@ index;original;replace;excludeTerms;excludePaths 58;Crest of Friendship;Crest of Friendship;; 59;Crest of Love;Crest of Love;; 60;Crest of Knowledge;Crest of Knowledge;; -61;Crest of Reliability;Crest of Reliability;; -62;Crest of Sincerity;Crest of Sincerity;; +61;Crest of Reliability;Crest of Sincerity;; +62;Crest of Sincerity;Crest of Purity;; 63;Crest of Hope;Crest of Hope;; 64;Crest of Light;Crest of Light;; 65;Golden Digi-Egg;Golden Digimental;; diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/keep-15.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/keep-15.csv index 52e5026..b10c9fe 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/keep-15.csv +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/keep-15.csv @@ -16,7 +16,7 @@ index;original;replace;excludeTerms;excludePaths 14;Rookie;Child;; 15;Champion;Adult;Digimon\n$,Colosseum $,Tenkaichi $,You're the $; 16;Ultimate;Perfect;$ Piece,$ X Antibody,$Brachiomon,$Brachimon,$ Stream,$ body,$ victory,$ Sacrifice,$ Ouryuken,$ Poop Hell,$ Weapon,$ Cup,$ Herbal,$ Slicer,$ Enemy,$ Thunder,$\nBlast,$ Quake; -17;Mega;Ultimate;$ Meat,$ Blaster;$seadramon,$dramon,$Seadramon,$ Burst,$battle,$ly; +17;Mega;Ultimate;$ Meat,$ Blaster,$seadramon,$dramon,$Seadramon,$ Burst,$battle,$ly; 18;Armor;Armor;; 19;Special;Special;; 20;Attribute;Attribute;; From f06291600362269d798805d7414928dbb3adde3b Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Thu, 16 May 2024 20:23:05 +0200 Subject: [PATCH 25/54] disabled Paths fix --- .../digimonworld/decode/randomizer/settings/NamingSettings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index 1f01d5a..1180550 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -192,7 +192,7 @@ public Replacement(String index, String original, String replacement, String raw if (p.toLowerCase().equals("all")) { this.global = false; } else if (!p.equals("")) { - this.disabledPaths.add(new PathPosition(rawDisabledPaths)); + this.disabledPaths.add(new PathPosition(p)); } } } From 6cc7b4ccc8face6d3342d4911b69d3d44e8a19c5 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Thu, 16 May 2024 21:26:19 +0200 Subject: [PATCH 26/54] fix loading yaml --- .../randomizer/settings/NamingSettings.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index 1180550..3a65151 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -68,6 +68,7 @@ public class NamingSettings implements Setting { private final Map propertyMap = new HashMap<>(); private final Map randoMap = new HashMap<>(); private final List randoTypes = List.of("Digimon Names", "Finisher Names", "Skill Names", "Character Names", "Item Names", "Medal Names"); + private final List priorities = List.of("DigimonNames.csv", "CardNames1.csv"); private final Map repMap = new HashMap<>(); private Accordion mainAc; @@ -354,7 +355,7 @@ private boolean termExclusion(String text, int index) { return false; } - private boolean pathExclusion(String text, String path, int index) { + private boolean pathExclusion(String path, int index) { for (PathPosition p : disabledPaths) { if (p.path.equals(path) && (p.col == -1 || p.col == index)) { return true; @@ -366,7 +367,7 @@ private boolean pathExclusion(String text, String path, int index) { private int findInText(String text, String path) { int idx = text.indexOf(original); //If any of the exclusion - return (idx == -1 || termExclusion(text, idx) || pathExclusion(text, path, idx) || isOverlapping(path, idx)) ? -1 : idx; + return (idx == -1 || termExclusion(text, idx) || pathExclusion(path, idx) || isOverlapping(path, idx)) ? -1 : idx; } } @@ -607,7 +608,7 @@ public void randomize(RandomizationContext context) { origin = new File(DecodeRandomizer.class.getResource("renamingPresets/").getFile()); } List presets = List.of(origin.listFiles()); - presets.forEach(p -> { + presets.stream().forEach(p -> { String pName = p.getName(); try { Tuple foundBtx = res.resolve(pName.substring(0, pName.length() - 4)); @@ -681,6 +682,7 @@ public void randomize(RandomizationContext context) { btxSwitch(firstEntry, entries.get(0)); } } catch (ParseException e) { + e.printStackTrace(); } }); } @@ -707,11 +709,10 @@ public void load(YamlMapping map) { if (map == null) { return; } - - YamlSequence list = map.yamlSequence("checked"); - List activeList = list == null ? new ArrayList<>() - : list.values().stream().map(a -> Integer.parseInt(a.asScalar().value())).collect(Collectors.toList()); - propertyMap.forEach((a, b) -> b.set(activeList.contains(a))); + YamlSequence list = map.yamlSequence("randomChecked"); + List activeList = list == null ? new ArrayList<>() + : list.values().stream().map(a -> a.toString()).collect(Collectors.toList()); + randoMap.forEach((a, b) -> b.set(activeList.contains(a))); renameEnabled.set(Boolean.parseBoolean(map.string("enabled"))); } } From b54a1fb0201374a3d9d052db98b669fd85628b9e Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Fri, 17 May 2024 00:05:27 +0200 Subject: [PATCH 27/54] more cleanup --- .../randomizer/settings/NamingSettings.java | 61 +++++++++++-------- 1 file changed, 37 insertions(+), 24 deletions(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index 3a65151..71e2937 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -20,7 +20,6 @@ import java.text.ParseException; import java.util.NoSuchElementException; import java.util.Comparator; -import java.util.stream.Collector; import org.controlsfx.control.ToggleSwitch; @@ -68,14 +67,14 @@ public class NamingSettings implements Setting { private final Map propertyMap = new HashMap<>(); private final Map randoMap = new HashMap<>(); private final List randoTypes = List.of("Digimon Names", "Finisher Names", "Skill Names", "Character Names", "Item Names", "Medal Names"); - private final List priorities = List.of("DigimonNames.csv", "CardNames1.csv"); + private final List priorities = List.of("DigimonNames.csv", "CardNames1.csv", "FinisherNames.csv"); private final Map repMap = new HashMap<>(); private Accordion mainAc; /** * Visualization of a replacement map: * - * { "part0\arcv\Keep\LanguageKeep_jp.res\11:12" : [ [0,4,2], [8,13,-1] ] } + * { "part0\arcv\Keep\LanguageKeep_jp.res\11:12" : [ [0,4,2] , [8,13,-1] ] } * * Path schema works like this: * @@ -89,10 +88,19 @@ public class NamingSettings implements Setting { * processed by a prior replacement. The offsets are used to map a position * of a match to its position in the unmodified line, making it possible to * exclude replacing matches at specific indices in a line based on the - * original file. + * unmodified contents. */ public Map> replacementMap = new HashMap<>(); + /** + * DIGIMONMULTI designates names like WarGreymon or MetalGarurumon. + * + * All other DIGIMON names are simply other terms contained in a file + * designated as Digijmon name file. + * + * Everything else is classified as "GENERAL" + * + */ protected enum TermType { GENERAL, DIGIMON, @@ -101,12 +109,8 @@ protected enum TermType { private static TermType classifyTerm(String term, String path) { //These files contain digimon names - List digiNamePaths = List.of(11, 27, 28).stream() - .map(n -> "part0\\arcv\\Keep\\LanguageKeep_jp.res\\" + n).collect(Collectors.toList()); - if (!digiNamePaths.contains(path)) { - return TermType.GENERAL; - } - return term.matches(".*[a-z][A-Z].*") ? TermType.DIGIMONMULTI : TermType.DIGIMON; + List digiNamePaths = List.of(11, 27, 28).stream().map(n -> "part0\\arcv\\Keep\\LanguageKeep_jp.res\\" + n).collect(Collectors.toList()); + return digiNamePaths.contains(path) ? (term.matches(".*[a-z][A-Z].*") ? TermType.DIGIMONMULTI : TermType.DIGIMON) : TermType.GENERAL; } private static void btxSwitch(BTXEntry btxA, BTXEntry btxB) { @@ -116,6 +120,10 @@ private static void btxSwitch(BTXEntry btxA, BTXEntry btxB) { btxB.setString(a); } + /** + * This class does everything that has to do with replacing strings + * directly. + */ private class Replacement { public String original; @@ -138,13 +146,11 @@ private class PathPosition { public boolean valid = true; public PathPosition(String pathDescriptor) { - if (pathDescriptor.equals("")) { - this.valid = false; - return; - } - String[] splitter = pathDescriptor.split(":", -1); this.path = splitter[0]; + if (splitter.length == 0) { + return; + } this.line = Integer.parseInt(splitter[1]); if (splitter.length == 1) { this.col = -1; @@ -160,7 +166,7 @@ public Replacement(String index, String original, String replacement, String raw this.original = original; TermType tType = classifyTerm(replacement, origin); - + //Special modifications only apply to Digimon names if (!manualCsv.get() && tType != TermType.GENERAL) { if (ogre.get() && replacement.equals("Orgemon")) { this.replacement = "Ogremon"; @@ -175,7 +181,7 @@ public Replacement(String index, String original, String replacement, String raw } else { this.replacement = replacement; } - + //Separating multipart Digimon names Wikimon style if (tType == TermType.DIGIMONMULTI && !camelCase.get()) { this.replacement = this.replacement.replaceAll("([a-z])([A-Z])", "$1 $2"); } @@ -539,6 +545,9 @@ public PathResolver(RandomizationContext context) { this.keepMap.put("CardSetNames", "30"); } + /** + * Returns a file directly from the RandomizationContext + */ public ResPayload resolveRaw(String finalPath) throws IOException { try { return context.getFile(finalPath).get(); @@ -547,6 +556,9 @@ public ResPayload resolveRaw(String finalPath) throws IOException { } } + /** + * Resolves a path directly into BTX payloads while applying shortcuts + */ public Tuple resolve(String path) throws ParseException { ArrayList frag = new ArrayList<>( List.of((keepMap.containsKey(path) ? ("keep-" + keepMap.get(path)) : path).split("-"))); @@ -566,6 +578,10 @@ public Tuple resolve(String path) throws ParseException { } } + /** + * Replacing the contents of a BTX file based on a CSV that contains direct + * mappings to the BTX entry IDs + */ private void targetedBtxReplacement(BTXPayload btx, File f, String path) { System.out.println(f.getName()); try { @@ -581,7 +597,7 @@ private void targetedBtxReplacement(BTXPayload btx, File f, String path) { } Replacement rep = new Replacement(entries[0], entries[1], entries[2], entries[3], entries[4], path); rep.replaceExact(btx, path); - //By adding only the first replacement of a word to the global replacement list, we only need to the global rules once. + //By adding only the first replacement of a word to the global replacement list, we only need to define the global rules once. if (replaceAll.get() && rep.global && !repMap.containsKey(rep.original)) { repMap.put(rep.original, rep); } @@ -607,8 +623,7 @@ public void randomize(RandomizationContext context) { } else { origin = new File(DecodeRandomizer.class.getResource("renamingPresets/").getFile()); } - List presets = List.of(origin.listFiles()); - presets.stream().forEach(p -> { + List.of(origin.listFiles()).stream().sorted(Comparator.comparing(f -> priorities.contains(f.getName()) ? priorities.size() - priorities.indexOf(f.getName()) : -1)).forEach(p -> { String pName = p.getName(); try { Tuple foundBtx = res.resolve(pName.substring(0, pName.length() - 4)); @@ -699,8 +714,7 @@ public Map serialize() { map.put("pickle", pickle.get()); map.put("ogre", ogre.get()); map.put("blackPrefix", blackPrefix.get()); - map.put("randomChecked", randoMap.entrySet().stream().filter(a -> a.getValue().get()).map(Map.Entry::getKey) - .collect(Collectors.toList())); + map.put("randomChecked", randoMap.entrySet().stream().filter(a -> a.getValue().get()).map(Map.Entry::getKey).collect(Collectors.toList())); return map; } @@ -710,8 +724,7 @@ public void load(YamlMapping map) { return; } YamlSequence list = map.yamlSequence("randomChecked"); - List activeList = list == null ? new ArrayList<>() - : list.values().stream().map(a -> a.toString()).collect(Collectors.toList()); + List activeList = list == null ? new ArrayList<>() : list.values().stream().map(a -> a.toString()).collect(Collectors.toList()); randoMap.forEach((a, b) -> b.set(activeList.contains(a))); renameEnabled.set(Boolean.parseBoolean(map.string("enabled"))); } From 2225840f42622cc2a0f924f316a7d23f481ac0e9 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Fri, 17 May 2024 09:22:42 +0200 Subject: [PATCH 28/54] fixing path exclusion --- .../randomizer/settings/NamingSettings.java | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index 71e2937..d082842 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -140,19 +140,18 @@ private class Replacement { private class PathPosition { - public int line = 0; + public int line = -1; public int col = -1; public String path = ""; - public boolean valid = true; public PathPosition(String pathDescriptor) { String[] splitter = pathDescriptor.split(":", -1); this.path = splitter[0]; - if (splitter.length == 0) { + if (splitter.length == 1) { return; } this.line = Integer.parseInt(splitter[1]); - if (splitter.length == 1) { + if (splitter.length == 2) { this.col = -1; } else { this.col = Integer.parseInt(splitter[2]); @@ -178,6 +177,7 @@ public Replacement(String index, String original, String replacement, String raw } else { this.replacement = replacement; } + } else { this.replacement = replacement; } @@ -362,8 +362,11 @@ private boolean termExclusion(String text, int index) { } private boolean pathExclusion(String path, int index) { + String[] lineSplit = path.split(":"); + String file = lineSplit[0]; + int line = lineSplit.length == 2 ? Integer.parseInt(lineSplit[1]) : -1; for (PathPosition p : disabledPaths) { - if (p.path.equals(path) && (p.col == -1 || p.col == index)) { + if (p.path.equals(file) && (p.line == -1 || line == p.line) && (p.col == -1 || p.col == index)) { return true; } } @@ -470,9 +473,7 @@ public TitledPane create(GlobalKeepData data, LanguageKeep language) { ArrayList> myList = new ArrayList<>(); try { BTXPayload btx = (BTXPayload) language.getClass().getMethod(s).invoke(language); - btx.getEntries().stream() - .forEach(e -> myList - .add(new Tuple(e.getKey(), e.getValue().getString()))); + btx.getEntries().stream().forEach(e -> myList.add(new Tuple(e.getKey(), e.getValue().getString()))); } catch (Exception e) { e.printStackTrace(); } @@ -571,6 +572,7 @@ public Tuple resolve(String path) throws ParseException { if (frag.get(frag.size() - 1).equals("keep")) { pk = (NormalKCAP) pk.get(0); } + return new Tuple<>(finalPath + "\\" + btxIndex, (BTXPayload) pk.get(btxIndex)); } catch (NoSuchElementException exc) { throw new ParseException("csv not correctly mapped", 0); @@ -655,20 +657,17 @@ public void randomize(RandomizationContext context) { if (elements.isEmpty()) { return; } + for (int i = 0; i < elements.size(); i++) { var payload = (BTXPayload) elements.get(i); String partialPath = normalPath.toString() + "\\" + (i); - payload.getEntries().forEach(bt -> { - fileEntries.add(new Tuple(partialPath + ":" + bt.getKey(), bt.getValue())); - }); + payload.getEntries().forEach(bt -> fileEntries.add(new Tuple(partialPath + ":" + bt.getKey(), bt.getValue()))); } } catch (IOException e) { e.printStackTrace(); } }); - sortedReps.forEach(rep -> { - fileEntries.forEach(t -> rep.replaceDynamic(t.getValue(), t.getKey())); - }); + sortedReps.forEach(rep -> fileEntries.forEach(t -> rep.replaceDynamic(t.getValue(), t.getKey()))); repMap.clear(); replacementMap.clear(); From c725f2dfcbec25ef766d52dde6e436e7e314c82f Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Fri, 17 May 2024 11:09:28 +0200 Subject: [PATCH 29/54] wildcard path matching --- .../randomizer/settings/NamingSettings.java | 41 +++++++++++++++---- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index d082842..179b317 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -17,6 +17,7 @@ import java.lang.reflect.Method; import java.net.URL; import java.nio.charset.StandardCharsets; +import java.security.PKCS12Attribute; import java.text.ParseException; import java.util.NoSuchElementException; import java.util.Comparator; @@ -64,7 +65,6 @@ public class NamingSettings implements Setting { private final BooleanProperty pickle = new SimpleBooleanProperty(false); private final BooleanProperty ogre = new SimpleBooleanProperty(false); private final BooleanProperty blackPrefix = new SimpleBooleanProperty(false); - private final Map propertyMap = new HashMap<>(); private final Map randoMap = new HashMap<>(); private final List randoTypes = List.of("Digimon Names", "Finisher Names", "Skill Names", "Character Names", "Item Names", "Medal Names"); private final List priorities = List.of("DigimonNames.csv", "CardNames1.csv", "FinisherNames.csv"); @@ -142,14 +142,20 @@ private class PathPosition { public int line = -1; public int col = -1; + public boolean wildcard = false; public String path = ""; public PathPosition(String pathDescriptor) { - String[] splitter = pathDescriptor.split(":", -1); + String[] splitter = pathDescriptor.trim().split(":", -1); this.path = splitter[0]; + if (this.path.startsWith("*")) { + this.wildcard = true; + this.path = this.path.substring(1); + } if (splitter.length == 1) { return; } + this.line = Integer.parseInt(splitter[1]); if (splitter.length == 2) { this.col = -1; @@ -158,6 +164,12 @@ public PathPosition(String pathDescriptor) { } } + + public boolean matches(PathPosition p2) { + return (this.wildcard ? p2.path.endsWith(path) : p2.path.equals(path)) + && (line == -1 || p2.line == line) + && (col == -1 || p2.col == col); + } } public Replacement(String index, String original, String replacement, String rawExcludedTerms, String rawDisabledPaths, String origin) { @@ -187,7 +199,10 @@ public Replacement(String index, String original, String replacement, String raw } this.diffS = replacement.endsWith("s") != original.endsWith("s"); - this.diffArt = vow.contains(this.replacement.substring(0, 1)) != vow.contains(this.original.substring(0, 1)); + + this.diffArt = (original.length() != 0 && replacement.length() != 0) + ? vow.contains(this.replacement.substring(0, 1)) != vow.contains(this.original.substring(0, 1)) + : false; this.matchLength = original.length(); @@ -362,11 +377,10 @@ private boolean termExclusion(String text, int index) { } private boolean pathExclusion(String path, int index) { - String[] lineSplit = path.split(":"); - String file = lineSplit[0]; - int line = lineSplit.length == 2 ? Integer.parseInt(lineSplit[1]) : -1; + PathPosition currentPath = new PathPosition(path + ':' + index); for (PathPosition p : disabledPaths) { - if (p.path.equals(file) && (p.line == -1 || line == p.line) && (p.col == -1 || p.col == index)) { + if (p.matches(currentPath)) { + System.out.println("skipping " + path + " for " + original); return true; } } @@ -586,6 +600,11 @@ public Tuple resolve(String path) throws ParseException { */ private void targetedBtxReplacement(BTXPayload btx, File f, String path) { System.out.println(f.getName()); + parseReplacements(f, path).forEach(r -> r.replaceExact(btx, path)); + } + + private List parseReplacements(File f, String path) { + List l = List.of(); try { List lines = Files.readAllLines(f.toPath(), StandardCharsets.UTF_8); for (int i = 0; i < lines.size(); i++) { @@ -598,15 +617,15 @@ private void targetedBtxReplacement(BTXPayload btx, File f, String path) { continue; } Replacement rep = new Replacement(entries[0], entries[1], entries[2], entries[3], entries[4], path); - rep.replaceExact(btx, path); //By adding only the first replacement of a word to the global replacement list, we only need to define the global rules once. if (replaceAll.get() && rep.global && !repMap.containsKey(rep.original)) { repMap.put(rep.original, rep); } } - } catch (Exception e) { + } catch (IOException e) { e.printStackTrace(); } + return l; } @Override @@ -627,6 +646,10 @@ public void randomize(RandomizationContext context) { } List.of(origin.listFiles()).stream().sorted(Comparator.comparing(f -> priorities.contains(f.getName()) ? priorities.size() - priorities.indexOf(f.getName()) : -1)).forEach(p -> { String pName = p.getName(); + if (pName.equals("_general.csv")) { + parseReplacements(p, pName); + return; + } try { Tuple foundBtx = res.resolve(pName.substring(0, pName.length() - 4)); targetedBtxReplacement(foundBtx.getValue(), p, foundBtx.getKey()); From 24133605165f2c14cbb4da7925090ca4237899fe Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Fri, 17 May 2024 12:43:49 +0200 Subject: [PATCH 30/54] fixing exact replacements --- .../randomizer/settings/NamingSettings.java | 19 ++++++++++--------- .../randomizer/renamingPresets/keep-15.csv | 2 +- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index 179b317..98f6531 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -17,7 +17,6 @@ import java.lang.reflect.Method; import java.net.URL; import java.nio.charset.StandardCharsets; -import java.security.PKCS12Attribute; import java.text.ParseException; import java.util.NoSuchElementException; import java.util.Comparator; @@ -67,7 +66,7 @@ public class NamingSettings implements Setting { private final BooleanProperty blackPrefix = new SimpleBooleanProperty(false); private final Map randoMap = new HashMap<>(); private final List randoTypes = List.of("Digimon Names", "Finisher Names", "Skill Names", "Character Names", "Item Names", "Medal Names"); - private final List priorities = List.of("DigimonNames.csv", "CardNames1.csv", "FinisherNames.csv"); + private final List priorities = List.of("_general.csv", "DigimonNames.csv", "CardNames1.csv", "FinisherNames.csv"); private final Map repMap = new HashMap<>(); private Accordion mainAc; @@ -235,12 +234,13 @@ private int correctApostrophe(BTXEntry btx, int end) { return 0; } String text = btx.getString(); - if (text.length() == end) { + int max = text.length(); + if (max == end) { return 0; } if (replacement.endsWith("s")) { // remove s after apostrophe - if (text.substring(end, Math.min(end + 2, text.length())).equals("'s")) { + if (text.substring(Math.min(end, max), Math.min(end + 2, max)).equals("'s")) { btx.setString(text.substring(0, end + 1) + text.substring(end + 2)); return -1; } else { @@ -248,7 +248,7 @@ private int correctApostrophe(BTXEntry btx, int end) { } } else { // add s after apostrophe - if (text.substring(end, Math.min(end + 1, text.length())).equals("'")) { + if (text.substring(Math.min(end, max), Math.min(end + 1, max)).equals("'")) { btx.setString(text.substring(0, end + 1) + "s" + text.substring(end + 1)); return 1; } @@ -599,12 +599,12 @@ public Tuple resolve(String path) throws ParseException { * mappings to the BTX entry IDs */ private void targetedBtxReplacement(BTXPayload btx, File f, String path) { - System.out.println(f.getName()); + System.out.println(f.getName() + " -> " + path); parseReplacements(f, path).forEach(r -> r.replaceExact(btx, path)); } - private List parseReplacements(File f, String path) { - List l = List.of(); + private ArrayList parseReplacements(File f, String path) { + ArrayList rList = new ArrayList<>(); try { List lines = Files.readAllLines(f.toPath(), StandardCharsets.UTF_8); for (int i = 0; i < lines.size(); i++) { @@ -617,6 +617,7 @@ private List parseReplacements(File f, String path) { continue; } Replacement rep = new Replacement(entries[0], entries[1], entries[2], entries[3], entries[4], path); + rList.add(rep); //By adding only the first replacement of a word to the global replacement list, we only need to define the global rules once. if (replaceAll.get() && rep.global && !repMap.containsKey(rep.original)) { repMap.put(rep.original, rep); @@ -625,7 +626,7 @@ private List parseReplacements(File f, String path) { } catch (IOException e) { e.printStackTrace(); } - return l; + return rList; } @Override diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/keep-15.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/keep-15.csv index b10c9fe..2876139 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/keep-15.csv +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/keep-15.csv @@ -11,7 +11,7 @@ index;original;replace;excludeTerms;excludePaths 9;BRN;BRN;; 10;Digimon;Digimon;; 11;Form;Form;; -12;Fresh;Baby I;Freshly;part0\arcv\Keep\LanguageKeep_jp.res\14:4227:-1 +12;Fresh;Baby I;$ly;*\LanguageKeep_jp.res\14:4227 13;In-Training;Baby II;; 14;Rookie;Child;; 15;Champion;Adult;Digimon\n$,Colosseum $,Tenkaichi $,You're the $; From e04b1a6f1eaef91556dbb2119c2ea1cb9de5f243 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Fri, 17 May 2024 12:58:47 +0200 Subject: [PATCH 31/54] moved special cases to general csv better handling of spaces --- .../randomizer/settings/NamingSettings.java | 65 +++++++++++++++++-- .../randomizer/renamingPresets/_general.csv | 5 ++ .../randomizer/renamingPresets/keep-15.csv | 8 +-- 3 files changed, 70 insertions(+), 8 deletions(-) create mode 100644 src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/_general.csv diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index 98f6531..41f5150 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -20,6 +20,8 @@ import java.text.ParseException; import java.util.NoSuchElementException; import java.util.Comparator; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.controlsfx.control.ToggleSwitch; @@ -47,6 +49,7 @@ import javafx.scene.control.Button; import javafx.scene.control.TitledPane; import javafx.scene.control.Accordion; +import javafx.scene.control.skin.NestedTableColumnHeader; import javafx.scene.layout.VBox; import net.digimonworld.decode.randomizer.RandomizationContext; @@ -279,13 +282,15 @@ private int correctArticle(BTXEntry btx, int start) { public void replaceDynamic(BTXEntry btx, String path) { String origText = btx.getString(); - int matchStart = findInText(origText, path); + Tuple match = findInText(origText, path); + int matchStart = match.getKey(); if (matchStart == -1) { return; } + String rep = match.getValue(); int matchEnd = matchStart + matchLength; - btx.setString(origText.substring(0, matchStart) + replacement + origText.substring(matchEnd)); + btx.setString(origText.substring(0, matchStart) + rep + origText.substring(matchEnd)); int artOff = correctArticle(btx, matchStart); int apOff = correctApostrophe(btx, matchEnd); @@ -387,10 +392,62 @@ private boolean pathExclusion(String path, int index) { return false; } - private int findInText(String text, String path) { + /** + * If a multipart term was broken up by a newline, we match its + * components and attempt to reinsert a space at a comparable position + * in the replacing string + */ + private Tuple adjustForNewlines(String text) { + Matcher spaceMatch = Pattern.compile(original.replaceAll(" ", "(\\s)")).matcher(text); + if (!spaceMatch.find()) { + return new Tuple(-1, replacement); + } else { + int first = spaceMatch.start(); + if (!replacement.contains(" ")) { + return new Tuple(first, replacement + "\n"); + } + String[] repSplit = replacement.split(" "); + if (repSplit.length == 2) { + return new Tuple(first, repSplit[0] + "\n" + repSplit[1]); + } + int spaceLoc = 0; + int spaceDex = 0; + for (int i = 1; i < spaceMatch.groupCount(); i++) { + if (spaceMatch.group(i).equals("\n")) { + spaceLoc = i; + break; + } + } + String[] splits = original.split(" "); + for (int i = 0; i < splits.length; i++) { + String s = splits[i]; + spaceDex += s.length() + 1; + if (i == spaceLoc) { + break; + } + } + if (spaceDex >= replacement.length()) { + return new Tuple(first, replacement + "\n"); + } + + int firstBefore = replacement.substring(0, spaceDex).lastIndexOf(" "); + int firstAfter = replacement.substring(spaceDex).indexOf(" "); + if (firstAfter == -1 && firstBefore == -1) { + return new Tuple(first, replacement + "\n"); + } + int finalSpace = firstAfter == -1 ? firstBefore : firstBefore == -1 ? firstAfter : Math.min(firstAfter, firstBefore) == firstBefore ? firstBefore : firstAfter; + return new Tuple(first, replacement.substring(0, finalSpace) + "\n" + replacement.substring(finalSpace + 1)); + } + + } + + private Tuple findInText(String text, String path) { int idx = text.indexOf(original); + if (idx == -1 && original.contains(" ") && text.contains("\n")) { + return adjustForNewlines(text); + } //If any of the exclusion - return (idx == -1 || termExclusion(text, idx) || pathExclusion(path, idx) || isOverlapping(path, idx)) ? -1 : idx; + return new Tuple((idx == -1 || termExclusion(text, idx) || pathExclusion(path, idx) || isOverlapping(path, idx)) ? -1 : idx, replacement); } } diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/_general.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/_general.csv new file mode 100644 index 0000000..15b8c47 --- /dev/null +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/_general.csv @@ -0,0 +1,5 @@ +index;original;replace;excludeTerms;excludePaths +0;Fresh;Baby I;$ly;*\LanguageKeep_jp.res\14:4227 +0;Champion;Adult;Digimon\n$,Colosseum $,Tenkaichi $,You're the $; +0;Ultimate;Perfect;$ Piece,$ X Antibody,$Brachiomon,$Brachimon,$ Stream,$ body,$ victory,$ Sacrifice,$ Ouryuken,$ Poop Hell,$ Weapon,$ Cup,$ Herbal,$ Slicer,$ Enemy,$ Thunder,$\nBlast,$ Quake; +0;Mega;Ultimate;$ Meat,$ Blaster,$seadramon,$dramon,$Seadramon,$ Burst,$battle,$ly; diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/keep-15.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/keep-15.csv index 2876139..0d3df07 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/keep-15.csv +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/keep-15.csv @@ -11,12 +11,12 @@ index;original;replace;excludeTerms;excludePaths 9;BRN;BRN;; 10;Digimon;Digimon;; 11;Form;Form;; -12;Fresh;Baby I;$ly;*\LanguageKeep_jp.res\14:4227 +12;Fresh;Baby I;; 13;In-Training;Baby II;; 14;Rookie;Child;; -15;Champion;Adult;Digimon\n$,Colosseum $,Tenkaichi $,You're the $; -16;Ultimate;Perfect;$ Piece,$ X Antibody,$Brachiomon,$Brachimon,$ Stream,$ body,$ victory,$ Sacrifice,$ Ouryuken,$ Poop Hell,$ Weapon,$ Cup,$ Herbal,$ Slicer,$ Enemy,$ Thunder,$\nBlast,$ Quake; -17;Mega;Ultimate;$ Meat,$ Blaster,$seadramon,$dramon,$Seadramon,$ Burst,$battle,$ly; +15;Champion;Adult;; +16;Ultimate;Perfect;; +17;Mega;Ultimate;; 18;Armor;Armor;; 19;Special;Special;; 20;Attribute;Attribute;; From a28c9000327c40b8c20e16508f96a40d1fbf2153 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Fri, 17 May 2024 18:42:44 +0200 Subject: [PATCH 32/54] path inclusions --- .../randomizer/settings/NamingSettings.java | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index 41f5150..1290232 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -14,6 +14,7 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.URL; import java.nio.charset.StandardCharsets; @@ -49,7 +50,6 @@ import javafx.scene.control.Button; import javafx.scene.control.TitledPane; import javafx.scene.control.Accordion; -import javafx.scene.control.skin.NestedTableColumnHeader; import javafx.scene.layout.VBox; import net.digimonworld.decode.randomizer.RandomizationContext; @@ -132,6 +132,7 @@ private class Replacement { public String replacement; private final List excludedTerms; private final ArrayList disabledPaths = new ArrayList(); + private final ArrayList enabledPaths = new ArrayList(); private final int matchLength; private int index = -1; private final boolean diffS; @@ -215,6 +216,8 @@ public Replacement(String index, String original, String replacement, String raw for (String p : pathos) { if (p.toLowerCase().equals("all")) { this.global = false; + } else if (!p.startsWith("!")) { + this.enabledPaths.add(new PathPosition(p.substring(1))); } else if (!p.equals("")) { this.disabledPaths.add(new PathPosition(p)); } @@ -364,6 +367,7 @@ private void insertRepData(String path, int start, int end, int offset) { private boolean termExclusion(String text, int index) { for (String term : excludedTerms) { if (term.equals("[]")) { + //Checking for word boundaries if (!text.substring(Math.max(0, index - 2), Math.min(text.length(), index + 2)).matches(".*\b" + original + "\b.*")) { return true; } @@ -389,7 +393,7 @@ private boolean pathExclusion(String path, int index) { return true; } } - return false; + return !enabledPaths.stream().anyMatch(p -> p.matches(currentPath)); } /** @@ -545,7 +549,7 @@ public TitledPane create(GlobalKeepData data, LanguageKeep language) { try { BTXPayload btx = (BTXPayload) language.getClass().getMethod(s).invoke(language); btx.getEntries().stream().forEach(e -> myList.add(new Tuple(e.getKey(), e.getValue().getString()))); - } catch (Exception e) { + } catch (IllegalAccessException | NoSuchMethodException | InvocationTargetException e) { e.printStackTrace(); } @@ -705,7 +709,9 @@ public void randomize(RandomizationContext context) { List.of(origin.listFiles()).stream().sorted(Comparator.comparing(f -> priorities.contains(f.getName()) ? priorities.size() - priorities.indexOf(f.getName()) : -1)).forEach(p -> { String pName = p.getName(); if (pName.equals("_general.csv")) { - parseReplacements(p, pName); + if (replaceAll.get()) { + parseReplacements(p, pName); + } return; } try { @@ -806,6 +812,13 @@ public void load(YamlMapping map) { YamlSequence list = map.yamlSequence("randomChecked"); List activeList = list == null ? new ArrayList<>() : list.values().stream().map(a -> a.toString()).collect(Collectors.toList()); randoMap.forEach((a, b) -> b.set(activeList.contains(a))); - renameEnabled.set(Boolean.parseBoolean(map.string("enabled"))); + renameEnabled.set(Boolean.parseBoolean(map.string("renameEnabled"))); + randomizeEnabled.set(Boolean.parseBoolean(map.string("randomizeEnabled"))); + camelCase.set(Boolean.parseBoolean(map.string("camelCase"))); + manualCsv.set(Boolean.parseBoolean(map.string("manualCsv"))); + replaceAll.set(Boolean.parseBoolean(map.string("replaceAll"))); + pickle.set(Boolean.parseBoolean(map.string("pickle"))); + ogre.set(Boolean.parseBoolean(map.string("ogre"))); + blackPrefix.set(Boolean.parseBoolean(map.string("blackPrefix"))); } } From ab433cef67fe427b6ea7a3f456d7ccb669bd891e Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Fri, 17 May 2024 19:21:24 +0200 Subject: [PATCH 33/54] fixed sorting bug --- .../randomizer/settings/NamingSettings.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index 1290232..ae8d66e 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -19,6 +19,7 @@ import java.net.URL; import java.nio.charset.StandardCharsets; import java.text.ParseException; +import java.util.Collection; import java.util.NoSuchElementException; import java.util.Comparator; import java.util.regex.Matcher; @@ -214,12 +215,13 @@ public Replacement(String index, String original, String replacement, String raw this.excludedTerms = List.of(rawExcludedTerms.split(",")).stream().map(p -> p.replaceAll("\\$", original)).collect(Collectors.toList()); String[] pathos = rawDisabledPaths.split(","); for (String p : pathos) { - if (p.toLowerCase().equals("all")) { + String tp = p.trim(); + if (tp.toLowerCase().equals("all")) { this.global = false; - } else if (!p.startsWith("!")) { - this.enabledPaths.add(new PathPosition(p.substring(1))); - } else if (!p.equals("")) { - this.disabledPaths.add(new PathPosition(p)); + } else if (tp.startsWith("!")) { + this.enabledPaths.add(new PathPosition(tp.substring(1))); + } else if (!tp.equals("")) { + this.disabledPaths.add(new PathPosition(tp)); } } } @@ -393,7 +395,7 @@ private boolean pathExclusion(String path, int index) { return true; } } - return !enabledPaths.stream().anyMatch(p -> p.matches(currentPath)); + return enabledPaths.stream().anyMatch(p -> !p.matches(currentPath)); } /** @@ -706,10 +708,11 @@ public void randomize(RandomizationContext context) { } else { origin = new File(DecodeRandomizer.class.getResource("renamingPresets/").getFile()); } - List.of(origin.listFiles()).stream().sorted(Comparator.comparing(f -> priorities.contains(f.getName()) ? priorities.size() - priorities.indexOf(f.getName()) : -1)).forEach(p -> { + List.of(origin.listFiles()).stream().sorted(Comparator.comparing(f -> priorities.indexOf(f.getName()))).sorted(Comparator.comparing(f -> priorities.contains(f.getName()) ? -1 : 1)).forEach(p -> { String pName = p.getName(); if (pName.equals("_general.csv")) { if (replaceAll.get()) { + System.out.println("Parsing general Replacements"); parseReplacements(p, pName); } return; From 1a29957d80433b2dfc48d3730a34dd7c4ee4c4ae Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Fri, 17 May 2024 21:07:03 +0200 Subject: [PATCH 34/54] fixed newline handling --- .../decode/randomizer/settings/NamingSettings.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index ae8d66e..6cf915f 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -201,6 +201,7 @@ public Replacement(String index, String original, String replacement, String raw if (tType == TermType.DIGIMONMULTI && !camelCase.get()) { this.replacement = this.replacement.replaceAll("([a-z])([A-Z])", "$1 $2"); } + this.replacement = this.replacement.replaceAll("\\n", "\n"); this.diffS = replacement.endsWith("s") != original.endsWith("s"); @@ -303,7 +304,7 @@ public void replaceDynamic(BTXEntry btx, String path) { matchStart = matchStart + artOff; matchEnd = matchEnd + apOff; int finalOffset = baseOffset + artOff + apOff; - System.out.println(path + " | " + origText.substring(matchStart, matchEnd) + " -> " + btx.getString().substring(matchStart, matchEnd + finalOffset)); + System.out.println(path + " | " + origText.substring(matchStart, matchEnd).replaceAll("\n", "\\\\n") + " -> " + btx.getString().substring(matchStart, matchEnd + finalOffset).replaceAll("\n", "\\\\n")); insertRepData(path, matchStart, matchEnd, finalOffset); } @@ -395,7 +396,7 @@ private boolean pathExclusion(String path, int index) { return true; } } - return enabledPaths.stream().anyMatch(p -> !p.matches(currentPath)); + return !enabledPaths.isEmpty() && !enabledPaths.stream().anyMatch(p -> p.matches(currentPath)); } /** @@ -404,7 +405,7 @@ private boolean pathExclusion(String path, int index) { * in the replacing string */ private Tuple adjustForNewlines(String text) { - Matcher spaceMatch = Pattern.compile(original.replaceAll(" ", "(\\s)")).matcher(text); + Matcher spaceMatch = Pattern.compile(original.replaceAll(" ", "(\\\\s)")).matcher(text); if (!spaceMatch.find()) { return new Tuple(-1, replacement); } else { From 3d594020e04c7067c0d144356402911e91652543 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Sat, 18 May 2024 10:00:04 +0200 Subject: [PATCH 35/54] fixing articles fixed --- .../randomizer/settings/NamingSettings.java | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index 6cf915f..75cca99 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -19,7 +19,6 @@ import java.net.URL; import java.nio.charset.StandardCharsets; import java.text.ParseException; -import java.util.Collection; import java.util.NoSuchElementException; import java.util.Comparator; import java.util.regex.Matcher; @@ -265,20 +264,20 @@ private int correctApostrophe(BTXEntry btx, int end) { } } - //Fixing mistakes like "a Scorpiomon" -> "a Anomalicarimon" + //Fixing mistakes like "a Champion" -> "a AAdult" private int correctArticle(BTXEntry btx, int start) { if (!diffArt || start == 0) { return 0; } String text = btx.getString(); if (vow.contains(replacement.substring(0, 1))) { - if (text.substring(Math.max(0, start - 3), start).matches(".*\ba\b.*")) { + if (text.substring(Math.max(0, start - 3), start).matches(".*\\ba\\b.*")) { btx.setString(text.substring(0, start - 1) + "n" + text.substring(start - 1)); return 1; } return 0; } else { - if (text.substring(Math.max(0, start - 4), start).matches(".*\ban\b.*")) { + if (text.substring(Math.max(0, start - 4), start).matches(".*\\ban\\b.*")) { btx.setString(text.substring(0, start - 2) + text.substring(start - 1)); return -1; } @@ -301,8 +300,6 @@ public void replaceDynamic(BTXEntry btx, String path) { int artOff = correctArticle(btx, matchStart); int apOff = correctApostrophe(btx, matchEnd); - matchStart = matchStart + artOff; - matchEnd = matchEnd + apOff; int finalOffset = baseOffset + artOff + apOff; System.out.println(path + " | " + origText.substring(matchStart, matchEnd).replaceAll("\n", "\\\\n") + " -> " + btx.getString().substring(matchStart, matchEnd + finalOffset).replaceAll("\n", "\\\\n")); @@ -664,10 +661,10 @@ public Tuple resolve(String path) throws ParseException { */ private void targetedBtxReplacement(BTXPayload btx, File f, String path) { System.out.println(f.getName() + " -> " + path); - parseReplacements(f, path).forEach(r -> r.replaceExact(btx, path)); + parseReplacements(f, path, false).forEach(r -> r.replaceExact(btx, path)); } - private ArrayList parseReplacements(File f, String path) { + private ArrayList parseReplacements(File f, String path, boolean addAll) { ArrayList rList = new ArrayList<>(); try { List lines = Files.readAllLines(f.toPath(), StandardCharsets.UTF_8); @@ -683,7 +680,7 @@ private ArrayList parseReplacements(File f, String path) { Replacement rep = new Replacement(entries[0], entries[1], entries[2], entries[3], entries[4], path); rList.add(rep); //By adding only the first replacement of a word to the global replacement list, we only need to define the global rules once. - if (replaceAll.get() && rep.global && !repMap.containsKey(rep.original)) { + if (replaceAll.get() && rep.global && (addAll || !repMap.containsKey(rep.original))) { repMap.put(rep.original, rep); } } @@ -714,7 +711,7 @@ public void randomize(RandomizationContext context) { if (pName.equals("_general.csv")) { if (replaceAll.get()) { System.out.println("Parsing general Replacements"); - parseReplacements(p, pName); + parseReplacements(p, pName, true); } return; } From b0ac633ed2c717ea70f4cd8a6a1dfa94be444274 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Sat, 18 May 2024 10:07:53 +0200 Subject: [PATCH 36/54] more specialized replacements --- .../randomizer/renamingPresets/_general.csv | 14 +- .../randomizer/renamingPresets/keep-15.csv | 843 +----------------- .../randomizer/renamingPresets/keep-39.csv | 2 + 3 files changed, 16 insertions(+), 843 deletions(-) create mode 100644 src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/keep-39.csv diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/_general.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/_general.csv index 15b8c47..f72046a 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/_general.csv +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/_general.csv @@ -1,5 +1,17 @@ index;original;replace;excludeTerms;excludePaths 0;Fresh;Baby I;$ly;*\LanguageKeep_jp.res\14:4227 -0;Champion;Adult;Digimon\n$,Colosseum $,Tenkaichi $,You're the $; +0;Champion;Adult;Digimon $,Colosseum $,Tenkaichi $,You're the $; 0;Ultimate;Perfect;$ Piece,$ X Antibody,$Brachiomon,$Brachimon,$ Stream,$ body,$ victory,$ Sacrifice,$ Ouryuken,$ Poop Hell,$ Weapon,$ Cup,$ Herbal,$ Slicer,$ Enemy,$ Thunder,$\nBlast,$ Quake; 0;Mega;Ultimate;$ Meat,$ Blaster,$seadramon,$dramon,$Seadramon,$ Burst,$battle,$ly; +0;Rookie;Child Digimon;;!*\LanguageKeep_jp.res\12:198,!*\LanguageKeep_jp.res\42:224, +0;Rookie;Child;$ Collector;*\mgm01_text.pack\55:600,*\mgm01_text.pack\55:500,*\LanguageKeep_jp.res\15:812 +0;Rookies;Child Digimon;; +0;DigiArmor Energize;Digimental Up;; +0;Digi-Egg of;Digimental of;; +0;Digivol;Evol;; +0;digivol;evol;; +0;DNA Digivol;Jogress Evol;; +0;Digimon Fusion;Digimon Xros Wars;; +0;VenomMyotismon;VenomVamdemon;; +0;Warumonzaemon;WaruMonzaemon;; +0;Megaseadramon;MegaSeadramon;; \ No newline at end of file diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/keep-15.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/keep-15.csv index 0d3df07..f2c2aba 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/keep-15.csv +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/keep-15.csv @@ -1,861 +1,20 @@ index;original;replace;excludeTerms;excludePaths -0;0;0;; -1;Bit;Bit;; -2;HP;HP;; -3;MP;MP;; -4;HP;HP;; -5;MP;MP;; -6;ATK;ATK;; -7;DEF;DEF;; -8;SPD;SPD;; -9;BRN;BRN;; -10;Digimon;Digimon;; -11;Form;Form;; 12;Fresh;Baby I;; 13;In-Training;Baby II;; 14;Rookie;Child;; 15;Champion;Adult;; 16;Ultimate;Perfect;; 17;Mega;Ultimate;; -18;Armor;Armor;; -19;Special;Special;; -20;Attribute;Attribute;; -21;Active;Active;; -22;Age;Age;; -23;D;D;; -24;Weight;Weight;; -25;G;G;; -26;Summon;Summon;; -27;Nature;Nature;; -28;Life;Life;; -29;Happ.;Happ.;; -30;Disc.;Disc.;; -31;Poop;Poop;; -32;???;???;; -33;Animals;Animals;; -34;──────;──────;; -35;NO DATA;NO DATA;; -36;Individual;Individual;; -37;Now Loading...;Now Loading...;; -38;×;×;; -39;/;/;; -40;Name;Name;; -41;Normal Skills;Normal Skills;; -42;Special Move;Special Move;; -43;Summon;Summon;; -44;???;???;; -45;None;None;; -46;Happiness;Happiness;; -47;Discipline;Discipline;; -48;Poop;Poop;; -49;LIFE;LIFE;; -50;Data;Data;; -51;Vaccine;Vaccine;; -52;Virus;Virus;; -53;Free;Free;; -54;Unknown;Unknown;; -55;~;~;; -56;P;P;; -57;%;%;; -58;L;L;; -59;R;R;; -60;MB;MB;; -61;NO;NO;; -62;HOST;HOST;; -63;ENTRY;ENTRY;; -64;HOST;HOST;; -65;GUEST;GUEST;; -66;Place;Place;; -67;RP;RP;; -68;Wins;Wins;; -69;Floor;Floor;; -70;km;km;; -71;Top;Top;; -72;Skill;Skill;; -130;Select the skills your Partner Digimon will use.;Select the skills your Partner Digimon will use.;; 131;Displays Digivolutions your Partner Digimon went through and its Digivolution History.;Displays Evolutions your Partner Digimon went through and its Evolution History.;; -132;Displays the entire map of File Island.;Displays the entire map of File Island.;; -133;Select the Accessories your Partner Digimon will wear.;Select the Accessories your Partner Digimon will wear.;; -134;Displays various information about the Tamer.;Displays various information about the Tamer.;; -135;Displays your Collected Cards, Key Items and the Glossary of this World.;Displays your Collected Cards, Key Items and the Glossary of this World.;; -136;Summon the Spirit of a Partner from the past to strike your enemy with a Special Move.;Summon the Spirit of a Partner from the past to strike your enemy with a Special Move.;; -137;Displays the Mail you've received.;Displays the Mail you've received.;; -138;Use this menu to Save, Load, and set various Settings.;Use this menu to Save, Load, and set various Settings.;; -150;DIGITTER;DIGITTER;; -160;AREA MAP;AREA MAP;; -161;Location;Location;; -200;Message Speed;Message Speed;; -201;Autoscroll;Autoscroll;; -202;BGM Volume;BGM Volume;; -203;SE Volume;SE Volume;; -204;Battle mode;Battle mode;; -205;Vertical Camera;Vertical Camera;; -206;Horizontal Camera;Horizontal Camera;; -210;SLOW;SLOW;; -211;FAST;FAST;; -212;ON;ON;; -213;OFF;OFF;; -214;MAX;MAX;; -215;MIN;MIN;; -216;NORMAL;NORMAL;; -217;REVERSE;REVERSE;; -218;QUICK;QUICK;; -219;HOLD;HOLD;; -220;Change the display speed of the dialogue.;Change the display speed of the dialogue.;; -221;Turn Autoscroll ON/OFF;Turn Autoscroll ON/OFF;; -222;Set the volume of the BGM.;Set the volume of the BGM.;; -223;Set the volume of the SE.;Set the volume of the SE.;; -224;Change the battle commands by using the d-pad control buttons. Quick will automatically bring you back to the center.;Change the battle commands by using the d-pad control buttons. Quick will automatically bring you back to the center.;; -225;Change the y-axis of the camera.;Change the y-axis of the camera.;; -226;Change the x-axis of the camera.;Change the x-axis of the camera.;; -300;Decode Level;Decode Level;; -301;Raised Partners;Raised Partners;; 302;Digivolutions;Evolutions;; -303;Obtained Medals;Obtained Medals;; -304;Quests Cleared;Quests Cleared;; -305;Money;Money;; -306;Play Time;Play Time;; -310;NEXT;NEXT;; -320;Medals;Medals;; -321;Records;Records;; -330;View acquired Medals.;View acquired Medals.;; -331;View various records you set as a Tamer.;View various records you set as a Tamer.;; -400;Cards;Cards;; -401;Key Items;Key Items;; -402;Glossary;Glossary;; -410;Look at Digimon Cards in your possession.;Look at Digimon Cards in your possession.;; -411;Displays Key Items you have acquired.;Displays Key Items you have acquired.;; -412;Shows various common terms used in the Digital World and their meaning.;Shows various common terms used in the Digital World and their meaning.;; -500;DIGIMON;DIGIMON;; -501;PLAYER;PLAYER;; -502;LOG;LOG;; -503;SYSTEM;SYSTEM;; -600;POWER;POWER;; -601;MP;MP;; -602;RANGE;RANGE;; -603;ADD;ADD;; -610;No Skills have been equipped.;No Skills have been equipped.;; -620;This Skill has not yet been mastered.;This Skill has not yet been mastered.;; -621;Please set an attacking Skill.;Please set an attacking Skill.;; -622;The current partner cannot learn this Skill.;The current partner cannot learn this Skill.;; -630;SPECIAL MOVE;SPECIAL MOVE;; -640;Select a Skill for Slot 1.;Select a Skill for Slot 1.;; -641;Select a Skill for Slot 2.;Select a Skill for Slot 2.;; -642;Select a Skill for Slot 3.;Select a Skill for Slot 3.;; -700;Buy;Buy;; -701;Sell;Sell;; -702;Quit;Quit;; -800;Money;Money;; -801;Buy;Buy;; -802;Sell;Sell;; -803;In Possession;In Possession;; -804;Total;Total;; -805;Vending machine;Vending machine;; -806;In Warehouse;In Warehouse;; -807;Buying Amount;Buying Amount;; -808;Selling Amount;Selling Amount;; -809;Trade Amount;Trade Amount;; -810;Please select the number of pieces to buy.;Please select the number of pieces to buy.;; -811;Please select the number of pieces to sell.;Please select the number of pieces to sell.;; -820;, correct?;, correct?;; -821;Yes;Yes;; -822;No;No;; -830;Meat futures trade\n;Meat futures trade\n;; -831;Today's market price;Today's market price;; -832;Transaction limit;Transaction limit;; -833;Select the number of pieces to trade.;Select the number of pieces to trade.;; -900;Deposit;Deposit;; -901;Retrieve;Retrieve;; -902;Quit;Quit;; -1000;Deposit;Deposit;; -1001;Retrieve;Retrieve;; -1002;In-Bag:;In-Bag:;; -1003;Warehouses No.;Warehouses No.;; -1004;In Warehouse:;In Warehouse:;; -1005;;;; -1006;In Possession:;In Possession:;; -1007;;;; -1008;Please select how many to deposit;Please select how many to deposit;; -1009;Please select how many to retrieve;Please select how many to retrieve;; -1010;Available Warehouse Space;Available Warehouse Space;; -1011;Warehouse;Warehouse;; -1012;In Bag:;In Bag:;; -1013;In Warehouse:;In Warehouse:;; -1014;Deposit Amount;Deposit Amount;; -1015;Retrieve Amount;Retrieve Amount;; -1100;Your Call;Your Call;; -1101;Item;Item;; -1102;Move;Move;; -1103;Run;Run;; -1104;Defend;Defend;; -1105;Target;Target;; -1106;Full Power;Full Power;; -1107;Moderate;Moderate;; -1108;Distance;Distance;; -1109;Skill 1;Skill 1;; -1110;Skill 2;Skill 2;; -1111;Skill 3;Skill 3;; -1120;Leave the control of the battle to your Partner Digimon.;Leave the control of the battle to your Partner Digimon.;; -1121;Select an item to support your partner.;Select an item to support your partner.;; -1122;Instruct your Partner to move to a specified position.;Instruct your Partner to move to a specified position.;; -1123;Command your Partner to run and escape from the Battle.;Command your Partner to run and escape from the Battle.;; -1124;Order to assume a defensive posture without attacking at all.;Order to assume a defensive posture without attacking at all.;; -1125;Order to attack the specified target;Order to attack the specified target;; -1126;Order to attack with the most powerful Skill.;Order to attack with the most powerful Skill.;; -1127;Order to attack with the Skill that consumes the least MP.;Order to attack with the Skill that consumes the least MP.;; -1128;Order to keep distance from the target.;Order to keep distance from the target.;; -1130;CAMERA;CAMERA;; -1131;SPECIAL;SPECIAL;; -1132;SUMMON;SUMMON;; -1133;GOSPEL;GOSPEL;; -1140;STOP;STOP;; -1200;BATTLE RESULT;BATTLE RESULT;; -1201;TRAINING RESULT;TRAINING RESULT;; -1202;FOOD RESULT;FOOD RESULT;; -1210;Status;Status;; -1211;Learned Skill;Learned Skill;; -1212;Obtained Items;Obtained Items;; -1213;Money;Money;; -1214; has mastered !; has mastered !;; -1300;TRAINING MENU;TRAINING MENU;; -1301;Training Effect;Training Effect;; -1305;Critical Hit Chance!;Critical Hit Chance!;; -1306;Guard UP Chance!;Guard UP Chance!;; -1307;Assist UP Chance!;Assist UP Chance!;; -1310;Stop in the success zone!;Stop in the success zone!;; -1311;Stop at the same mark!;Stop at the same mark!;; -1312;Time the moment when to guard!;Time the moment when to guard!;; -1313;Move in order to avoid the bombs!;Move in order to avoid the bombs!;; -1314;Which route is correct?;Which route is correct?;; -1315;Which one is the same as the sample?;Which one is the same as the sample?;; -1316;Aim for the Red Line!;Aim for the Red Line!;; -1317;Aim for the Red Line!;Aim for the Red Line!;; -1318;Aim for the Red Line!;Aim for the Red Line!;; -1320;STOP;STOP;; -1325;STOP;STOP;; -1330;GUARD;GUARD;; -1335;LEFT;LEFT;; -1336;MIDDLE;MIDDLE;; -1337;RIGHT;RIGHT;; -1340;1;1;; -1341;2;2;; -1342;3;3;; -1345;One;One;; -1346;Two;Two;; -1347;Three;Three;; -1350;STOP!;STOP!;; -1355;STOP!;STOP!;; -1360;STOP!;STOP!;; -1400;TOTAL;TOTAL;; -1401;Completion Rate;Completion Rate;; -1500;Save;Save;; -1501;Load;Load;; -1502;Settings;Settings;; -1503;Return to Title;Return to Title;; -1510;Do you want to return to the Title Screen?;Do you want to return to the Title Screen?;; -1511;Yes;Yes;; -1512;No;No;; -1520;Any unsaved progress will be lost, continue?;Any unsaved progress will be lost, continue?;; -1521;Yes;Yes;; -1522;No;No;; -1530;Save your current progress.;Save your current progress.;; -1531;Load previously saved data.;Load previously saved data.;; -1532;Adjust various settings of the game.;Adjust various settings of the game.;; -1533;Return to the Title Screen.;Return to the Title Screen.;; -1540;You need to select cleared save data.;You need to select cleared save data.;; -1550;The save data is corrupted.;The save data is corrupted.;; -1551;Corrupt data cannot be loaded, please delete it.;Corrupt data cannot be loaded, please delete it.;; -1600;USABLE;USABLE;; -1601;SPECIAL;SPECIAL;; -1602;POWER;POWER;; -1620;Do you wish to overwrite the existing data?;Do you wish to overwrite the existing data?;; -1621;Yes;Yes;; -1622;No;No;; -1630;Do you want to save in this slot?;Do you want to save in this slot?;; -1631;Yes;Yes;; -1632;No;No;; -1640;Do you want to send ?;Do you want to send ?;; -1641;Yes;Yes;; -1642;No;No;; -1650;Do you want to charge ?;Do you want to charge ?;; -1651;Yes;Yes;; -1652;No;No;; -1660;DigMemories received from other Tamers cannot be transferred!;DigMemories received from other Tamers cannot be transferred!;; -1700;ITEM LIST;ITEM LIST;; -1710;What will you do with ?;What will you do with ?;; -1711;Use;Use;; -1712;Move;Move;; -1713;Discard;Discard;; -1720;Do you want to toss ?;Do you want to toss ?;; -1721;Yes;Yes;; -1722;No;No;; -1730;You tossed .;You tossed .;; -1731; can't be thrown away.; can't be thrown away.;; -1740;can't be used.;can't be used.;; -1741;Return;Return;; -1750;Would you like to sort your Items?;Would you like to sort your Items?;; -1751;Yes;Yes;; -1752;No;No;; -1800;Accessory;Accessory;; -1801;Do you want to buy ?;Do you want to buy ?;; -1802;Yes;Yes;; -1803;No;No;; -1900;SUBJECT;SUBJECT;; -1901;FROM;FROM;; -1920;Total:;Total:;; -1921;Unread:;Unread:;; -1922;Cleared:;Cleared:;; -1930;Do you want to open the attached file?;Do you want to open the attached file?;; -1931;Yes;Yes;; -1932;No;No;; -2000;Birdra Transport;Birdra Transport;; -2100;INFORMATION;INFORMATION;; -2200;Please select an access room.;Please select an access room.;; -2201;NO;NO;; -2210;ROOM;ROOM;; -2211;MEMBER;MEMBER;; -2300;Set your accessory for Slot 1.;Set your accessory for Slot 1.;; -2301;Set your accessory for Slot 2.;Set your accessory for Slot 2.;; -2302;Set your accessory for Slot 3.;Set your accessory for Slot 3.;; -2400;Restaurant;Restaurant;; -2401;MENU;MENU;; -2402;Effect;Effect;; -2403;Calories;Calories;; -2500;Entry Requirements;Entry Requirements;; -2501;Participants;Participants;; -2502;Description;Description;; -2510;BATTLE LIST;BATTLE LIST;; -2600;PUSH ANY BUTTON;PUSH ANY BUTTON;; -2610;New Game;New Game;; -2611;Load Game;Load Game;; -2612;Local Play;Local Play;; -2613;New Game+;New Game+;; -2620;Play the game from the beginning.;Play the game from the beginning.;; -2621;Select a saved file and continue your adventure.;Select a saved file and continue your adventure.;; -2622;Compete or cooperate with nearby players.;Compete or cooperate with nearby players.;; -2623;You can carry over data from your cleared file and replay the game from the beginning.;You can carry over data from your cleared file and replay the game from the beginning.;; -2700;ITEM;ITEM;; -2701;PRAISE;PRAISE;; -2702;SCOLD;SCOLD;; -2703;SLEEP;SLEEP;; -2704;DIGIVICE;DIGIVICE;; -2710;Year;Year;; -2711;Day;Day;; -2720;Area Map;Area Map;; -2730;Digivice Mode;Digivice Mode;; -2800;Select;Select;; -2801;Back;Back;; -2802;Move;Move;; -2803;Sort;Sort;; -2804;Scroll;Scroll;; -2805;View;View;; -2806;Toggle;Toggle;; -2807;Remove;Remove;; -2808;Change;Change;; -2809;Zoom;Zoom;; -2810;Reset;Reset;; -2811;Display;Display;; -2812;Rotate;Rotate;; -2813;Read;Read;; -2814;Toss;Toss;; -2815;Gauge;Gauge;; -2816;Move;Move;; -2817;Close;Close;; -2818;Attachment;Attachment;; -2819;Card Set;Card Set;; -2820;Cancel;Cancel;; -2821;Status;Status;; -2822;Rule;Rule;; -2823;Rule;Rule;; -2824;Change Teams;Change Teams;; -2825;Confirm Scenario;Confirm Scenario;; -2826;Start the match;Start the match;; -2827;Ready;Ready;; -2828;Page;Page;; -2829;Rank;Rank;; -2830;Map;Map;; -2831;Delete;Delete;; -2900;BAIT LIST;BAIT LIST;; -2910;Fish without Bait;Fish without Bait;; -2911;Fish without Bait.;Fish without Bait.;; -2920;Rod;Rod;; -2921;Bait;Bait;; -3000;Buy Cards;Buy Cards;; -3001;Sell Cards;Sell Cards;; -3010;GET CARD;GET CARD;; -3011;Holds;Holds;; -3012;SOLD OUT;SOLD OUT;; -3013;Sold Number;Sold Number;; -3100;News Archive;News Archive;; -3101;Logs;Logs;; -3200;FISHING RECORD;FISHING RECORD;; -3201;Record:;Record:;; -3202;cm;cm;; -3300;ID;ID;; -3301;Rank;Rank;; -3302;Points;Points;; -3303;Name;Name;; -3304;Amount;Amount;; -3310;NEW;NEW;; -3311;ALL;ALL;; -3312;C;C;; -3313;B;B;; -3314;A;A;; -3315;S;S;; -3316;SS;SS;; -3317;SET;SET;; -3320;Display List;Display List;; -3400;Battle Lobby;Battle Lobby;; -3401;MEMBER;MEMBER;; -3402;TEAM;TEAM;; -3403;READY;READY;; -3404;BATTLE RULE(S);BATTLE RULE(S);; -3410;Tamer;Tamer;; -3411;Time Limit;Time Limit;; -3412;Items;Items;; -3420;ON;ON;; -3421;OFF;OFF;; -3430;Rules;Rules;; -3431;Team;Team;; -3432;CLOSE;CLOSE;; -3433;Battle confirmation;Battle confirmation;; -3500;Operation guide;Operation guide;; -3510;Play animation;Play animation;; -3511;Change animation;Change animation;; -3512;Rotate / Move;Rotate / Move;; -3513;Zoom;Zoom;; -3514;Reset;Reset;; -3520;Happy;Happy;; -3521;Refuse;Refuse;; -3522;Attack;Attack;; -3523;Guard;Guard;; -3600;Floor selection;Floor selection;; -3610;40F;40F;; -3611;30F;30F;; -3612;20F;20F;; -3613;10F;10F;; -3614;1F;1F;; -3615;Basement;Basement;; -3700;SAVE;SAVE;; -3701;LOAD;LOAD;; -3702;Del;Del;; -3705;Normal Mode;Normal Mode;; -3706;Hard Mode;Hard Mode;; -3707;;;; -3708;;;; -3710;CLEAR;CLEAR;; -3711;Cleared:;Cleared:;; -3712;Area;Area;; -3713;Data corrupted.;Data corrupted.;; -3720;Unable to access the save data.;Unable to access the save data.;; -3730;Yes;Yes;; -3731;No;No;; -3740;Do you want to save your progress in slot 1?;Do you want to save your progress in slot 1?;; -3741;Do you want to save your progress in slot 2?;Do you want to save your progress in slot 2?;; -3742;Do you want to save your progress in slot 3?;Do you want to save your progress in slot 3?;; -3750;Do you want to load the save data in slot 1?;Do you want to load the save data in slot 1?;; -3751;Do you want to load the save data in slot 2?;Do you want to load the save data in slot 2?;; -3752;Do you want to load the save data in slot 3?;Do you want to load the save data in slot 3?;; -3760;Do you want to delete save data in slot 1?;Do you want to delete save data in slot 1?;; -3761;Do you want to delete save data in slot 2?;Do you want to delete save data in slot 2?;; -3762;Do you want to delete save data in slot 3?;Do you want to delete save data in slot 3?;; -3770;Deleted data cannot be restored, are you sure?;Deleted data cannot be restored, are you sure?;; -3780;Please wait a moment...;Please wait a moment...;; -3790;Save completed.;Save completed.;; -3791;Save failed.;Save failed.;; -3792;Load completed.;Load completed.;; -3793;Load failed.;Load failed.;; -3794;Delete completed.;Delete completed.;; -3795;Delete failed.;Delete failed.;; -3800;Floor selection;Floor selection;; -3801;F;F;; -3900;Fishing;Fishing;; -4000;Item:;Item:;; -4001;Key Items:;Key Items:;; -4002;Cards:;Cards:;; -4003;Accessories:;Accessories:;; -4010;Trade Cards for ;Trade Cards for ;; -4020;Collector;Collector;; -4030;Trade cards for ?;Trade cards for ?;; -4031;Yes;Yes;; -4032;No;No;; -4040;No limit;No limit;; -4041;RANK C;RANK C;; -4042;RANK B;RANK B;; -4043;RANK A;RANK A;; -4044;RANK S;RANK S;; -4045;RANK SS;RANK SS;; -4100;Card Set;Card Set;; -4101;Completion Rate;Completion Rate;; -4102;Prize;Prize;; -4200;ALL;ALL;; -4201;C;C;; -4202;B;B;; -4203;A;A;; -4204;S;S;; -4205;SS;SS;; -4210;The exchange has not been completed. Close the window?;The exchange has not been completed. Close the window?;; -4211;Yes;Yes;; -4212;No;No;; -4220;Do you want to trade your cards for this?;Do you want to trade your cards for this?;; -4221;Yes;Yes;; -4222;No;No;; -4225;Do you want to trade these cards?;Do you want to trade these cards?;; -4226;Yes;Yes;; -4227;No;No;; -4230;Cards to exchange;Cards to exchange;; -4231;Total Points;Total Points;; -4232;Required Points;Required Points;; -4233;Cancel;Cancel;; -4234;Exchange Item;Exchange Item;; -4240;No Rank limit;No Rank limit;; -4241;C Rank only;C Rank only;; -4242;B Rank only;B Rank only;; -4243;A Rank only;A Rank only;; -4244;S Rank only;S Rank only;; -4245;SS Rank only;SS Rank only;; -4250;Choose a card to withdraw.;Choose a card to withdraw.;; -4300;Become a Host;Become a Host;; -4301;Become a Guest;Become a Guest;; -4302;Become the Host of this room and wait for an opponent.;Become the Host of this room and wait for an opponent.;; -4303;Look for a room with a Host and if a spot is available, you can connect to this room.;Look for a room with a Host and if a spot is available, you can connect to this room.;; -4310;Hosts List;Hosts List;; -4311;Friend Ranking;Friend Ranking;; -4312;Ranking;Ranking;; -4313;ROOM INDEX;ROOM INDEX;; -4400;Ranking Battle;Ranking Battle;; -4401;Tournament Battle;Tournament Battle;; -4402;View the top 100.;View the top 100.;; -4405;Search by ranking;Search by ranking;; -4406;Find a friend;Find a friend;; -4410;PLAYER DATA;PLAYER DATA;; -4411;World Ranking;World Ranking;; -4412;Tournament Participants;Tournament Participants;; -4420;Ranking;Ranking;; -4421;Ranking points;Ranking points;; -4422;Wins;Wins;; -4430;Do you want to see the information on?\n;Do you want to see the information on?\n;; -4431;Yes;Yes;; -4432;No;No;; -4440;Fight?;Fight?;; -4441;Yes;Yes;; -4442;No;No;; -4450;Return to the Tournament screen;Return to the Tournament screen;; -4451;OK;OK;; -4460;Start the Tournament?;Start the Tournament?;; -4461;Yes;Yes;; -4462;No;No;; -4470;Remove?;Remove?;; -4471;Yes;Yes;; -4472;No;No;; -4480;Choose your opponent and fight.;Choose your opponent and fight.;; -4481;You will be participating in a Tournament Match.;You will be participating in a Tournament Match.;; -4482;View the data for rankings 1 through 100.;View the data for rankings 1 through 100.;; -4485;Looking for an opponent with a ranking close to yours.;Looking for an opponent with a ranking close to yours.;; -4486;Look for opponents from your Friends List.\nWinning these battles will not increase your RP.;Look for opponents from your Friends List.\nWinning these battles will not increase your RP.;; -4500;StreetPass List;StreetPass List;; -4501;DATA;DATA;; -4600;Floor selection;Floor selection;; -4610;3rd floor;3rd floor;; -4611;2nd floor;2nd floor;; -4612;1st floor;1st floor;; -4700;Register Partner;Register Partner;; -4701;Load Partner Data;Load Partner Data;; -4702;Storage Card;Storage Card;; -4703;StreetPass Communication Settings;StreetPass Communication Settings;; -4710;Save the current Partner Digimon data to the Digi-Storage.;Save the current Partner Digimon data to the Digi-Storage.;; -4711;Load Digimon Data stored in the Digi-Storage.;Load Digimon Data stored in the Digi-Storage.;; -4712;Save special Digimon to the Digi-Storage using Storage Cards.;Save special Digimon to the Digi-Storage using Storage Cards.;; -4713;Unconfigured - Description of StreetPass Communications.;Unconfigured - Description of StreetPass Communications.;; -4800;Select a slot to register data.\n;Select a slot to register data.\n;; -4801;Select a slot to load data from.;Select a slot to load data from.;; -4802;Select the Digi-Storage used for StreetPass.;Select the Digi-Storage used for StreetPass.;; -4803;Digi-Storage;Digi-Storage;; -4805;Partner;Partner;; -4806;Storage Card;Storage Card;; -4810;Loaded Partner Data;Loaded Partner Data;; -4811;StreetPass Digimon;StreetPass Digimon;; -4820;Do you want to load this data?;Do you want to load this data?;; -4821;Yes;Yes;; -4822;No;No;; -4830;Register here?;Register here?;; -4831;Yes;Yes;; -4832;No;No;; -4840;Are you sure you want to overwrite this data?;Are you sure you want to overwrite this data?;; -4841;Yes;Yes;; -4842;No;No;; -4850;Do you want to load the data of this Digimon?;Do you want to load the data of this Digimon?;; -4851;Yes;Yes;; -4852;No;No;; -4860;Do you want to use this Digimon for StreetPass?;Do you want to use this Digimon for StreetPass?;; -4861;Yes;Yes;; -4862;No;No;; -4900;Sel.;Sel.;; -4901;Status;Status;; -4902;Registration Confirmation;Registration Confirmation;; -5000;Meeting Point;Meeting Point;; -5001;Standard Area;Standard Area;; -5100;Generation;Generation;; -5101;Wins;Wins;; -5102;MEMORIZED;MEMORIZED;; -5200;System;System;; -5201;Digimon;Digimon;; -5202;Battle;Battle;; -5203;Orders count;Orders count;; -5204;Raised;Raised;; -5205;Training;Training;; -5206;Facilities;Facilities;; -5207;Fishing count;Fishing count;; -5208;DoReMiFa Mansion;DoReMiFa Mansion;; -5209;Mt. Infinity;Mt. Infinity;; -5210;Colosseum;Colosseum;; -5211;StreetPass Play;StreetPass Play;; -5300;Travel Distance;Travel Distance;; -5301;Digivice Opened;Digivice Opened;; -5302;Save Count;Save Count;; -5303;Medals Completion Rate;Medals Completion Rate;; 5304;Digivolution Completion Rate;Evolution Completion Rate;; -5305;Card List Completion Rate;Card List Completion Rate;; -5306;Total Bits gained so far;Total Bits gained so far;; -5307;Total Bits gained in battle;Total Bits gained in battle;; -5308;Total Bits gained from the sale of items;Total Bits gained from the sale of items;; -5309;Total Bit gained from the sale of cards;Total Bit gained from the sale of cards;; -5310;Game Cleared;Game Cleared;; -5400;Yellow DigiEgg Count;Yellow DigiEgg Count;; -5401;Blue DigiEgg Count;Blue DigiEgg Count;; -5402;Red DigiEgg Count;Red DigiEgg Count;; -5403;Green DigiEgg Count;Green DigiEgg Count;; -5404;Purple DigiEgg Count;Purple DigiEgg Count;; -5405;Pink DigiEgg Count;Pink DigiEgg Count;; -5406;Gray DigiEgg Count;Gray DigiEgg Count;; +5309;Total Bit gained from the sale of cards;Total Bits gained from the sale of cards;; 5407;Most digivolved Rookie;Most evolved Child;; 5408;Most digivolved Champion;Most evolved Adult;; 5409;Most digivolved Ultimate;Most evolved Perfect;; 5410;Most digivolved Mega;Most evolved Ultimate;; -5411;Times you've become Sukamon;Times you've become Sukamon;; -5500;Battle Count;Battle Count;; -5501;Battles Won;Battles Won;; -5502;No Damage Victories;No Damage Victories;; -5503;Battles Escaped;Battles Escaped;; -5504;Times Special Move used;Times Special Move used;; -5505;Number of successful power-ups;Number of successful power-ups;; -5506;Number of successful defense ups;Number of successful defense ups;; -5507;Number of successful assists;Number of successful assists;; -5508;Number of summoned Digimon;Number of summoned Digimon;; -5509;Number of Crown Digimon defeated;Number of Crown Digimon defeated;; -5510;Maximum Damage;Maximum Damage;; -5600;Most common used commands;Most common used commands;; -5601;Your Call;Your Call;; -5602;Full Power;Full Power;; -5603;Moderate;Moderate;; -5604;Distance;Distance;; -5605;Hold;Hold;; -5606;Run;Run;; -5607;Move;Move;; -5608;Target;Target;; -5609;Fire Skills;Fire Skills;; -5610;Ice Skills;Ice Skills;; -5611;Air Skills;Air Skills;; -5612;Nature Skills;Nature Skills;; -5613;Combat Skills;Combat Skills;; -5614;Light and Dark Skills;Light and Dark Skills;; -5615;Machine Skills;Machine Skills;; -5616;Filth Skills;Filth Skills;; -5700;Times Fed;Times Fed;; -5701;Times Praised;Times Praised;; -5702;Times Scolded;Times Scolded;; -5703;Times put to sleep;Times put to sleep;; -5704;Times toilets were used;Times toilets were used;; -5705;Times pooped on the floor;Times pooped on the floor;; -5706;Injured Count;Injured Count;; -5707;Sickness Count;Sickness Count;; 5708;Number of Digivolutions;Number of Evolutions;; -5709;Partner Reborn Count;Partner Reborn Count;; -5800;Training Count;Training Count;; -5801;Gym Training Count;Gym Training Count;; -5802;Colosseum Visits;Colosseum Visits;; -5803;Times you left the city;Times you left the city;; -5804;Log Splitting - Beginner;Log Splitting - Beginner;; -5805;Log Splitting - Intermediate;Log Splitting - Intermediate;; -5806;Log Smashing - Advanced;Log Smashing - Advanced;; -5807;Giant Roulette - Beginner;Giant Roulette - Beginner;; -5808;Giant Roulette - Intermediate;Giant Roulette - Intermediate;; -5809;Giant Roulette - Advanced;Giant Roulette - Advanced;; -5810;Punch Blocking - Beginner;Punch Blocking - Beginner;; -5811;Punch Blocking - Intermediate;Punch Blocking - Intermediate;; -5812;Punch Blocking - Advanced;Punch Blocking - Advanced;; -5813;Bomb Evasion - Beginner;Bomb Evasion - Beginner;; -5814;Bomb Evasion - Intermediate;Bomb Evasion - Intermediate;; -5815;Bomb Evasion - Advanced;Bomb Evasion - Advanced;; -5816;3D Ghost Leg - Beginner;3D Ghost Leg - Beginner;; -5817;3D Ghost Leg - Intermediate;3D Ghost Leg - Intermediate;; -5818;3D Ghost Leg - Advanced;3D Ghost Leg - Advanced;; -5819;Dice Matching - Beginner;Dice Matching - Beginner;; -5820;Dice Matching - Intermediate;Dice Matching - Intermediate;; -5821;Dice Matching - Advanced;Dice Matching - Advanced;; -5900;Rest at Jijimon's House;Rest at Jijimon's House;; -5901;Obtain Meat from the Meat Field;Obtain Meat from the Meat Field;; -5902;Trade in Meat futures market;Trade in Meat futures market;; -5903;Rest at the Angel Clinic;Rest at the Angel Clinic;; -5904;Eat at the Restaurant.;Eat at the Restaurant.;; -5905;Use Birdra Transport;Use Birdra Transport;; -5906;Buy a 3 card pack at the card store;Buy a 3 card pack at the card store;; -5907;Buy a 10 card pack at the card store;Buy a 10 card pack at the card store;; -5908;Used the Treasure Hunter Airdramon;Used the Treasure Hunter Airdramon;; -5909;Used the Treasure Hunter Garudamon;Used the Treasure Hunter Garudamon;; -5910;Used Fortune-telling;Used Fortune-telling;; -5911;Used a recovery;Used a recovery;; -6000;Times fished;Times fished;; -6001;Number of times of catching a big fish;Number of times of catching a big fish;; -6002;Used bait.;Used bait.;; -6003;Lost bait.;Lost bait.;; -6004;Used lure.;Used lure.;; -6005;Lost lure.;Lost lure.;; -6006;Fished long boots.;Fished long boots.;; -6007;Caught with worn fishing rod.;Caught with worn fishing rod.;; -6008;Caught with ordinary fishing rod.;Caught with ordinary fishing rod.;; -6009;Caught with amazing fishing rod.;Caught with amazing fishing rod.;; -6100;Salary received to date;Salary received to date;; -6101;Times you have received a paycheck;Times you have received a paycheck;; -6102;Listened to Resident's Requests;Listened to Resident's Requests;; -6103;Room 101;Room 101;; -6104;Room 201;Room 201;; -6105;Room 202;Room 202;; -6106;Room 301;Room 301;; -6107;Room 302;Room 302;; -6108;Using Nanimon's toilet;Using Nanimon's toilet;; -6109;Count of garbage given to Garbagemon.;Count of garbage given to Garbagemon.;; -6200;Total mileage on Mt. Infinity;Total mileage on Mt. Infinity;; -6201;Time spent inside Mt. Infinity;Time spent inside Mt. Infinity;; -6202;Steps Count;Steps Count;; -6203;Obtained MB;Obtained MB;; -6204;Number of attempts;Number of attempts;; -6205;Times returned to the lobby;Times returned to the lobby;; -6206;Times using Infinity Pilot;Times using Infinity Pilot;; -6207;Times you have become huge;Times you have become huge;; -6208;Times you reached 100F;Times you reached 100F;; -6209;Fastest game clear time;Fastest game clear time;; -6300;Free Battles Won;Free Battles Won;; -6301;Tournaments Won;Tournaments Won;; -6302;1F Wins;1F Wins;; -6303;10F Wins;10F Wins;; -6304;20F Wins;20F Wins;; -6305;30F Wins;30F Wins;; -6306;40F Wins;40F Wins;; -6307;Times you've beaten Niko;Times you've beaten Niko;; -6400;Local Matches Count;Local Matches Count;; -6401;Local Co-op Count;Local Co-op Count;; -6402;DigiMemory Transfer Count;DigiMemory Transfer Count;; -6403;Number of cards transfered;Number of cards transfered;; -6404;StreetPass Battles;StreetPass Battles;; -6405;Network Connection Count;Network Connection Count;; -6406;Highest Ranking Points;Highest Ranking Points;; -6407;Ranking Battle Won;Ranking Battle Won;; -6408;Fights with friends;Fights with friends;; -6500;Player Records;Player Records;; -6510;Travel Distance;Travel Distance;; -6511;Battle Count;Battle Count;; -6512;Save Count;Save Count;; -6513;Training Count;Training Count;; -6514;Fishing Count;Fishing Count;; -6515;Partner Reincarnations;Partner Reincarnations;; 6516;Digivolutions Completed;Evolutions Completed;; -6517;Card List Completed;Card List Completed;; -6518;Crown Digimon Defeated;Crown Digimon Defeated;; -6519;Game Cleared;Game Cleared;; -7000;Digi-Trade;Digi-Trade;; -7001;TRADE ITEM;TRADE ITEM;; -7002;TRADING;TRADING;; -7003;Trade Amount;Trade Amount;; -7010;Trades;Trades;; -7011;Max. Trades;Max. Trades;; -7100;EXIT;EXIT;; -7101;TOILET;TOILET;; -7102;VENDING;VENDING;; -7103;FISHING;FISHING;; -7104;FACILITY;FACILITY;; -7105;EVENT;EVENT;; -7106;TRAINING;TRAINING;; -7107;MEMORIAL\n STELA;MEMORIAL\n STELA;; -7200;Please wait.;Please wait.;; -7209;Registering Digimon World Re:Digitize Decode for StreetPass on your Nintendo 3DS. After registering, you will be able to exchange Player information and Partner Digimon data when you cross paths with other users who have registered this software in StreetPass. You can register up to 3 Partners for exchange, and you can share your save data with them.;Registering Digimon World Re:Digitize Decode for StreetPass on your Nintendo 3DS. After registering, you will be able to exchange Player information and Partner Digimon data when you cross paths with other users who have registered this software in StreetPass. You can register up to 3 Partners for exchange, and you can share your save data with them.;; -7210;Would you like to register for StreetPass?;Would you like to register for StreetPass?;; -7211;Yes;Yes;; -7212;No;No;; -7215;You have registered Digimon World Re:Digitize Decode for StreetPass. Even if you quit the game, StreetPass will continue to function. To quit StreetPass, select System Settings from the HOME menu, then go to Data Management and StreetPass Management and select Quit StreetPass.;You have registered Digimon World Re:Digitize Decode for StreetPass. Even if you quit the game, StreetPass will continue to function. To quit StreetPass, select System Settings from the HOME menu, then go to Data Management and StreetPass Management and select Quit StreetPass.;; -7216;It's not possible to register this for StreetPass on the Nintendo 3DS. To register StreetPass for this software, go to the HOME menu, select StreetPass Settings, go to Data Management, then select StreetPass Management and cancel the StreetPass settings for other software.;It's not possible to register this for StreetPass on the Nintendo 3DS. To register StreetPass for this software, go to the HOME menu, select StreetPass Settings, go to Data Management, then select StreetPass Management and cancel the StreetPass settings for other software.;; -7220;Cross-Storage;Cross-Storage;; -7225;Do you want to delete this Digimon?;Do you want to delete this Digimon?;; -7226;Yes;Yes;; -7227;No;No;; -7230;Do you want to register this Digimon?;Do you want to register this Digimon?;; -7231;Yes;Yes;; -7232;No;No;; -7240;Registration was successful.;Registration was successful.;; -7241;Successfully deleted.;Successfully deleted.;; -7242;In order to use StreetPass, you must agree to the latest Terms of Service. From the HOME menu, go to System Settings, Internet Settings, Other Information, and Review Terms of Use. Please accept the latest Terms of Use.;In order to use StreetPass, you must agree to the latest Terms of Service. From the HOME menu, go to System Settings, Internet Settings, Other Information, and Review Terms of Use. Please accept the latest Terms of Use.;; -7243;StreetPass is currently not available due to parental restrictions.;StreetPass is currently not available due to parental restrictions.;; -7250;No communication Partner has been set, are you sure?;No communication Partner has been set, are you sure?;; -7251;Yes;Yes;; -7252;No;No;; -7260;The transmission of StreetPass Partner data will be stopped. To quit StreetPass, go to the HOME menu, select Settings, then go to Data Management, then StreetPass Management and select Quit StreetPass. To register a communication partner again, go to Digi-Storage and select Register a communication Partner to set up your settings.;The transmission of StreetPass Partner data will be stopped. To quit StreetPass, go to the HOME menu, select Settings, then go to Data Management, then StreetPass Management and select Quit StreetPass. To register a communication partner again, go to Digi-Storage and select Register a communication Partner to set up your settings.;; -7300;SAVE;SAVE;; -7301;DELETE;DELETE;; -7302;TYPE;TYPE;; -7303;FORM;FORM;; -7304;COLOR;COLOR;; -7400;TARGET;TARGET;; -7401;Quit;Quit;; -7500;Amateur;Amateur;; -7501;Novice;Novice;; -7502;Beginner;Beginner;; -7503;Rookie;Rookie;; -7504;Intermediate;Intermediate;; -7505;Advanced;Advanced;; -7506;Breaker;Breaker;; -7507;Guardian;Guardian;; -7508;Scalar Operator;Scalar Operator;; -7509;Wizard;Wizard;; -7510;Specialist;Specialist;; -7511;Booster;Booster;; -7512;Resistor;Resistor;; -7513;Accelerator;Accelerator;; -7514;Genius;Genius;; -7515;BM Master;BM Master;; -7516;Protector;Protector;; -7517;Cyclic Theorist;Cyclic Theorist;; -7518;Savant;Savant;; -7519;Ascended;Ascended;; -7520;D-Force Member;D-Force Member;; -7521;Neumann Theorist;Neumann Theorist;; -7522;Paradigm Shifter;Paradigm Shifter;; -7523;Tempest Phreak;Tempest Phreak;; -7524;Cosmic Scientist;Cosmic Scientist;; -7525;Chaos-theory Researcher;Chaos-theory Researcher;; -7526;Altair Astrounaut;Altair Astrounaut;; -7527;Limit Breaker;Limit Breaker;; -7528;Infinity Master;Infinity Master;; -7529;Decoder;Decoder;; -7530;∞ Decoder;∞ Decoder;; -7600;World Map;World Map;; -7601;D-File;D-File;; -7610;Displays the entire map of File Island.;Displays the entire map of File Island.;; -7611;Check out the information on the Digimon that were found in each area.;Check out the information on the Digimon that were found in each area.;; 7700;Digivolutions;Evolutions;; -7701;History;History;; 7710;Look at the Digimon your Partner digivolved into during your Adventures.;Look at the Digimon your Partner evolved into during your Adventures.;; 7711;Check out the Digivolution history of your current Partner Digimon.;Check out the Evolution history of your current Partner Digimon.;; -7800;Parrot Carrier;Parrot Carrier;; -7810;Train Garage;Train Garage;; -7811;Cherry's Observatory;Cherry's Observatory;; -7812;Big Cauldron Hall;Big Cauldron Hall;; -7813;Drill Tunnel;Drill Tunnel;; -7814;Frozen Sea Tanker;Frozen Sea Tanker;; -7820;A square southwest of the Railroad Plains, filled with old trains.;A square southwest of the Railroad Plains, filled with old trains.;; -7821;A huge mushroom left behind by Cherrymon at the Ancient Bone Swamp. You can climb it all the way to the top.;A huge mushroom left behind by Cherrymon at the Ancient Bone Swamp. You can climb it all the way to the top.;; -7822;Wizardmon's residence at the Sewer Maze. He is said to conduct dubious experiments there.;Wizardmon's residence at the Sewer Maze. He is said to conduct dubious experiments there.;; -7823;A long tunnel dug by Drimogemon. Connects the Night Canyon, Fluorescent Cave, and Sewer Maze.;A long tunnel dug by Drimogemon. Connects the Night Canyon, Fluorescent Cave, and Sewer Maze.;; -7824;A huge tanker washed ashore near the east-center of the Powdery Cliff.;A huge tanker washed ashore near the east-center of the Powdery Cliff.;; -7830;, right?;, right?;; -7831;Yes;Yes;; -7832;No;No;; diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/keep-39.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/keep-39.csv new file mode 100644 index 0000000..39da81f --- /dev/null +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/keep-39.csv @@ -0,0 +1,2 @@ +index;original;replace;excludeTerms;excludePaths +24;x;Even among Child Digimon, depending on how they're\ntrained, there can be a huge difference in strength!;;all From 4042ffa868046cf8f53820ffe1d61a8d6ccc5029 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Sat, 18 May 2024 10:39:47 +0200 Subject: [PATCH 37/54] Additional file for Digimon names in general text --- .../decode/randomizer/settings/NamingSettings.java | 7 ++++--- .../decode/randomizer/renamingPresets/_general_digimon.csv | 4 ++++ 2 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/_general_digimon.csv diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index 75cca99..d29f8b1 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -69,7 +69,7 @@ public class NamingSettings implements Setting { private final BooleanProperty blackPrefix = new SimpleBooleanProperty(false); private final Map randoMap = new HashMap<>(); private final List randoTypes = List.of("Digimon Names", "Finisher Names", "Skill Names", "Character Names", "Item Names", "Medal Names"); - private final List priorities = List.of("_general.csv", "DigimonNames.csv", "CardNames1.csv", "FinisherNames.csv"); + private final List priorities = List.of("_general.csv", "_general_digimon.csv", "DigimonNames.csv", "CardNames1.csv", "FinisherNames.csv"); private final Map repMap = new HashMap<>(); private Accordion mainAc; @@ -112,6 +112,7 @@ protected enum TermType { private static TermType classifyTerm(String term, String path) { //These files contain digimon names List digiNamePaths = List.of(11, 27, 28).stream().map(n -> "part0\\arcv\\Keep\\LanguageKeep_jp.res\\" + n).collect(Collectors.toList()); + digiNamePaths.add("_general_digimon.csv"); return digiNamePaths.contains(path) ? (term.matches(".*[a-z][A-Z].*") ? TermType.DIGIMONMULTI : TermType.DIGIMON) : TermType.GENERAL; } @@ -708,9 +709,9 @@ public void randomize(RandomizationContext context) { } List.of(origin.listFiles()).stream().sorted(Comparator.comparing(f -> priorities.indexOf(f.getName()))).sorted(Comparator.comparing(f -> priorities.contains(f.getName()) ? -1 : 1)).forEach(p -> { String pName = p.getName(); - if (pName.equals("_general.csv")) { + if (pName.equals("_general.csv") || pName.equals("_general_digimon.csv")) { if (replaceAll.get()) { - System.out.println("Parsing general Replacements"); + System.out.println("Parsing general " + (pName.contains("digimon") ? "Digimon " : "") + "replacements"); parseReplacements(p, pName, true); } return; diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/_general_digimon.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/_general_digimon.csv new file mode 100644 index 0000000..3031880 --- /dev/null +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/_general_digimon.csv @@ -0,0 +1,4 @@ +index;original;replace;excludeTerms;excludePaths +0;VenomMyotismon;VenomVamdemon;; +0;Warumonzaemon;WaruMonzaemon;; +0;Megaseadramon;MegaSeadramon;; \ No newline at end of file From 7d6b46f59642a55131fb97edb598121968f387cb Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Sat, 18 May 2024 11:28:06 +0200 Subject: [PATCH 38/54] Case insensitive article correction Partial term recognition respects newlines --- .../randomizer/settings/NamingSettings.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index d29f8b1..62de0b0 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -272,13 +272,13 @@ private int correctArticle(BTXEntry btx, int start) { } String text = btx.getString(); if (vow.contains(replacement.substring(0, 1))) { - if (text.substring(Math.max(0, start - 3), start).matches(".*\\ba\\b.*")) { + if (text.substring(Math.max(0, start - 3), start).matches(".*\\b[aA]\\b.*")) { btx.setString(text.substring(0, start - 1) + "n" + text.substring(start - 1)); return 1; } return 0; } else { - if (text.substring(Math.max(0, start - 4), start).matches(".*\\ban\\b.*")) { + if (text.substring(Math.max(0, start - 4), start).matches(".*\\b[aA]n\\b.*")) { btx.setString(text.substring(0, start - 2) + text.substring(start - 1)); return -1; } @@ -376,9 +376,18 @@ private boolean termExclusion(String text, int index) { } int exDex = text.indexOf(term); if (exDex == -1) { - continue; + if (text.contains("\n")) { + Matcher mt = Pattern.compile(term.replaceAll(" ", "(\\\\s)")).matcher(text); + if (mt.find()) { + exDex = mt.start(); + } else { + continue; + } + } else { + continue; + } } - int subDex = term.indexOf(original); + int subDex = term.replaceAll("\n", " ").indexOf(original); if (exDex + subDex == index) { return true; } From 8532976a935621e2cec286c67f4fd8ddcc826851 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Sat, 18 May 2024 12:56:39 +0200 Subject: [PATCH 39/54] Documentaion Tweaks to general replacements --- .../randomizer/settings/NamingSettings.java | 90 ++++++++++++++----- .../randomizer/renamingPresets/_general.csv | 16 ++-- 2 files changed, 73 insertions(+), 33 deletions(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index 62de0b0..d8612ab 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -124,10 +124,10 @@ private static void btxSwitch(BTXEntry btxA, BTXEntry btxB) { } /** - * This class does everything that has to do with replacing strings - * directly. + * This class does everything that has to do with directly replacing + * strings. */ - private class Replacement { + private final class Replacement { public String original; public String replacement; @@ -136,13 +136,24 @@ private class Replacement { private final ArrayList enabledPaths = new ArrayList(); private final int matchLength; private int index = -1; + /** + * Does this replacement need to check for apostrophe correction? + */ private final boolean diffS; + /** + * Does this replacement need to check for indefinite article + * correction? + */ private final boolean diffArt; private final int baseOffset; public boolean global = true; private final List vow = List.of("A", "E", "I", "O", "U", "Ü", "Ö", "Ä"); - private class PathPosition { + /** + * Utility class used to compare references to text positions supporting + * wildcards for lines and columns. + */ + private final class PathPosition { public int line = -1; public int col = -1; @@ -169,6 +180,11 @@ public PathPosition(String pathDescriptor) { } + /** + * Check if two paths match. If wildcards are used, the second path + * has to be the shorter one which currently is always the case + * since generated paths are always full length. + */ public boolean matches(PathPosition p2) { return (this.wildcard ? p2.path.endsWith(path) : p2.path.equals(path)) && (line == -1 || p2.line == line) @@ -227,17 +243,10 @@ public Replacement(String index, String original, String replacement, String raw } } - public void replaceExact(BTXPayload btx, String path) { - BTXEntry entry = btx.getEntryById(index).get(); - if (!original.equals(replacement)) { - entry.setString(replacement); - System.out.println(original + " -> " + replacement); - } - // Exact replacements block any future replacements on this particular line. - insertRepData(path + ":" + index, -1, Integer.MAX_VALUE, 0); - } - - //Fixing mistakes like Davis' -> Daisuke' etc + /** + * Fixing mistakes like Davis' -> Daisuke' etc, returning the + * modification to the offset value. + */ private int correctApostrophe(BTXEntry btx, int end) { if (!diffS) { return 0; @@ -265,19 +274,27 @@ private int correctApostrophe(BTXEntry btx, int end) { } } - //Fixing mistakes like "a Champion" -> "a AAdult" + /** + * Fixing mistakes like "a Champion" -> "a Adult", returns the + * modification to the offset value. + * + * Cannot be 100% accurate because of arbitrary "consonantal properties" + * of vowels in some words. + */ private int correctArticle(BTXEntry btx, int start) { if (!diffArt || start == 0) { return 0; } String text = btx.getString(); if (vow.contains(replacement.substring(0, 1))) { + //Adding the missing n if (text.substring(Math.max(0, start - 3), start).matches(".*\\b[aA]\\b.*")) { btx.setString(text.substring(0, start - 1) + "n" + text.substring(start - 1)); return 1; } return 0; } else { + //Removing the n if (text.substring(Math.max(0, start - 4), start).matches(".*\\b[aA]n\\b.*")) { btx.setString(text.substring(0, start - 2) + text.substring(start - 1)); return -1; @@ -286,6 +303,21 @@ private int correctArticle(BTXEntry btx, int start) { } } + /** + * Replace an entire line for a specific index of a BTX. + * + * This method does not check what the line currently contains. + */ + public void replaceExact(BTXPayload btx, String path) { + BTXEntry entry = btx.getEntryById(index).get(); + if (!original.equals(replacement)) { + entry.setString(replacement); + System.out.println(original + " -> " + replacement); + } + // Exact replacements block any future replacements on this particular line. + insertRepData(path + ":" + index, -1, Integer.MAX_VALUE, 0); + } + public void replaceDynamic(BTXEntry btx, String path) { String origText = btx.getString(); Tuple match = findInText(origText, path); @@ -307,6 +339,10 @@ public void replaceDynamic(BTXEntry btx, String path) { insertRepData(path, matchStart, matchEnd, finalOffset); } + /** + * Checks where the position of the current match would have been in the + * unmodified text + */ private int realPosition(String path, int index) { ArrayList repls = replacementMap.get(path); if (repls == null) { @@ -324,6 +360,10 @@ private int realPosition(String path, int index) { return index + finalOffset; } + /** + * Checks if the current match overlaps a text range that has already + * been replaced. + */ private boolean isOverlapping(String path, int index) { ArrayList repls = replacementMap.get(path); if (repls == null) { @@ -339,6 +379,7 @@ private boolean isOverlapping(String path, int index) { break; } if (end >= pos && start < pos) { + // Oh no, an overlap! return true; } } @@ -396,7 +437,7 @@ private boolean termExclusion(String text, int index) { } private boolean pathExclusion(String path, int index) { - PathPosition currentPath = new PathPosition(path + ':' + index); + PathPosition currentPath = new PathPosition(path + ':' + realPosition(path, index)); for (PathPosition p : disabledPaths) { if (p.matches(currentPath)) { System.out.println("skipping " + path + " for " + original); @@ -466,6 +507,9 @@ private Tuple findInText(String text, String path) { } + /** + * Exports all methods for name lists from the LanguageKeep + */ private ArrayList getNameListMethods(LanguageKeep lang) { ArrayList methodList = new ArrayList<>(); Method[] methods = lang.getClass().getMethods(); @@ -478,17 +522,16 @@ private ArrayList getNameListMethods(LanguageKeep lang) { return methodList; } - private static boolean clearExportDir(File dir) { + private static void clearExportDir(File dir) { try { if (dir.exists()) { Files.walkFileTree(dir.toPath(), new DeleteDirectoryFileVisitor()); } } catch (IOException exc) { exc.printStackTrace(); - return false; + return; } dir.mkdir(); - return true; } private static EventHandler buildHandler(String resourcePath, File targetDir) { @@ -709,6 +752,7 @@ public void randomize(RandomizationContext context) { PathResolver res = new PathResolver(context); if (mode.equals("restore")) { + // Main logic for dub -> sub conversion File manualCsvDir = new File(".\\renamingPresets\\"); File origin; if (manualCsv.get() && manualCsvDir.exists()) { @@ -739,7 +783,7 @@ public void randomize(RandomizationContext context) { File startDir = new File(".\\working\\part0\\arcv\\"); - //Sorting + //Sorting our replacements by length to avoid lobger replacements getting overriding by prior partial matches. List sortedReps = repMap.values().stream().sorted(Comparator.comparing(v -> v.original.length() * -1)).collect(Collectors.toList()); ArrayList> fileEntries = new ArrayList(); Utils.listFiles(startDir).stream() @@ -752,9 +796,6 @@ public void randomize(RandomizationContext context) { Path normalPath = longPath.subpath(2, longPath.getNameCount()); var elements = res.resolveRaw(normalPath.toString()).getElementsWithType(Payload.BTX); - if (elements.isEmpty()) { - return; - } for (int i = 0; i < elements.size(); i++) { var payload = (BTXPayload) elements.get(i); @@ -771,6 +812,7 @@ public void randomize(RandomizationContext context) { replacementMap.clear(); } else { + //Randomizing different lists of strings Random rand = new Random(context.getInitialSeed() * "ShuffleTerms".hashCode()); randoTypes.stream().filter(k -> randoMap.get(k).get()).map(s -> s.replaceAll(" ", "")).forEach(name -> { try { diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/_general.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/_general.csv index f72046a..747108c 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/_general.csv +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/_general.csv @@ -1,17 +1,15 @@ index;original;replace;excludeTerms;excludePaths 0;Fresh;Baby I;$ly;*\LanguageKeep_jp.res\14:4227 -0;Champion;Adult;Digimon $,Colosseum $,Tenkaichi $,You're the $; -0;Ultimate;Perfect;$ Piece,$ X Antibody,$Brachiomon,$Brachimon,$ Stream,$ body,$ victory,$ Sacrifice,$ Ouryuken,$ Poop Hell,$ Weapon,$ Cup,$ Herbal,$ Slicer,$ Enemy,$ Thunder,$\nBlast,$ Quake; -0;Mega;Ultimate;$ Meat,$ Blaster,$seadramon,$dramon,$Seadramon,$ Burst,$battle,$ly; -0;Rookie;Child Digimon;;!*\LanguageKeep_jp.res\12:198,!*\LanguageKeep_jp.res\42:224, -0;Rookie;Child;$ Collector;*\mgm01_text.pack\55:600,*\mgm01_text.pack\55:500,*\LanguageKeep_jp.res\15:812 +0;Champion;Adult;Digimon $,Colosseum $,Tenkaichi $,You're the $,Limit $s; +0;Ultimate;Perfect;$ Piece,$ X Antibody,$Brachiomon,$Brachimon,$ Stream,$ body,$ victory,$ Sacrifice,$ Ouryuken,$ Poop Hell,$ Weapon,$ Herbal,$ Slicer,$ Enemy,$ Thunder,$ Blast,$ Quake,$ly;*\LanguageKeep_jp.res\39:175 +0;Mega;Ultimate;$ Meat,$ Blaster,$seadramon,$dramon,$Seadramon,$ Burst,$battle,$Kabuterimon,$Gargomon,$ Electro,Ancient$,$lo,$ton,$ Barrage;*\LanguageKeep_jp.res\31:73,*\LanguageKeep_jp.res\35:188,*\LanguageKeep_jp.res\36:188 +0;Rookie;Child Digimon;;!*\LanguageKeep_jp.res\12:198,!*\LanguageKeep_jp.res\42:224 +0;Rookie;Child;$ Collector;*\mgm01_text.pack\55:600,*\mgm01_text.pack\55:700,*\LanguageKeep_jp.res\15:812 0;Rookies;Child Digimon;; +0;Champions;Adult Digimon;; 0;DigiArmor Energize;Digimental Up;; 0;Digi-Egg of;Digimental of;; 0;Digivol;Evol;; 0;digivol;evol;; 0;DNA Digivol;Jogress Evol;; -0;Digimon Fusion;Digimon Xros Wars;; -0;VenomMyotismon;VenomVamdemon;; -0;Warumonzaemon;WaruMonzaemon;; -0;Megaseadramon;MegaSeadramon;; \ No newline at end of file +0;Digimon Fusion;Digimon Xros Wars;; \ No newline at end of file From ee8c484c6039065b9951735e5ab54aecbd7eba8a Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Sat, 18 May 2024 13:51:51 +0200 Subject: [PATCH 40/54] Pruning unchanged entries --- .../randomizer/renamingPresets/ItemNames.csv | 398 ------------------ .../renamingPresets/KeyItemNames.csv | 126 +----- 2 files changed, 1 insertion(+), 523 deletions(-) diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/ItemNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/ItemNames.csv index d3f2701..9746fe4 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/ItemNames.csv +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/ItemNames.csv @@ -1,402 +1,4 @@ index;original;replace;excludeTerms;excludePaths -1;Small HP Disc;Small HP Disc;; -2;Medium HP Disc;Medium HP Disc;; -3;Large HP Disc;Large HP Disc;; -4;Super HP Disc;Super HP Disc;; -5;MP Disc;MP Disc;; -6;Medium MP Disc;Medium MP Disc;; -7;Large MP Disc;Large MP Disc;; -8;Double Disc;Double Disc;; -9;Remedy Disc;Remedy Disc;; -10;Omnipotent Disc;Omnipotent Disc;; -11;Protection Disc;Protection Disc;; -12;Restore Disc;Restore Disc;; -13;Super Restore Disc;Super Restore Disc;; -14;Bandage;Bandage;; -15;Bandage DX;Bandage DX;; -16;Attack Plugin;Attack Plugin;; -17;Defense Plugin;Defense Plugin;; -18;Highspeed Plugin;Highspeed Plugin;; -19;Universal Plugin;Universal Plugin;; -20;Attack Plugin S;Attack Plugin S;; -21;Defense Plugin S;Defense Plugin S;; -22;Highspeed Plugin S;Highspeed Plugin S;; -23;Autopilot;Autopilot;; -24;Attack Chip;Attack Chip;; -25;Defense Chip;Defense Chip;; -26;Brains Chip;Brains Chip;; -27;Speed Chip;Speed Chip;; -28;HP Chip;HP Chip;; -29;MP Chip;MP Chip;; -30;Devil Chip A;Devil Chip A;; -31;Devil Chip D;Devil Chip D;; -32;Devil Chip E;Devil Chip E;; -33;Portable Potty;Portable Potty;; -34;Training Manual;Training Manual;; -35;Rest Pillow;Rest Pillow;; -36;Amulet Charm;Amulet Charm;; -37;Enemy Bell;Enemy Bell;; -38;Health Sandals;Health Sandals;; -39;Meat;Meat;; -40;Giant Meat;Giant Meat;; -41;Sirloin;Sirloin;; -42;Super Carrot;Super Carrot;; -43;Cherry Radish;Cherry Radish;; -44;Scratchy Grass;Scratchy Grass;; -45;Digimushroom;Digimushroom;; -46;Ice Mushroom;Ice Mushroom;; -47;Deluxe Mushroom;Deluxe Mushroom;; -48;Digipine;Digipine;; -49;Smiling Apple;Smiling Apple;; -50;Energy Lemon;Energy Lemon;; -51;Gold Acorn;Gold Acorn;; -52;Heavy Strawberry;Heavy Strawberry;; -53;Divine Chestnut;Divine Chestnut;; -54;Super Veggie;Super Veggie;; -55;Edible Cactus;Edible Cactus;; -56;Orange Banana;Orange Banana;; -57;Strength Fruit;Strength Fruit;; -58;Tough Fruit;Tough Fruit;; -59;Quick Fruit;Quick Fruit;; -60;Wisdom Fruit;Wisdom Fruit;; -61;Robust Fruit;Robust Fruit;; -62;Peace Fruit;Peace Fruit;; -63;Digianchovy;Digianchovy;; -64;Digisnapper;Digisnapper;; -65;Digitrout;Digitrout;; -66;Black Digitrout;Black Digitrout;; -67;Digicatfish;Digicatfish;; -68;Digiseabass;Digiseabass;; -69;Digimedaka;Digimedaka;; -70;Digigoldfish;Digigoldfish;; -71;Digicarp;Digicarp;; -72;Black Digicarp;Black Digicarp;; -73;Digibitterling;Digibitterling;; -74;Digisalmon;Digisalmon;; -75;Digiloach;Digiloach;; -76;Digieel;Digieel;; -77;Digiarowana;Digiarowana;; -78;Digipirarucu;Digipirarucu;; -79;Moldy Meat;Moldy Meat;; -80;Happy Mushroom;Happy Mushroom;; -81;Chain Melon;Chain Melon;; -84;Giant Starfish;Giant Starfish;; -85;Tiny Starfish;Tiny Starfish;; -86;Spiky Starfish;Spiky Starfish;; -87;Round Starfish;Round Starfish;; -88;Mellow Starfish;Mellow Starfish;; -89;Bony Starfish;Bony Starfish;; -90;Giant Ore;Giant Ore;; -91;Ordinary Pebble;Ordinary Pebble;; -92;Green Digimushroom;Green Digimushroom;; -93;Very Dirty Item;Very Dirty Item;; -94;RE Disc;RE Disc;; -100;Giant Claw;Giant Claw;; -101;Flame Shard;Flame Shard;; -102;Blazing Wings;Blazing Wings;; -103;Devilish Wings;Devilish Wings;; -104;Righteous Mane;Righteous Mane;; -105;Divine Clothes;Divine Clothes;; -106;Mythic Beast Wing;Mythic Beast Wing;; -107;Steel Helmet;Steel Helmet;; -108;Sea Serpent's Blood;Sea Serpent's Blood;; -109;Mythril Coat;Mythril Coat;; -110;Dreadful Horn;Dreadful Horn;; -111;Sun Seed;Sun Seed;; -112;Beast Glove;Beast Glove;; -113;Crimson Virus;Crimson Virus;; -114;Divine Catmint;Divine Catmint;; -115;Steel Body Armor;Steel Body Armor;; -116;Mythril Horn;Mythril Horn;; -117;Metal Parts;Metal Parts;; -118;Cyber Parts;Cyber Parts;; -119;Darkness Dragon's Destroyer Arm;Darkness Dragon's Destroyer Arm;; -120;Lovely Plushie;Lovely Plushie;; -121;King Banana;King Banana;; -122;Golden Holy Wings;Golden Holy Wings;; -123;Golden Armor;Golden Armor;; -124;Thunderblade Horn;Thunderblade Horn;; -125;Metal Banana;Metal Banana;; -126;Angel & Demon Wings;Angel & Demon Wings;; -127;Giant Revolver;Giant Revolver;; -128;Lilac Seed;Lilac Seed;; -129;Explosive Rapid Fists;Explosive Rapid Fists;; -130;Night Invitation;Night Invitation;; -131;Grand Silver Wings;Grand Silver Wings;; -132;Lady's Black Wings;Lady's Black Wings;; -133;Gigantic Twin Blade;Gigantic Twin Blade;; -134;Mythril Hand;Mythril Hand;; -135;Sacred Bow;Sacred Bow;; -136;Blue Flame;Blue Flame;; -137;King's Horn;King's Horn;; -138;Heavenly Wings;Heavenly Wings;; -139;Seabeast Horn;Seabeast Horn;; -140;Angelic Holy Water;Angelic Holy Water;; -141;Proof of Courage;Proof of Courage;; -142;Bewitching Hairpin;Bewitching Hairpin;; -143;Hell Pistol;Hell Pistol;; -144;Chaotic Soul;Chaotic Soul;; -145;Dark Matter;Dark Matter;; -146;Gakuran of Justice;Gakuran of Justice;; -147;Love & Beauty Gem;Love & Beauty Gem;; -148;Holy Knight Certificate;Holy Knight Certificate;; -149;Solar Wings;Solar Wings;; -150;Full Moon Claws;Full Moon Claws;; -151;Courage X-Antibody;Courage X-Antibody;; -152;Perfected Holy Spear;Perfected Holy Spear;; -153;Ice Metal;Ice Metal;; -154;Beast Canon;Beast Canon;; -155;Gigantic Crushing Sword;Gigantic Crushing Sword;; -156;Dragon Emperor's Giant Lance;Dragon Emperor's Giant Lance;; -157;Golden Angel Wings;Golden Angel Wings;; -158;Frozen Fur;Frozen Fur;; -159;Mysterious DigiCore;Mysterious DigiCore;; -160;Digital Ion Water;Digital Ion Water;; -161;Rigid Body Plugin;Rigid Body Plugin;; -162;Reinforced RE Disc;Reinforced RE Disc;; -163;Special Move Disc;Special Move Disc;; -164;Sedation Disc;Sedation Disc;; -165;Overdrive Plugin;Overdrive Plugin;; -166;Swiftness Plugin;Swiftness Plugin;; -167;Meat Lure;Meat Lure;; -168;Giant Meat Lure;Giant Meat Lure;; -169;Sirloin Lure;Sirloin Lure;; -172;Training Cola;Training Cola;; -173;Komorebi Tea;Komorebi Tea;; -174;Old Capital Tea;Old Capital Tea;; -175;Ancient Coffee;Ancient Coffee;; -176;Underground Tea;Underground Tea;; -177;Fluorescent Oolong Tea;Fluorescent Oolong Tea;; -178;Neon Drink;Neon Drink;; -179;Digital Soda;Digital Soda;; -180;Heartwarming Tea;Heartwarming Tea;; -181;Iced Juice;Iced Juice;; -182;File Soda;File Soda;; -183;Infinity Water;Infinity Water;; -184;Digisquid;Digisquid;; -185;Digituna;Digituna;; -186;Digicrab;Digicrab;; -187;Digiwhale;Digiwhale;; -188;Pygmy King Digianchovy;Pygmy King Digianchovy;; -189;Sovereign Lord Digisnapper;Sovereign Lord Digisnapper;; -190;Roe King Digitrout;Roe King Digitrout;; -191;Emperor Black Digitrout;Emperor Black Digitrout;; -192;Earth God Digicatfish;Earth God Digicatfish;; -193;Fish God Digiseabass;Fish God Digiseabass;; -194;Prince Digimedaka;Prince Digimedaka;; -195;Gold King Digigoldfish;Gold King Digigoldfish;; -196;Monarch Digicarp;Monarch Digicarp;; -197;Overlord Black Digicarp;Overlord Black Digicarp;; -198;Prodigious King Digibitterling;Prodigious King Digibitterling;; -199;Frost King Digisalmon;Frost King Digisalmon;; -200;Viking Digiloach;Viking Digiloach;; -201;Shrewd King Digieel;Shrewd King Digieel;; -202;Dragon King Digiarowana;Dragon King Digiarowana;; -203;Tyrant Digipirarucu;Tyrant Digipirarucu;; -204;Monarch Digisquid;Monarch Digisquid;; -205;Sea King Digituna;Sea King Digituna;; -206;Digi Crabking;Digi Crabking;; -207;Legendary Digiwhale;Legendary Digiwhale;; -209;Cactus Gloves;Cactus Gloves;; -210;Fairy Leaf Wings;Fairy Leaf Wings;; -211;Fossilized Nail;Fossilized Nail;; -212;Black Metal;Black Metal;; -213;Rusty Railgun;Rusty Railgun;; -216;Crimson X Antibody;Crimson X Antibody;; -217;Ultimate X Antibody;Ultimate X Antibody;; -218;Supreme X Antibody;Supreme X Antibody;; -219;Well Done Meat;Well Done Meat;; -223;Brave Dragon Wings;Brave Dragon Wings;; -224;Golden Armor of Miracles;Golden Armor of Miracles;; -225;Snowball;Snowball;; -226;DoReMiFa Mansion Trash Data;DoReMiFa Mansion Trash Data;; -227;Recovery Floppy;Recovery Floppy;; -228;Medium Recovery Floppy;Medium Recovery Floppy;; -229;Large Recovery Floppy;Large Recovery Floppy;; -230;Super Recovery Floppy;Super Recovery Floppy;; -231;MP Floppy;MP Floppy;; -232;Medium MP Floppy;Medium MP Floppy;; -233;Large MP Floppy;Large MP Floppy;; -234;Double Floppy;Double Floppy;; -235;Medical Floppy;Medical Floppy;; -236;RE Floppy;RE Floppy;; -237;Omnipotent Floppy;Omnipotent Floppy;; -238;Protection Floppy;Protection Floppy;; -239;Restore Floppy;Restore Floppy;; -240;Super Restore Floppy;Super Restore Floppy;; -241;Bandage;Bandage;; -242;Infinity Bandage;Infinity Bandage;; -243;Attack Memory;Attack Memory;; -244;Defense Memory;Defense Memory;; -245;Speed Memory;Speed Memory;; -246;Omnipotent Memory;Omnipotent Memory;; -247;Attack Memory (S);Attack Memory (S);; -248;Defense Memory (S);Defense Memory (S);; -249;Speed Memory (S);Speed Memory (S);; -250;Portable Potty;Portable Potty;; -251;Infinity Pilot;Infinity Pilot;; -252;3-Dimensional Fruit;3-Dimensional Fruit;; -253;6-Dimensional Fruit;6-Dimensional Fruit;; -254;12-Dimensional Fruit;12-Dimensional Fruit;; -255;24-Dimensional Fruit;24-Dimensional Fruit;; -256;Mega Meat;Mega Meat;; -257;Giga Meat;Giga Meat;; -258;Terra Meat;Terra Meat;; -259;Infinity Mushroom;Infinity Mushroom;; -260;Reinforced RE Floppy;Reinforced RE Floppy;; -261;Special Move Floppy;Special Move Floppy;; -262;Sedation Floppy;Sedation Floppy;; -263;Overdrive Memory;Overdrive Memory;; -264;Swiftness Memory;Swiftness Memory;; -265;Rigid Body Memory;Rigid Body Memory;; -266;Juicy Grass;Juicy Grass;; -272;Crimson Piece;Crimson Piece;; -273;Courage Piece;Courage Piece;; -274;Ultimate Piece;Ultimate Piece;; -275;Supreme Piece;Supreme Piece;; -277;Infinity Anchovy;Infinity Anchovy;; -278;Infinity Snapper;Infinity Snapper;; -279;Infinity Trout;Infinity Trout;; -280;Infinity Catfish;Infinity Catfish;; -281;Infinity Seabass;Infinity Seabass;; -282;Infinity Medaka;Infinity Medaka;; -283;Infinity Goldfish;Infinity Goldfish;; -284;Infinity Carp;Infinity Carp;; -285;Infinity Black Digitrout;Infinity Black Digitrout;; -286;Infinity Bitterling;Infinity Bitterling;; -287;Infinity Salmon;Infinity Salmon;; -288;Infinity Loach;Infinity Loach;; -289;Infinity Eel;Infinity Eel;; -290;Infinity Arowana;Infinity Arowana;; -291;Infinity Pirarucu;Infinity Pirarucu;; -292;Infinity Squid;Infinity Squid;; -293;Infinity Tuna;Infinity Tuna;; -294;Infinity Crab;Infinity Crab;; -295;Infinity Whale;Infinity Whale;; -296;Infinity Pygmy King Anchovy;Infinity Pygmy King Anchovy;; -297;Infinity Sovereign Lord Snapper;Infinity Sovereign Lord Snapper;; -298;Infinity Roe King Trout;Infinity Roe King Trout;; -299;Infinity Earth God Catfish;Infinity Earth God Catfish;; -300;Infinity Fish God Seabass;Infinity Fish God Seabass;; -301;Infinity Prince Medaka;Infinity Prince Medaka;; -302;Infinity Gold King Goldfish;Infinity Gold King Goldfish;; -303;Infinity Monarch Carp;Infinity Monarch Carp;; -304;Infinity Overlord Black Carp;Infinity Overlord Black Carp;; -305;Infinity Prodigious King Bitterling;Infinity Prodigious King Bitterling;; -306;Infinity Frost King Salmon;Infinity Frost King Salmon;; -307;Infinity Viking Loach;Infinity Viking Loach;; -308;Infinity Shrewd King Eel;Infinity Shrewd King Eel;; -309;Infinity Dragon King Arowana;Infinity Dragon King Arowana;; -310;Infinity Tyrant Pirarucu;Infinity Tyrant Pirarucu;; -311;Infinity Monarch Squid;Infinity Monarch Squid;; -312;Infinity Sea King Tuna;Infinity Sea King Tuna;; -313;Infinity Crab King;Infinity Crab King;; -314;Legendary Infinity Whale;Legendary Infinity Whale;; -315;Ogre's Bone Club;Ogre's Bone Club;; -316;Fox Shrine's Bell String;Fox Shrine's Bell String;; -317;V-Tamer Certificate;V-Tamer Certificate;; -318;Insect Assassin Certificate;Insect Assassin Certificate;; -319;Proto Metal;Proto Metal;; -320;Giant Scissors;Giant Scissors;; -321;Insectivore Fertilizer;Insectivore Fertilizer;; -322;Big Tree's Dead Branch;Big Tree's Dead Branch;; -323;Steel Helmet of the Centaur;Steel Helmet of the Centaur;; -324;Cursed Cloth;Cursed Cloth;; -325;Bomb Gloves;Bomb Gloves;; -326;Metal Armor;Metal Armor;; -327;Magic Amulet;Magic Amulet;; -328;Ancient Spirit of Two Souls;Ancient Spirit of Two Souls;; -329;Blade of the Wind Dragon;Blade of the Wind Dragon;; -330;Bloody Metal;Bloody Metal;; -331;Fierce Scissors;Fierce Scissors;; -332;Fatal Bone;Fatal Bone;; -333;Giant Forest Tree;Giant Forest Tree;; -334;Black Hand;Black Hand;; -335;Fairy Spear;Fairy Spear;; -336;Mystery Ray Gun;Mystery Ray Gun;; -337;Nightmare Egg;Nightmare Egg;; -338;Fire Chains of Destruction;Fire Chains of Destruction;; -339;High Speed Turbine;High Speed Turbine;; -340;Noble Mane;Noble Mane;; -341;Evil Plush;Evil Plush;; -342;Fake Royalty Certificate;Fake Royalty Certificate;; -343;Staff of the Shrine Priestess;Staff of the Shrine Priestess;; 344;Emperial Dragon's Old Cannon;Imperial Dragon's Old Cannon;; -345;Omega Blade;Omega Blade;; -346;Jet-Black Magic Circle;Jet-Black Magic Circle;; -347;Blue Swiftness Armour;Blue Swiftness Armour;; -348;Devil's Scissors;Devil's Scissors;; -349;Infinity Metal;Infinity Metal;; -350;CHO Alloy;CHO Alloy;; -351;Clown Mask;Clown Mask;; -352;Cursed Puppet;Cursed Puppet;; -353;Completed Parts;Completed Parts;; -354;Long Grey Beard of Greed;Long Grey Beard of Greed;; -355;Holy Mother's Javelin;Holy Mother's Javelin;; -356;Battle Axe of Sorrow;Battle Axe of Sorrow;; -357;Ancient Lions Fangs;Ancient Lions Fangs;; -358;Colourful Platina;Colourful Platina;; -359;Crimson Metal;Crimson Metal;; -360;Swiftness X-Antibody;Swiftness X-Antibody;; -361;Gluttony X-Antibody;Gluttony X-Antibody;; -362;Miracle X-Antibody;Miracle X-Antibody;; -364;X-Reduction Field;X-Reduction Field;; -365;Mutated Waste Data;Mutated Waste Data;; -366;Fierce Deity's Resentful Blade;Fierce Deity's Resentful Blade;; -367;Janbari Firewood;Janbari Firewood;; -368;Chip of Courage;Chip of Courage;; -369;Chip of Friendship;Chip of Friendship;; -370;Chip of Love;Chip of Love;; -371;Chip of Knowledge;Chip of Knowledge;; 372;Chip of Sincerity;Chip of Purity;; 373;Chip of Reliability;Chip of Sincerity;; -374;Chip of Hope;Chip of Hope;; -375;Chip of Light;Chip of Light;; -376;V Chip;V Chip;; -377;Blue Chip;Blue Chip;; -378;Bancho Chip;Bancho Chip;; -379;Handy Manual;Handy Manual;; -380;Miracle Piece;Miracle Piece;; -381;Swiftness Piece;Swiftness Piece;; -382;Gluttony Piece;Gluttony Piece;; -383;Jet-Black X-Antibody;Jet-Black X-Antibody;; -384;Semi-finished Parts;Semi-finished Parts;; -385;Burst Code;Burst Code;; -386;Shield Code;Shield Code;; -387;Acceler Code;Acceler Code;; -388;Brain Code;Brain Code;; -389;Technical Code;Technical Code;; -390;Serpentine's Scale;Serpentine's Scale;; -391;Larva Decoder;Larva Decoder;; -392;Blank DigiCore;Blank DigiCore;; -393;Will of Destruction;Will of Destruction;; -394;Will of the Guardian;Will of the Guardian;; -395;Will of Swiftness;Will of Swiftness;; -396;Will of Wisdom;Will of Wisdom;; -397;Will of the Skilled;Will of the Skilled;; -398;DUMMY 1;DUMMY 1;; -399;DUMMY 2;DUMMY 2;; -400;Famitsu Booster;Famitsu Booster;; -401;Famitsu USB Stick;Famitsu USB Stick;; -402;Famitsu Prime Steak;Famitsu Prime Steak;; -403;Famitsu Prime Fish;Famitsu Prime Fish;; -404;Satisfying Meat;Satisfying Meat;; -405;High Motivation Meat;High Motivation Meat;; -406;Bargain Disc;Bargain Disc;; -407;Triple Disc;Triple Disc;; -408;Counterattack Disc;Counterattack Disc;; -409;Smiling Drink;Smiling Drink;; -410;Training Drink;Training Drink;; -411;Diet Mushroom;Diet Mushroom;; -412;Elder Mushroom;Elder Mushroom;; -413;Ultra Aid;Ultra Aid;; -414;Alrau Mandrake;Alrau Mandrake;; -415;Platinum Acorn;Platinum Acorn;; -416;Super Dengeki Lemon;Super Dengeki Lemon;; -417;Chain Marron;Chain Marron;; -418;Shield and Sword Plugin;Shield and Sword Plugin;; -419;MAX Plugin;MAX Plugin;; -420;Dengeki Digicatfish;Dengeki Digicatfish;; -421;White Sea God Digiwhale;White Sea God Digiwhale;; -422;Tenacity Chip;Tenacity Chip;; -423;Full Power Chip;Full Power Chip;; \ No newline at end of file diff --git a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/KeyItemNames.csv b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/KeyItemNames.csv index 4cebc2e..29559ca 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/KeyItemNames.csv +++ b/src/main/resources/net/digimonworld/decode/randomizer/renamingPresets/KeyItemNames.csv @@ -1,128 +1,4 @@ index;original;replace;excludeTerms;excludePaths -0;Digivice;Digivice;; -1;Mysterious HD-Data;Mysterious HD-Data;; -2;Garbage Data 00;Garbage Data 00;; -3;Garbage Data 01;Garbage Data 01;; -4;Garbage Data 02;Garbage Data 02;; -5;Garbage Data 03;Garbage Data 03;; -6;Garbage Data 04;Garbage Data 04;; -7;Garbage Data 05;Garbage Data 05;; -8;Garbage Data 06;Garbage Data 06;; -9;Garbage Data 07;Garbage Data 07;; -10;Garbage Data 08;Garbage Data 08;; -11;Garbage Data 09;Garbage Data 09;; -12;Garbage Data 10;Garbage Data 10;; -13;Garbage Data 11;Garbage Data 11;; -14;Garbage Data 12;Garbage Data 12;; -15;Ordinary Rod;Ordinary Rod;; -16;Amazing Rod;Amazing Rod;; -17;Worn Rod;Worn Rod;; -18;Buoyancy Program;Buoyancy Program;; -19;Sea Anemone;Sea Anemone;; -20;Night Flower Bud;Night Flower Bud;; -21;Luminescent Flower;Luminescent Flower;; -22;Shiny Pipe;Shiny Pipe;; -23;Frozen Flower;Frozen Flower;; -24;Red Propellant;Red Propellant;; -25;A Letter for Bancho;A Letter for Bancho;; -26;Storage Card α;Storage Card α;; -27;Storage Card β;Storage Card β;; -28;Storage Card γ;Storage Card γ;; -29;Storage Card Ω;Storage Card Ω;; -30;Storage Card Σ;Storage Card Σ;; -31;Dummy Garbage 01;Dummy Garbage 01;; -32;Dummy Garbage 02;Dummy Garbage 02;; -33;Dummy Garbage 03;Dummy Garbage 03;; -34;Gospel Structure;Gospel Structure;; -35;Blaze Program;Blaze Program;; -36;Stomach Medicine;Stomach Medicine;; -37;Headache Medicine;Headache Medicine;; -38;Cold Medicine;Cold Medicine;; -39;Anchor Data;Anchor Data;; -40;Rewrite Program;Rewrite Program;; -41;X-Reduction Field;X-Reduction Field;; -42;Dimensional Key Chain;Dimensional Key Chain;; -43;Dimensional Key Chain II;Dimensional Key Chain II;; -44;Incredibly Dirty Item;Incredibly Dirty Item;; -45;Snowball;Snowball;; -46;Kuwaga Autograph;Kuwaga Autograph;; -47;Glowing Spores;Glowing Spores;; -48;Giant Shell;Giant Shell;; -49;Janbari Firewood;Janbari Firewood;; -50;Digi Redwood;Digi Redwood;; -51;Digi Larch;Digi Larch;; -52;Digi Gum Tree;Digi Gum Tree;; -53;Ring Corner;Ring Corner;; -54;Ring Mat;Ring Mat;; -55;Ring Rope;Ring Rope;; -56;Building Blueprints;Building Blueprints;; -57;Crest of Courage;Crest of Courage;; -58;Crest of Friendship;Crest of Friendship;; -59;Crest of Love;Crest of Love;; -60;Crest of Knowledge;Crest of Knowledge;; 61;Crest of Reliability;Crest of Sincerity;; 62;Crest of Sincerity;Crest of Purity;; -63;Crest of Hope;Crest of Hope;; -64;Crest of Light;Crest of Light;; -65;Golden Digi-Egg;Golden Digimental;; -66;Bancho's Fighting Spirit;Bancho's Fighting Spirit;; -67;Training Bomb;Training Bomb;; -68;Trash Bag;Trash Bag;; -69;Evil Heart Fragment;Evil Heart Fragment;; -70;Evil Heart Fragment;Evil Heart Fragment;; -71;Evil Heart Fragment;Evil Heart Fragment;; -72;Evil Heart Fragment;Evil Heart Fragment;; -73;Vision Program;Vision Program;; -74;Light Fragment;Light Fragment;; -75;Ultimate Herbal Medicine;Ultimate Herbal Medicine;; -76;Red Potion Recipe;Red Potion Recipe;; -77;Red Potion Recipe;Red Potion Recipe;; -78;Red Potion Recipe;Red Potion Recipe;; -79;Red Potion Recipe;Red Potion Recipe;; -80;Red Potion Recipe;Red Potion Recipe;; -81;Blue Potion Recipe;Blue Potion Recipe;; -82;Blue Potion Recipe;Blue Potion Recipe;; -83;Blue Potion Recipe;Blue Potion Recipe;; -84;Blue Potion Recipe;Blue Potion Recipe;; -85;Blue Potion Recipe;Blue Potion Recipe;; -86;Green Potion Recipe;Green Potion Recipe;; -87;Green Potion Recipe;Green Potion Recipe;; -88;Green Potion Recipe;Green Potion Recipe;; -89;Green Potion Recipe;Green Potion Recipe;; -90;Green Potion Recipe;Green Potion Recipe;; -91;Pink Potion Recipe;Pink Potion Recipe;; -92;Pink Potion Recipe;Pink Potion Recipe;; -93;Pink Potion Recipe;Pink Potion Recipe;; -94;Pink Potion Recipe;Pink Potion Recipe;; -95;Pink Potion Recipe;Pink Potion Recipe;; -96;Ultimate Herbal Recipe;Ultimate Herbal Recipe;; -97;Ultimate Herbal Recipe;Ultimate Herbal Recipe;; -98;Ultimate Herbal Recipe;Ultimate Herbal Recipe;; -99;Ultimate Herbal Recipe;Ultimate Herbal Recipe;; -100;Ultimate Herbal Recipe;Ultimate Herbal Recipe;; -101;High-High Recipe;High-High Recipe;; -102;Spicy Flight Recipe;Spicy Flight Recipe;; -103;Super Beauty Recipe;Super Beauty Recipe;; -104;Binary Elixir Recipe;Binary Elixir Recipe;; -105;Cosy Lifestyle Guide;Cosy Lifestyle Guide;; -106;Vadertron Battery;Vadertron Battery;; -107;Luminous OOPArt;Luminous OOPArt;; -108;High-High Potion;High-High Potion;; -109;Spicy Flight Potion;Spicy Flight Potion;; -110;Super Beauty Smoothie;Super Beauty Smoothie;; -111;Binary Elixir;Binary Elixir;; -112;Astro Banana;Astro Banana;; -113;Smiling Orange;Smiling Orange;; -114;Chestnut Burr;Chestnut Burr;; -115;Larva Decoder;Larva Decoder;; -116;Bolt Unlocker;Bolt Unlocker;; -117;Storage Card α;Storage Card α;; -118;Storage Card Ω;Storage Card Ω;; -119;Storage Card D;Storage Card D;; -120;Storage Card ∞;Storage Card ∞;; -121;Storage Card R;Storage Card R;; -122;Storage Card N;Storage Card N;; -123;Storage Card A;Storage Card A;; -124;Storage Card Y;Storage Card Y;; -125;Storage Card M1;Storage Card M1;; -126;Storage Card M2;Storage Card M2;; \ No newline at end of file +65;Golden Digi-Egg;Golden Digimental;; \ No newline at end of file From 5aafbedaf41089a02379ee7e36759d4f94fa41d3 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Sat, 18 May 2024 16:03:05 +0200 Subject: [PATCH 41/54] Condition check for manual CSV mode --- .../decode/randomizer/settings/NamingSettings.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index d8612ab..90844f0 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -50,6 +50,7 @@ import javafx.scene.control.Button; import javafx.scene.control.TitledPane; import javafx.scene.control.Accordion; +import javafx.scene.control.Alert.AlertType; import javafx.scene.layout.VBox; import net.digimonworld.decode.randomizer.RandomizationContext; @@ -584,6 +585,14 @@ public TitledPane create(GlobalKeepData data, LanguageKeep language) { BooleanBinding manLink = new When(renameEnabled).then(manualCsv).otherwise(renameEnabled.not()); + manualCsv.addListener(b -> { + if (manualCsv.get() == true && !(csvDir.exists() && csvDir.isDirectory() && csvDir.listFiles().length != 0)) { + JavaFXUtils.showAndWaitAlert(AlertType.ERROR, "No custom CSVs found", null, "No custom data found.\nCustom CSV mode requires a 'renamingPresets' directory\n containing CSV renaming lists."); + manualCsv.set(false); + manCs.fire(); + } + }); + manCs.disableProperty().bind(renameEnabled.not()); repAll.disableProperty().bind(renameEnabled.not()); orgeCheck.disableProperty().bind(manLink); @@ -616,8 +625,10 @@ public TitledPane create(GlobalKeepData data, LanguageKeep language) { + ";;"; writer.write(string); } catch (IOException e) { + e.printStackTrace(); } }); + manualCsv.set(true); }; Button camelExp = new Button("Export CSVs for restoration preset"); From 8a8e6e09bb8921749420cafe477fc15d2c8f037c Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Sun, 19 May 2024 11:28:02 +0200 Subject: [PATCH 42/54] Compatibility with .jar --- .../randomizer/settings/NamingSettings.java | 126 ++++++++++++------ .../settings/builtinRenamingPreset.csv | 15 +++ 2 files changed, 102 insertions(+), 39 deletions(-) create mode 100644 src/main/resources/net/digimonworld/decode/randomizer/settings/builtinRenamingPreset.csv diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index 90844f0..df9b530 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -1,5 +1,6 @@ package net.digimonworld.decode.randomizer.settings; +import java.io.BufferedReader; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -14,6 +15,7 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; +import java.io.InputStreamReader; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.URL; @@ -719,6 +721,15 @@ public Tuple resolve(String path) throws ParseException { } } + /** + * Replacing the contents of a BTX file based on a CSV that contains direct + * mappings to the BTX entry IDs + */ + private void targetedBtxReplacement(BTXPayload btx, List f, String fileName, String path) { + System.out.println(fileName + " -> " + path); + parseReplacements(f, path, false).forEach(r -> r.replaceExact(btx, path)); + } + /** * Replacing the contents of a BTX file based on a CSV that contains direct * mappings to the BTX entry IDs @@ -728,30 +739,39 @@ private void targetedBtxReplacement(BTXPayload btx, File f, String path) { parseReplacements(f, path, false).forEach(r -> r.replaceExact(btx, path)); } - private ArrayList parseReplacements(File f, String path, boolean addAll) { + private ArrayList instantiateReplacements(List lines, String path, boolean addAll) { ArrayList rList = new ArrayList<>(); + for (int i = 0; i < lines.size(); i++) { + if (i == 0) { + continue; + } + String[] entries = lines.get(i).split(";", -1); + // Even if we don't replace a term, if it's a multipart Digimon name it will be changed if the camelCase option is not set. + if (entries[1].equals(entries[2]) && (camelCase.get() || classifyTerm(entries[2], path) != TermType.DIGIMONMULTI)) { + continue; + } + Replacement rep = new Replacement(entries[0], entries[1], entries[2], entries[3], entries[4], path); + rList.add(rep); + //By adding only the first replacement of a word to the global replacement list, we only need to define the global rules once. + if (replaceAll.get() && rep.global && (addAll || !repMap.containsKey(rep.original))) { + repMap.put(rep.original, rep); + } + } + return rList; + } + + private ArrayList parseReplacements(List f, String path, boolean addAll) { + return instantiateReplacements(f, path, addAll); + } + + private ArrayList parseReplacements(File f, String path, boolean addAll) { try { List lines = Files.readAllLines(f.toPath(), StandardCharsets.UTF_8); - for (int i = 0; i < lines.size(); i++) { - if (i == 0) { - continue; - } - String[] entries = lines.get(i).split(";", -1); - // Even if we don't replace a term, if it's a multipart Digimon name it will be changed if the camelCase option is not set. - if (entries[1].equals(entries[2]) && (camelCase.get() || classifyTerm(entries[2], path) != TermType.DIGIMONMULTI)) { - continue; - } - Replacement rep = new Replacement(entries[0], entries[1], entries[2], entries[3], entries[4], path); - rList.add(rep); - //By adding only the first replacement of a word to the global replacement list, we only need to define the global rules once. - if (replaceAll.get() && rep.global && (addAll || !repMap.containsKey(rep.original))) { - repMap.put(rep.original, rep); - } - } + return instantiateReplacements(lines, path, addAll); } catch (IOException e) { e.printStackTrace(); + return new ArrayList<>(); } - return rList; } @Override @@ -764,29 +784,57 @@ public void randomize(RandomizationContext context) { PathResolver res = new PathResolver(context); if (mode.equals("restore")) { // Main logic for dub -> sub conversion - File manualCsvDir = new File(".\\renamingPresets\\"); - File origin; - if (manualCsv.get() && manualCsvDir.exists()) { - origin = manualCsvDir; - } else { - origin = new File(DecodeRandomizer.class.getResource("renamingPresets/").getFile()); - } - List.of(origin.listFiles()).stream().sorted(Comparator.comparing(f -> priorities.indexOf(f.getName()))).sorted(Comparator.comparing(f -> priorities.contains(f.getName()) ? -1 : 1)).forEach(p -> { - String pName = p.getName(); - if (pName.equals("_general.csv") || pName.equals("_general_digimon.csv")) { - if (replaceAll.get()) { - System.out.println("Parsing general " + (pName.contains("digimon") ? "Digimon " : "") + "replacements"); - parseReplacements(p, pName, true); + try { + File manualCsvDir = new File(".\\renamingPresets\\"); + if (manualCsv.get() && manualCsvDir.exists()) { + List csvs = List.of(manualCsvDir.listFiles()); + csvs.stream().sorted(Comparator.comparing(f -> priorities.indexOf(f.getName()))).sorted(Comparator.comparing(f -> priorities.contains(f.getName()) ? -1 : 1)).forEach(p -> { + String pName = p.getName(); + if (pName.equals("_general.csv") || pName.equals("_general_digimon.csv")) { + if (replaceAll.get()) { + System.out.println("Parsing general " + (pName.contains("digimon") ? "Digimon " : "") + "replacements"); + parseReplacements(p, pName, true); + } + return; + } + try { + Tuple foundBtx = res.resolve(pName.substring(0, pName.length() - 4)); + targetedBtxReplacement(foundBtx.getValue(), p, foundBtx.getKey()); + } catch (ParseException e) { + e.printStackTrace(); + } + }); + } else { + BufferedReader reader = new BufferedReader(new InputStreamReader(DecodeRandomizer.class.getResourceAsStream("settings/builtinRenamingPreset.csv"))); + String pName; + while ((pName = reader.readLine()) != null) { + + BufferedReader reader2 = new BufferedReader(new InputStreamReader(DecodeRandomizer.class.getResourceAsStream(pName))); + String str2; + ArrayList foundReps = new ArrayList<>(); + while ((str2 = reader2.readLine()) != null) { + foundReps.add(str2); + } + if (pName.endsWith("_general.csv") || pName.endsWith("_general_digimon.csv")) { + if (replaceAll.get()) { + System.out.println("Parsing general " + (pName.contains("digimon") ? "Digimon " : "") + "replacements"); + parseReplacements(foundReps, pName, true); + } + continue; + } + try { + Tuple foundBtx = res.resolve(pName.substring(16, pName.length() - 4)); + targetedBtxReplacement(foundBtx.getValue(), foundReps, pName, foundBtx.getKey()); + } catch (ParseException e) { + e.printStackTrace(); + } } - return; - } - try { - Tuple foundBtx = res.resolve(pName.substring(0, pName.length() - 4)); - targetedBtxReplacement(foundBtx.getValue(), p, foundBtx.getKey()); - } catch (ParseException e) { - e.printStackTrace(); + } - }); + + } catch (IOException exc) { + exc.printStackTrace(); + } if (!replaceAll.get()) { return; diff --git a/src/main/resources/net/digimonworld/decode/randomizer/settings/builtinRenamingPreset.csv b/src/main/resources/net/digimonworld/decode/randomizer/settings/builtinRenamingPreset.csv new file mode 100644 index 0000000..705d1f8 --- /dev/null +++ b/src/main/resources/net/digimonworld/decode/randomizer/settings/builtinRenamingPreset.csv @@ -0,0 +1,15 @@ +renamingPresets/_general.csv +renamingPresets/_general_digimon.csv +renamingPresets/DigimonNames.csv +renamingPresets/CardNames1.csv +renamingPresets/FinisherNames.csv +renamingPresets/AccessoryNames.csv +renamingPresets/CardNames2.csv +renamingPresets/CardSetNames.csv +renamingPresets/CharacterNames.csv +renamingPresets/GlossaryNames.csv +renamingPresets/ItemNames.csv +renamingPresets/keep-15.csv +renamingPresets/keep-39.csv +renamingPresets/KeyItemNames.csv +renamingPresets/MedalNames.csv \ No newline at end of file From 09a8b200e328e122fa30e62d421e75e971bab7ee Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Sun, 19 May 2024 11:49:44 +0200 Subject: [PATCH 43/54] buildHandler tweak --- .../randomizer/settings/NamingSettings.java | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index df9b530..cf88aea 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -18,7 +18,6 @@ import java.io.InputStreamReader; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.net.URL; import java.nio.charset.StandardCharsets; import java.text.ParseException; import java.util.NoSuchElementException; @@ -537,22 +536,19 @@ private static void clearExportDir(File dir) { dir.mkdir(); } - private static EventHandler buildHandler(String resourcePath, File targetDir) { + private static EventHandler buildHandler(File targetDir) { return (ActionEvent e) -> { e.consume(); clearExportDir(targetDir); - URL origin = DecodeRandomizer.class.getResource(resourcePath); - if (origin == null) { - return; - } - List fls = Utils.listFiles(new File(origin.getFile())); - fls.forEach(f -> { - try { - Files.copy(f.toPath(), Path.of(targetDir.toString() + "\\" + f.getName()), StandardCopyOption.REPLACE_EXISTING); - } catch (IOException exc) { - exc.printStackTrace(); + try { + BufferedReader reader = new BufferedReader(new InputStreamReader(DecodeRandomizer.class.getResourceAsStream("settings/builtinRenamingPreset.csv"))); + String pName; + while ((pName = reader.readLine()) != null) { + Files.copy(DecodeRandomizer.class.getResourceAsStream(pName), Path.of(pName), StandardCopyOption.REPLACE_EXISTING); } - }); + } catch (IOException exc) { + exc.printStackTrace(); + } }; } @@ -636,7 +632,7 @@ public TitledPane create(GlobalKeepData data, LanguageKeep language) { Button camelExp = new Button("Export CSVs for restoration preset"); Button curExp = new Button("Export CSVs for current names"); curExp.setOnAction(rawExportHandler); - camelExp.setOnAction(buildHandler("renamingPresets\\", csvDir)); + camelExp.setOnAction(buildHandler(csvDir)); restoreBox.getChildren().addAll( JavaFXUtils.buildToggleSwitch("Enabled", Optional.empty(), Optional.of(renameEnabled)), From ce573c5de24afb9de751abe97b020ada759ca584 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Tue, 21 May 2024 11:22:06 +0200 Subject: [PATCH 44/54] Performance fix --- .../randomizer/settings/NamingSettings.java | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index cf88aea..e2e08ee 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -498,13 +498,13 @@ private Tuple adjustForNewlines(String text) { } - private Tuple findInText(String text, String path) { + public Tuple findInText(String text, String path) { int idx = text.indexOf(original); if (idx == -1 && original.contains(" ") && text.contains("\n")) { return adjustForNewlines(text); } //If any of the exclusion - return new Tuple((idx == -1 || termExclusion(text, idx) || pathExclusion(path, idx) || isOverlapping(path, idx)) ? -1 : idx, replacement); + return new Tuple((idx == -1 || termExclusion(text, idx) || (path != null && (pathExclusion(path, idx) || isOverlapping(path, idx)))) ? -1 : idx, replacement); } } @@ -849,7 +849,23 @@ public void randomize(RandomizationContext context) { try { Path longPath = fA.toPath(); Path normalPath = longPath.subpath(2, longPath.getNameCount()); + boolean applies; + try (BufferedReader reader = new BufferedReader(new InputStreamReader(Files.newInputStream(longPath), StandardCharsets.UTF_16LE))) { + String str; + applies = false; + while ((str = reader.readLine()) != null) { + String strx = str; + if (sortedReps.stream().anyMatch(r -> r.findInText(strx, null).getKey() != -1)) { + applies = true; + break; + } + } + } + if (!applies) { + System.out.println("Skipping " + fA.toPath()); + return; + } var elements = res.resolveRaw(normalPath.toString()).getElementsWithType(Payload.BTX); for (int i = 0; i < elements.size(); i++) { From 0f17804aeedad53bd2b5569b6cbc336db1e2d835 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Tue, 5 Nov 2024 20:56:41 +0100 Subject: [PATCH 45/54] safer types --- .../randomizer/settings/NamingSettings.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index e2e08ee..54b32c0 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -134,8 +134,8 @@ private final class Replacement { public String original; public String replacement; private final List excludedTerms; - private final ArrayList disabledPaths = new ArrayList(); - private final ArrayList enabledPaths = new ArrayList(); + private final ArrayList disabledPaths = new ArrayList(); + private final ArrayList enabledPaths = new ArrayList(); private final int matchLength; private int index = -1; /** @@ -457,15 +457,15 @@ private boolean pathExclusion(String path, int index) { private Tuple adjustForNewlines(String text) { Matcher spaceMatch = Pattern.compile(original.replaceAll(" ", "(\\\\s)")).matcher(text); if (!spaceMatch.find()) { - return new Tuple(-1, replacement); + return new Tuple(-1, replacement); } else { int first = spaceMatch.start(); if (!replacement.contains(" ")) { - return new Tuple(first, replacement + "\n"); + return new Tuple(first, replacement + "\n"); } String[] repSplit = replacement.split(" "); if (repSplit.length == 2) { - return new Tuple(first, repSplit[0] + "\n" + repSplit[1]); + return new Tuple(first, repSplit[0] + "\n" + repSplit[1]); } int spaceLoc = 0; int spaceDex = 0; @@ -484,16 +484,16 @@ private Tuple adjustForNewlines(String text) { } } if (spaceDex >= replacement.length()) { - return new Tuple(first, replacement + "\n"); + return new Tuple(first, replacement + "\n"); } int firstBefore = replacement.substring(0, spaceDex).lastIndexOf(" "); int firstAfter = replacement.substring(spaceDex).indexOf(" "); if (firstAfter == -1 && firstBefore == -1) { - return new Tuple(first, replacement + "\n"); + return new Tuple(first, replacement + "\n"); } int finalSpace = firstAfter == -1 ? firstBefore : firstBefore == -1 ? firstAfter : Math.min(firstAfter, firstBefore) == firstBefore ? firstBefore : firstAfter; - return new Tuple(first, replacement.substring(0, finalSpace) + "\n" + replacement.substring(finalSpace + 1)); + return new Tuple(first, replacement.substring(0, finalSpace) + "\n" + replacement.substring(finalSpace + 1)); } } @@ -503,8 +503,8 @@ public Tuple findInText(String text, String path) { if (idx == -1 && original.contains(" ") && text.contains("\n")) { return adjustForNewlines(text); } - //If any of the exclusion - return new Tuple((idx == -1 || termExclusion(text, idx) || (path != null && (pathExclusion(path, idx) || isOverlapping(path, idx)))) ? -1 : idx, replacement); + //If any of the exclusions match, we return -1 + return new Tuple((idx == -1 || termExclusion(text, idx) || (path != null && (pathExclusion(path, idx) || isOverlapping(path, idx)))) ? -1 : idx, replacement); } } @@ -840,7 +840,7 @@ public void randomize(RandomizationContext context) { //Sorting our replacements by length to avoid lobger replacements getting overriding by prior partial matches. List sortedReps = repMap.values().stream().sorted(Comparator.comparing(v -> v.original.length() * -1)).collect(Collectors.toList()); - ArrayList> fileEntries = new ArrayList(); + ArrayList> fileEntries = new ArrayList>(); Utils.listFiles(startDir).stream() //Everything that could contain BTX .filter(s -> s.getName().endsWith("_jp.res") @@ -871,7 +871,7 @@ public void randomize(RandomizationContext context) { for (int i = 0; i < elements.size(); i++) { var payload = (BTXPayload) elements.get(i); String partialPath = normalPath.toString() + "\\" + (i); - payload.getEntries().forEach(bt -> fileEntries.add(new Tuple(partialPath + ":" + bt.getKey(), bt.getValue()))); + payload.getEntries().forEach(bt -> fileEntries.add(new Tuple(partialPath + ":" + bt.getKey(), bt.getValue()))); } } catch (IOException e) { e.printStackTrace(); From 3265e8056a5cbd3d84d40c5719658444dcc15290 Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Tue, 28 Oct 2025 13:49:25 +0100 Subject: [PATCH 46/54] Hard fork. --- .github/FUNDING.yml | 14 - .../randomizer/MainWindowController.java | 48 +- .../randomizer/settings/DigimonSettings.java | 294 ----- .../settings/EvolutionSettings.java | 449 ------- .../randomizer/settings/NamingSettings.java | 249 ++-- .../randomizer/settings/PatchSettings.java | 1107 ----------------- .../randomizer/settings/PlayerSettings.java | 151 --- .../settings/RandomizerSettings.java | 37 +- .../randomizer/settings/SkillsSettings.java | 293 ----- .../randomizer/settings/StarterSettings.java | 145 --- .../randomizer/settings/WorldSettings.java | 372 ------ .../randomizer/utils/RandomizerUtils.java | 86 -- .../decode/randomizer/AboutScene.fxml | 6 +- .../decode/randomizer/MainWindow.fxml | 32 +- .../randomizer/settings/BlackAgumon.png | Bin 1395 -> 0 bytes .../randomizer/settings/BlackGabumon.png | Bin 1382 -> 0 bytes .../randomizer/settings/BlackGarurumon.png | Bin 1422 -> 0 bytes .../settings/BlackMetalGarurumon.png | Bin 1411 -> 0 bytes .../randomizer/settings/BlackWarGreymon.png | Bin 1485 -> 0 bytes .../settings/BlackWereGarurumon.png | Bin 1479 -> 0 bytes .../settings/builtinRenamingPreset.csv | 15 - .../randomizer/settings/itemSpawnMapping.csv | 50 - 22 files changed, 97 insertions(+), 3251 deletions(-) delete mode 100644 .github/FUNDING.yml delete mode 100644 src/main/java/net/digimonworld/decode/randomizer/settings/DigimonSettings.java delete mode 100644 src/main/java/net/digimonworld/decode/randomizer/settings/EvolutionSettings.java delete mode 100644 src/main/java/net/digimonworld/decode/randomizer/settings/PatchSettings.java delete mode 100644 src/main/java/net/digimonworld/decode/randomizer/settings/PlayerSettings.java delete mode 100644 src/main/java/net/digimonworld/decode/randomizer/settings/SkillsSettings.java delete mode 100644 src/main/java/net/digimonworld/decode/randomizer/settings/StarterSettings.java delete mode 100644 src/main/java/net/digimonworld/decode/randomizer/settings/WorldSettings.java delete mode 100644 src/main/java/net/digimonworld/decode/randomizer/utils/RandomizerUtils.java delete mode 100644 src/main/resources/net/digimonworld/decode/randomizer/settings/BlackAgumon.png delete mode 100644 src/main/resources/net/digimonworld/decode/randomizer/settings/BlackGabumon.png delete mode 100644 src/main/resources/net/digimonworld/decode/randomizer/settings/BlackGarurumon.png delete mode 100644 src/main/resources/net/digimonworld/decode/randomizer/settings/BlackMetalGarurumon.png delete mode 100644 src/main/resources/net/digimonworld/decode/randomizer/settings/BlackWarGreymon.png delete mode 100644 src/main/resources/net/digimonworld/decode/randomizer/settings/BlackWereGarurumon.png delete mode 100644 src/main/resources/net/digimonworld/decode/randomizer/settings/builtinRenamingPreset.csv delete mode 100644 src/main/resources/net/digimonworld/decode/randomizer/settings/itemSpawnMapping.csv diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index e193c8f..0000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1,14 +0,0 @@ -# These are supported funding model platforms - -custom: ["paypal.me/sydmontague"] # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] -patreon: SydMontague - -# github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] -# patreon: # Replace with a single Patreon username -# open_collective: # Replace with a single Open Collective username -# ko_fi: # Replace with a single Ko-fi username -# tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel -# community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -# liberapay: # Replace with a single Liberapay username -# issuehunt: # Replace with a single IssueHunt username -# otechie: # Replace with a single Otechie username \ No newline at end of file diff --git a/src/main/java/net/digimonworld/decode/randomizer/MainWindowController.java b/src/main/java/net/digimonworld/decode/randomizer/MainWindowController.java index 3d43815..01e390a 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/MainWindowController.java +++ b/src/main/java/net/digimonworld/decode/randomizer/MainWindowController.java @@ -1,24 +1,18 @@ package net.digimonworld.decode.randomizer; -import java.io.BufferedWriter; import java.io.File; import java.io.IOException; -import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.nio.file.StandardOpenOption; -import java.util.HashMap; + import java.util.List; -import java.util.Map; import java.util.Random; import java.util.concurrent.CompletableFuture; import java.util.function.Supplier; import org.controlsfx.control.ToggleSwitch; -import com.amihaiemil.eoyaml.Yaml; -import com.amihaiemil.eoyaml.YamlMapping; import javafx.application.Platform; import javafx.event.ActionEvent; @@ -221,47 +215,7 @@ private long parseSeed(String input) { return Utils.parseLongOrDefault(input, input.isBlank() ? new Random().nextLong() : input.hashCode()); } - @FXML - public void onSaveSettings() throws IOException { - FileChooser chooser = new FileChooser(); - chooser.setTitle("Where to save the settings?"); - chooser.setInitialDirectory(new File(".")); - chooser.getExtensionFilters().add(new ExtensionFilter("YAML", "*.yml")); - - File selected = chooser.showSaveDialog(root.getWindow()); - - if (selected == null) - return; - - Map configMap = new HashMap<>(); - - configMap.put("seed", seedField.getText()); - configMap.put("settings", settings.serialize()); - configMap.put("raceLogging", raceLogging.isSelected()); - - try (BufferedWriter writer = Files.newBufferedWriter(selected.toPath(), StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)) { - Yaml.createYamlPrinter(writer).print(Yaml.createYamlDump(configMap).dump()); - } - } - @FXML - public void onLoadSettings() throws IOException { - FileChooser chooser = new FileChooser(); - chooser.setTitle("Select the settings to load"); - chooser.setInitialDirectory(new File(".")); - chooser.getExtensionFilters().add(new ExtensionFilter("YAML", "*.yml")); - File selected = chooser.showOpenDialog(root.getWindow()); - - if (selected == null) - return; - - try (InputStream is = Files.newInputStream(selected.toPath(), StandardOpenOption.READ)) { - YamlMapping mapping = Yaml.createYamlInput(is).readYamlMapping(); - seedField.setText(mapping.string("seed")); - raceLogging.setSelected(Boolean.parseBoolean(mapping.string("raceLogging"))); - settings.load(mapping.yamlMapping("settings")); - } - } private void updatedRomStatus() { boolean exists = Files.exists(WORKING_PATH); diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/DigimonSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/DigimonSettings.java deleted file mode 100644 index 3646c4e..0000000 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/DigimonSettings.java +++ /dev/null @@ -1,294 +0,0 @@ -package net.digimonworld.decode.randomizer.settings; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.ListIterator; -import java.util.Map; -import java.util.Optional; -import java.util.Random; - -import com.amihaiemil.eoyaml.YamlMapping; - -import javafx.beans.property.BooleanProperty; -import javafx.beans.property.SimpleBooleanProperty; -import javafx.geometry.Pos; -import javafx.scene.control.TitledPane; -import javafx.scene.layout.VBox; -import net.digimonworld.decode.randomizer.RandoLogger.LogLevel; -import net.digimonworld.decode.randomizer.RandomizationContext; -import net.digimonworld.decode.randomizer.utils.JavaFXUtils; -import net.digimonworld.decodetools.data.keepdata.Digimon; -import net.digimonworld.decodetools.data.keepdata.DigimonRaising; -import net.digimonworld.decodetools.data.keepdata.GlobalKeepData; -import net.digimonworld.decodetools.data.keepdata.Item; -import net.digimonworld.decodetools.data.keepdata.Item.ItemType; -import net.digimonworld.decodetools.data.keepdata.LanguageKeep; -import net.digimonworld.decodetools.data.keepdata.enums.Attribute; -import net.digimonworld.decodetools.data.keepdata.enums.Level; - -public class DigimonSettings implements Setting { - private static final Attribute[] ATTRIBUTE_LIST = new Attribute[] { Attribute.DATA, Attribute.VACCINE, Attribute.VIRUS }; - - BooleanProperty randomizeAttribute = new SimpleBooleanProperty(); - BooleanProperty randomizeCombatSpeed = new SimpleBooleanProperty(); - BooleanProperty randomizeSleepSchedule = new SimpleBooleanProperty(); - BooleanProperty randomizeFavoriteFood = new SimpleBooleanProperty(); - BooleanProperty randomizeTrainingType = new SimpleBooleanProperty(); - BooleanProperty randomizeBaseWeight = new SimpleBooleanProperty(); - BooleanProperty randomizeScale = new SimpleBooleanProperty(); - - @Override - public TitledPane create(GlobalKeepData data, LanguageKeep language) { - VBox vbox = new VBox(4); - TitledPane pane = new TitledPane("Digimon", vbox); - vbox.setAlignment(Pos.TOP_RIGHT); - pane.setCollapsible(false); - - vbox.getChildren().addAll(JavaFXUtils.buildToggleSwitch("Attribute", Optional.empty(), Optional.of(randomizeAttribute)), - JavaFXUtils.buildToggleSwitch("Combat Speed", Optional.empty(), Optional.of(randomizeCombatSpeed)), - JavaFXUtils.buildToggleSwitch("Sleep Schedule", Optional.empty(), Optional.of(randomizeSleepSchedule)), - JavaFXUtils.buildToggleSwitch("Favorite Food", Optional.empty(), Optional.of(randomizeFavoriteFood)), - JavaFXUtils.buildToggleSwitch("Training Type", Optional.empty(), Optional.of(randomizeTrainingType)), - JavaFXUtils.buildToggleSwitch("Base Weight", Optional.empty(), Optional.of(randomizeBaseWeight)), - JavaFXUtils.buildToggleSwitch("Scale", - Optional.of("Randomize the size of Digimon between 0.5 and 2.0 their vanilla size."), - Optional.of(randomizeScale))); - - return pane; - } - - @Override - public void randomize(RandomizationContext context) { - if (randomizeAttribute.get()) - randomizeAttributes(context); - if (randomizeCombatSpeed.get()) - randomizeCombatSpeed(context); - if (randomizeSleepSchedule.get()) - randomizeSleepSchedule(context); - if (randomizeFavoriteFood.get()) - randomizeFavoriteFood(context); - if (randomizeTrainingType.get()) - randomizeTrainingType(context); - if (randomizeBaseWeight.get()) - randomizeBaseWeight(context); - if (randomizeScale.get()) - randomizeScale(context); - } - - private void randomizeScale(RandomizationContext context) { - Random rand = new Random(context.getInitialSeed() * "Scale".hashCode()); - - context.logLine(LogLevel.ALWAYS, "Randomizing Digimon Scale..."); - - for (ListIterator itr = context.getGlobalKeepData().getDigimonData().listIterator(); itr.hasNext();) { - int i = itr.nextIndex(); - Digimon a = itr.next(); - - float val = rand.nextFloat(); - if(val > 0.5f) - val = 1f + 2f * (val - 0.5f); - else - val = 1f + (val - 0.5f); - - float newScale = a.getScale() * val; - context.logLine(LogLevel.CASUAL, - String.format(FORMAT_FLOAT, - context.getLanguageKeep().getDigimonNames().getStringById(i + 1), - "Scale", - a.getScale(), - newScale)); - a.setScale(newScale); - a.setDigiviceScale(a.getDigiviceScale() / val); - } - } - - private void randomizeBaseWeight(RandomizationContext context) { - Random rand = new Random(context.getInitialSeed() * "BaseWeight".hashCode()); - - context.logLine(LogLevel.ALWAYS, "Randomizing Digimon Base Weight..."); - - for (ListIterator itr = context.getGlobalKeepData().getRaiseData().listIterator(); itr.hasNext();) { - int i = itr.nextIndex(); - DigimonRaising a = itr.next(); - Digimon digimon = context.getGlobalKeepData().getDigimonData().get(i); - - if (digimon.getLevel() == Level.NONE || digimon.getLevel() == Level.UNUSED || a.getBaseWeight() == 0) - continue; - - int level = Math.max(digimon.getLevel().ordinal() - 1, 1) + (a.getBaseWeight() == 100 ? 1 : 0); - int newWeight = 5 * level + rand.nextInt(5 * level + 10 * (level - 1)); - - context.logLine(LogLevel.CASUAL, - String.format(FORMAT_INT, - context.getLanguageKeep().getDigimonNames().getStringById(i + 1), - "Base Weight", - a.getBaseWeight(), - newWeight)); - a.setBaseWeight((short) newWeight); - } - - context.logLine(LogLevel.ALWAYS, ""); - } - - private void randomizeTrainingType(RandomizationContext context) { - Random rand = new Random(context.getInitialSeed() * "TrainingType".hashCode()); - - context.logLine(LogLevel.ALWAYS, "Randomizing Digimon Training Types..."); - - for (ListIterator itr = context.getGlobalKeepData().getRaiseData().listIterator(); itr.hasNext();) { - int i = itr.nextIndex(); - DigimonRaising a = itr.next(); - - if (a.getTrainingType() > 5) - continue; - - int newType = rand.nextInt(6); - context.logLine(LogLevel.CASUAL, - String.format(FORMAT_INT, - context.getLanguageKeep().getDigimonNames().getStringById(i + 1), - "Training Type", - a.getTrainingType(), - newType)); - a.setTrainingType((byte) newType); - } - - context.logLine(LogLevel.ALWAYS, ""); - } - - private void randomizeFavoriteFood(RandomizationContext context) { - Random rand = new Random(context.getInitialSeed() * "FavoriteFood".hashCode()); - - context.logLine(LogLevel.ALWAYS, "Randomizing Digimon Favorite Food..."); - - List foodItems = new ArrayList<>(); - for (ListIterator itr = context.getGlobalKeepData().getItems().listIterator(); itr.hasNext();) { - int id = itr.nextIndex() + 1; - Item item = itr.next(); - - if (item.getType() == ItemType.FOOD) - foodItems.add(id); - } - - for (ListIterator itr = context.getGlobalKeepData().getRaiseData().listIterator(); itr.hasNext();) { - int i = itr.nextIndex(); - DigimonRaising a = itr.next(); - - if (a.getFavoriteFood() == 0) - continue; - - int newFavFood = foodItems.get(rand.nextInt(foodItems.size())); - context.logLine(LogLevel.CASUAL, - String.format(FORMAT_STRING, - context.getLanguageKeep().getDigimonNames().getStringById(i + 1), - "Favorite Food", - context.getLanguageKeep().getItemNames().getStringById(a.getFavoriteFood()), - context.getLanguageKeep().getItemNames().getStringById(newFavFood))); - a.setFavoriteFood(newFavFood); - } - - context.logLine(LogLevel.ALWAYS, ""); - } - - private void randomizeSleepSchedule(RandomizationContext context) { - Random rand = new Random(context.getInitialSeed() * "SleepSchedule".hashCode()); - - context.logLine(LogLevel.ALWAYS, "Randomizing Digimon Sleep Schedules..."); - - for (ListIterator itr = context.getGlobalKeepData().getRaiseData().listIterator(); itr.hasNext();) { - int i = itr.nextIndex(); - DigimonRaising a = itr.next(); - - if (a.getSleepSchedule() < 2) - continue; - - int newSchedule = 3 + rand.nextInt(6); - context.logLine(LogLevel.CASUAL, - String.format(FORMAT_INT, - context.getLanguageKeep().getDigimonNames().getStringById(i + 1), - "Sleep Schedule", - a.getSleepSchedule(), - newSchedule)); - a.setSleepSchedule(newSchedule); - } - - context.logLine(LogLevel.ALWAYS, ""); - } - - private void randomizeCombatSpeed(RandomizationContext context) { - Random rand = new Random(context.getInitialSeed() * "CombatSpeed".hashCode()); - - context.logLine(LogLevel.ALWAYS, "Randomizing Digimon Combat Speed..."); - - for (ListIterator itr = context.getGlobalKeepData().getDigimonData().listIterator(); itr.hasNext();) { - int i = itr.nextIndex(); - Digimon a = itr.next(); - - float newSpeed = 3.5f + 5f * rand.nextFloat(); - context.logLine(LogLevel.CASUAL, - String.format(FORMAT_FLOAT, - context.getLanguageKeep().getDigimonNames().getStringById(i + 1), - "Combat Speed", - a.getCombatSpeed(), - newSpeed)); - a.setCombatSpeed(newSpeed); - } - - context.logLine(LogLevel.ALWAYS, ""); - } - - private void randomizeAttributes(RandomizationContext context) { - Random rand = new Random(context.getInitialSeed() * "Attribute".hashCode()); - - context.logLine(LogLevel.ALWAYS, "Randomizing Digimon Attributes..."); - - for (ListIterator itr = context.getGlobalKeepData().getDigimonData().listIterator(); itr.hasNext();) { - int i = itr.nextIndex(); - Digimon a = itr.next(); - - if (a.getAttribute() == Attribute.NONE || a.getAttribute() == Attribute.UNKNOWN || a.getAttribute() == Attribute.FREE) - continue; - - Attribute newAttribute = ATTRIBUTE_LIST[rand.nextInt(3)]; - context.logLine(LogLevel.CASUAL, - String.format(FORMAT_STRING, - context.getLanguageKeep().getDigimonNames().getStringById(i + 1), - "Attribute", - a.getAttribute(), - newAttribute)); - a.setAttribute(newAttribute); - } - - context.logLine(LogLevel.ALWAYS, ""); - } - - @Override - public Map serialize() { - Map map = new HashMap<>(); - - map.put("randomizeAttribute", randomizeAttribute.get()); - map.put("randomizeBaseWeight", randomizeBaseWeight.get()); - map.put("randomizeCombatSpeed", randomizeCombatSpeed.get()); - map.put("randomizeFavoriteFood", randomizeFavoriteFood.get()); - map.put("randomizeSleepSchedule", randomizeSleepSchedule.get()); - map.put("randomizeTrainingType", randomizeTrainingType.get()); - map.put("randomizeScale", randomizeScale.get()); - - return map; - } - - @Override - public void load(YamlMapping map) { - if (map == null) - return; - - this.randomizeAttribute.set(Boolean.parseBoolean(map.string("randomizeAttribute"))); - this.randomizeBaseWeight.set(Boolean.parseBoolean(map.string("randomizeBaseWeight"))); - this.randomizeCombatSpeed.set(Boolean.parseBoolean(map.string("randomizeCombatSpeed"))); - this.randomizeFavoriteFood.set(Boolean.parseBoolean(map.string("randomizeFavoriteFood"))); - this.randomizeSleepSchedule.set(Boolean.parseBoolean(map.string("randomizeSleepSchedule"))); - this.randomizeTrainingType.set(Boolean.parseBoolean(map.string("randomizeTrainingType"))); - this.randomizeScale.set(Boolean.parseBoolean(map.string("randomizeScale"))); - } - -} diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/EvolutionSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/EvolutionSettings.java deleted file mode 100644 index 80f9816..0000000 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/EvolutionSettings.java +++ /dev/null @@ -1,449 +0,0 @@ -package net.digimonworld.decode.randomizer.settings; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.EnumMap; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.ListIterator; -import java.util.Map; -import java.util.Optional; -import java.util.Random; -import java.util.Set; -import java.util.function.IntSupplier; -import java.util.stream.Collectors; - -import com.amihaiemil.eoyaml.YamlMapping; - -import net.digimonworld.decodetools.data.keepdata.Digimon; -import net.digimonworld.decodetools.data.keepdata.DigimonRaising; -import net.digimonworld.decodetools.data.keepdata.EvoRequirement; -import net.digimonworld.decodetools.data.keepdata.EvoRequirement.Comperator; -import net.digimonworld.decodetools.data.keepdata.EvoRequirement.Operator; -import net.digimonworld.decodetools.data.keepdata.EvoRequirement.Requirement; -import net.digimonworld.decodetools.data.keepdata.EvoRequirement.SuperGroup; -import net.digimonworld.decodetools.data.keepdata.EvoRequirement.Type; -import net.digimonworld.decodetools.data.keepdata.GlobalKeepData; -import net.digimonworld.decodetools.data.keepdata.LanguageKeep; -import net.digimonworld.decodetools.data.keepdata.enums.Level; -import javafx.beans.property.BooleanProperty; -import javafx.beans.property.SimpleBooleanProperty; -import javafx.geometry.Pos; -import javafx.scene.control.TitledPane; -import javafx.scene.layout.VBox; -import net.digimonworld.decode.randomizer.RandoLogger.LogLevel; -import net.digimonworld.decode.randomizer.RandomizationContext; -import net.digimonworld.decode.randomizer.utils.JavaFXUtils; - -public class EvolutionSettings implements Setting { - - private BooleanProperty randomizeRequirements = new SimpleBooleanProperty(); - private BooleanProperty randomizePaths = new SimpleBooleanProperty(); - private BooleanProperty randomizeStatsgains = new SimpleBooleanProperty(); - - @Override - public TitledPane create(GlobalKeepData inputData, LanguageKeep languageKeep) { - VBox vbox = new VBox(4); - TitledPane pane = new TitledPane("Evolution", vbox); - vbox.setAlignment(Pos.TOP_RIGHT); - pane.setCollapsible(false); - - vbox.getChildren().addAll(JavaFXUtils.buildToggleSwitch("Requirements", Optional.empty(), Optional.of(randomizeRequirements)), - JavaFXUtils.buildToggleSwitch("Paths", Optional.empty(), Optional.of(randomizePaths)), - JavaFXUtils.buildToggleSwitch("Stats Gains", Optional.empty(), Optional.of(randomizeStatsgains))); - - return pane; - } - - @Override - public void randomize(RandomizationContext context) { - if (randomizeRequirements.get()) - randomizeRequirements(context); - if (randomizePaths.get()) - randomizePaths(context); - if (randomizeStatsgains.get()) - randomizeStatsgains(context); - } - - private void randomizeStatsgains(RandomizationContext context) { - Random rand = new Random(context.getInitialSeed() * "StatsGains".hashCode()); - - for (ListIterator itr = context.getGlobalKeepData().getDigimonData().listIterator(); itr.hasNext();) { - int id = itr.nextIndex(); - Digimon digi = itr.next(); - DigimonRaising raise = context.getGlobalKeepData().getRaiseData().get(id); - String name = context.getLanguageKeep().getDigimonNames().getStringById(id + 1); - - if ((digi.getUnk38() & 1) == 1 && raise.getGainHP() != 0) { - IntSupplier gen = getStatsGainGenerator(digi.getLevel(), rand); - - context.logLine(LogLevel.CASUAL, String.format("=== %s's Stats Gains ===", name)); - context.logLine(LogLevel.CASUAL, - String.format("Old: %5d %5d %4d %4d %4d %4d", - raise.getGainHP(), - raise.getGainMP(), - raise.getGainOFF(), - raise.getGainDEF(), - raise.getGainSPD(), - raise.getGainBRN())); - - raise.setGainHP((short) (gen.getAsInt() * 10)); - raise.setGainMP((short) (gen.getAsInt() * 10)); - raise.setGainOFF((short) gen.getAsInt()); - raise.setGainDEF((short) gen.getAsInt()); - raise.setGainSPD((short) gen.getAsInt()); - raise.setGainBRN((short) gen.getAsInt()); - - context.logLine(LogLevel.CASUAL, - String.format("New: %5d %5d %4d %4d %4d %4d", - raise.getGainHP(), - raise.getGainMP(), - raise.getGainOFF(), - raise.getGainDEF(), - raise.getGainSPD(), - raise.getGainBRN())); - context.logLine(LogLevel.CASUAL, ""); - } - } - } - - public IntSupplier getStatsGainGenerator(Level level, Random rand) { - switch (level) { - case BABY1: - return () -> 8 + rand.nextInt(10); - case BABY2: - return () -> 16 + rand.nextInt(19); - case CHILD: - return () -> 30 + rand.nextInt(101); - case ADULT: - return () -> 120 + rand.nextInt(101); - case PERFECT: - return () -> 250 + rand.nextInt(251); - case ULTIMATE: - return () -> 430 + rand.nextInt(571); - default: - return () -> 0; - } - } - - private void randomizePaths(RandomizationContext context) { - Random rand = new Random(context.getInitialSeed() * "EvoPaths".hashCode()); - - Map> digimonMap = new EnumMap<>(Level.class); - - for (ListIterator itr = context.getGlobalKeepData().getDigimonData().listIterator(); itr.hasNext();) { - int id = itr.nextIndex(); - Digimon digi = itr.next(); - - if ((digi.getUnk38() & 1) == 1 && id != 67) { - digimonMap.computeIfAbsent(digi.getLevel(), a -> new ArrayList()).add(id); - DigimonRaising raise = context.getGlobalKeepData().getRaiseData().get(id); - if (digi.getLevel() != Level.BABY2) - raise.setEvolveFrom(new short[5]); - if (digi.getLevel() != Level.BABY1) - raise.setEvolveTo(new short[6]); - } - } - - LinkedList listBaby2 = new LinkedList<>(digimonMap.get(Level.BABY2)); - LinkedList listAdult = new LinkedList<>(digimonMap.get(Level.ADULT)); - LinkedList listChild = new LinkedList<>(digimonMap.get(Level.CHILD)); - LinkedList listPerfect = new LinkedList<>(digimonMap.get(Level.PERFECT)); - LinkedList listUltimate = new LinkedList<>(digimonMap.get(Level.ULTIMATE)); - - Map> baby2Targets = distributeEvolutionPaths(rand, listBaby2, listChild, 5, () -> 5); - Map> childTargets = distributeEvolutionPaths(rand, listChild, listAdult, 5, () -> 5); - Map> adultTargets = distributeEvolutionPaths(rand, listAdult, listPerfect, 3, () -> 3); - Map> perfectTargets = distributeEvolutionPaths(rand, listPerfect, listUltimate, 3, () -> 1 + rand.nextInt(3)); - - baby2Targets.forEach((digimonId, targetSet) -> setEvolutions(digimonId, targetSet, context)); - childTargets.forEach((digimonId, targetSet) -> setEvolutions(digimonId, targetSet, context)); - adultTargets.forEach((digimonId, targetSet) -> setEvolutions(digimonId, targetSet, context)); - perfectTargets.forEach((digimonId, targetSet) -> setEvolutions(digimonId, targetSet, context)); - } - - private void setEvolutions(Integer digimonId, Set targetSet, RandomizationContext context) { - DigimonRaising digi = context.getGlobalKeepData().getRaiseData().get(digimonId); - String name1 = context.getLanguageKeep().getDigimonNames().getStringById(digimonId + 1); - String namesNew = targetSet.stream().map(c -> context.getLanguageKeep().getDigimonNames().getStringById(c + 1)).collect(Collectors.joining(" ")); - - int i = 0; - for (Integer target : targetSet) { - DigimonRaising digi2 = context.getGlobalKeepData().getRaiseData().get(target); - - for (int j = 0; j < 6; j++) - if (digi2.getEvolveFrom(j) == 0) { - digi2.setEvolveFrom(j, (short) (digimonId + 1)); - break; - } - - digi.setEvolveTo(i++, (short) (target + 1)); - } - - context.logLine(LogLevel.CASUAL, String.format("=== %s's Evolutions ===", name1)); - context.logLine(LogLevel.CASUAL, String.format("New: %s", namesNew)); - context.logLine(LogLevel.CASUAL, ""); - } - - private Map> distributeEvolutionPaths(Random rand, List from, List to, int max1, IntSupplier max2) { - Map> map = new HashMap<>(); - - for (Integer i : to) { - boolean notFound = true; - while (notFound) { - int target = from.get(rand.nextInt(from.size())); - Set set = map.computeIfAbsent(target, a -> new HashSet<>()); - if (set.size() < max1) - notFound = !set.add(i); - } - } - - LinkedList clonedTo = new LinkedList<>(); - clonedTo.addAll(to); - clonedTo.addAll(to); - clonedTo.addAll(to); - clonedTo.addAll(to); - - for (Integer i : from) { - Set set = map.computeIfAbsent(i, a -> new HashSet<>()); - int limit = max2.getAsInt(); - while (set.size() < limit) - set.add(clonedTo.poll()); - } - - return map; - } - - private void randomizeRequirements(RandomizationContext context) { - Random rand = new Random(context.getInitialSeed() * "EvoRequirements".hashCode()); - - context.logLine(LogLevel.ALWAYS, "Randomizing Evolution Requirements..."); - - for (ListIterator itr = context.getGlobalKeepData().getDigimonData().listIterator(); itr.hasNext();) { - int i = itr.nextIndex(); - Digimon a = itr.next(); - - if (((a.getUnk38() & 1) != 1)) - continue; - - EvoRequirement evo = context.getGlobalKeepData().getEvoRequirements().get(i); - List requirements = evo.getRequirements(); - - switch (a.getLevel()) { - case CHILD: - requirements.add(new Requirement(SuperGroup.BONUS, (byte) requirements.size(), Operator.AND, Comperator.GREATER_THAN, Type.HAPPINESS, 0)); - break; - case ADULT: - requirements = generateAdultRequirements(rand); - break; - case PERFECT: - requirements = generatePerfectRequirements(rand); - break; - case ULTIMATE: - requirements = generateUltimateRequirements(rand); - break; - default: - break; - } - - String digimonName = context.getLanguageKeep().getDigimonNames().getStringById(i + 1); - context.logLine(LogLevel.CASUAL, String.format("=== %s ===", digimonName)); - context.logLine(LogLevel.CASUAL, "== Old =="); - evo.getRequirements().forEach(b -> context.logLine(LogLevel.CASUAL, b.toString())); - context.logLine(LogLevel.CASUAL, "== New =="); - requirements.forEach(b -> context.logLine(LogLevel.CASUAL, b.toString())); - context.logLine(LogLevel.CASUAL, ""); - - evo.setRequirements(requirements); - } - } - - private List generateUltimateRequirements(Random rand) { - byte quotaId = 0; - int numStats = 3 + rand.nextInt(4); - int numBonus = 1 + rand.nextInt(2); - - List list = new ArrayList<>(); - list.add(new Requirement(SuperGroup.QUOTA, quotaId++, Operator.QUOTA, Comperator.QUOTA, Type.QUOTA, numStats + 2)); - - LinkedList queue = new LinkedList<>(Arrays.asList(Type.HP, Type.MP, Type.OFFENSE, Type.DEFENSE, Type.SPEED, Type.BRAINS)); - LinkedList bonusQueue = new LinkedList<>(Arrays.asList(Type.HAPPINESS, Type.DISCIPLINE, Type.BATTLES)); - Collections.shuffle(queue, rand); - Collections.shuffle(bonusQueue, rand); - - for (int i = 0; i < numStats; i++) { - Type t = queue.poll(); - int val = 300 + rand.nextInt(500); - if (t == Type.HP || t == Type.MP) - val *= 10; - - list.add(new Requirement(SuperGroup.NORMAL, quotaId++, Operator.AND, Comperator.GREATER_THAN, t, val)); - } - - Comperator mode = rand.nextBoolean() ? Comperator.GREATER_THAN : Comperator.LESS_THAN; - list.add(new Requirement(SuperGroup.NORMAL, quotaId++, Operator.AND, mode, Type.WEIGHT, 25 + rand.nextInt(50))); - - if (rand.nextBoolean()) - list.add(new Requirement(SuperGroup.NORMAL, (byte) 5, Operator.AND, Comperator.LESS_THAN, Type.CARE, rand.nextInt(20))); - else - list.add(new Requirement(SuperGroup.NORMAL, (byte) 5, Operator.AND, Comperator.GREATER_THAN, Type.CARE, 1 + rand.nextInt(6))); - - for (int i = 0; i < numBonus; i++) - switch (bonusQueue.poll()) { - case HAPPINESS: - list.add(new Requirement(SuperGroup.BONUS, quotaId++, Operator.AND, Comperator.GREATER_THAN, Type.HAPPINESS, 70 + rand.nextInt(30))); - break; - case DISCIPLINE: - list.add(new Requirement(SuperGroup.BONUS, quotaId++, Operator.AND, rand.nextBoolean() ? Comperator.GREATER_THAN : Comperator.LESS_THAN, - Type.DISCIPLINE, rand.nextInt(100))); - break; - case BATTLES: - list.add(new Requirement(SuperGroup.BONUS, quotaId++, Operator.AND, rand.nextBoolean() ? Comperator.GREATER_THAN : Comperator.LESS_THAN, - Type.BATTLES, 25 + rand.nextInt(50))); - break; - default: - break; - } - - list.add(new Requirement(SuperGroup.BONUS, quotaId++, Operator.AND, Comperator.GREATER_THAN, Type.TECHS, 25 + rand.nextInt(30))); - list.add(new Requirement(SuperGroup.BONUS, quotaId, Operator.AND, Comperator.GREATER_THAN, Type.DECODE_LEVEL, 10 + rand.nextInt(10))); - - return list; - } - - private List generatePerfectRequirements(Random rand) { - List list = new ArrayList<>(); - list.add(new Requirement(SuperGroup.QUOTA, (byte) 0, Operator.QUOTA, Comperator.QUOTA, Type.QUOTA, 5)); - - LinkedList queue1 = new LinkedList<>(Arrays.asList(Type.HP, Type.MP)); - LinkedList queue2 = new LinkedList<>(Arrays.asList(Type.OFFENSE, Type.DEFENSE)); - LinkedList queue3 = new LinkedList<>(Arrays.asList(Type.SPEED, Type.BRAINS)); - Collections.shuffle(queue1, rand); - Collections.shuffle(queue2, rand); - Collections.shuffle(queue3, rand); - int numStats1 = 1 + rand.nextInt(2); - int numStats2 = 1 + rand.nextInt(2); - int numStats3 = 1 + rand.nextInt(2); - - for (int i = 0; i < numStats1; i++) { - int val = 1000 + rand.nextInt(300) * 10; - list.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, queue1.poll(), val)); - } - for (int i = 0; i < numStats2; i++) { - int val = 100 + rand.nextInt(300); - list.add(new Requirement(SuperGroup.NORMAL, (byte) 2, Operator.AND, Comperator.GREATER_THAN, queue2.poll(), val)); - } - for (int i = 0; i < numStats3; i++) { - int val = 100 + rand.nextInt(300); - list.add(new Requirement(SuperGroup.NORMAL, (byte) 3, Operator.AND, Comperator.GREATER_THAN, queue3.poll(), val)); - } - - Comperator mode = rand.nextBoolean() ? Comperator.GREATER_THAN : Comperator.LESS_THAN; - list.add(new Requirement(SuperGroup.NORMAL, (byte) 4, Operator.AND, mode, Type.WEIGHT, 20 + rand.nextInt(45))); - - if (rand.nextBoolean()) - list.add(new Requirement(SuperGroup.NORMAL, (byte) 5, Operator.AND, Comperator.LESS_THAN, Type.CARE, rand.nextInt(20))); - else - list.add(new Requirement(SuperGroup.NORMAL, (byte) 5, Operator.AND, Comperator.GREATER_THAN, Type.CARE, 1 + rand.nextInt(6))); - - LinkedList bonusQueue = new LinkedList<>(Arrays.asList(Type.HAPPINESS, Type.DISCIPLINE, Type.BATTLES)); - Collections.shuffle(bonusQueue, rand); - - int numBonus = 1 + (rand.nextFloat() < 0.25 ? 1 : 0); - for (int i = 0; i < numBonus; i++) - switch (bonusQueue.poll()) { - case HAPPINESS: - list.add(new Requirement(SuperGroup.BONUS, (byte) (6 + i), Operator.AND, Comperator.GREATER_THAN, Type.HAPPINESS, 70 + rand.nextInt(30))); - break; - case DISCIPLINE: - list.add(new Requirement(SuperGroup.BONUS, (byte) (6 + i), Operator.AND, - rand.nextBoolean() ? Comperator.GREATER_THAN : Comperator.LESS_THAN, Type.DISCIPLINE, 50 + rand.nextInt(46))); - break; - case BATTLES: - list.add(new Requirement(SuperGroup.BONUS, (byte) (6 + i), Operator.AND, - rand.nextBoolean() ? Comperator.GREATER_THAN : Comperator.LESS_THAN, Type.BATTLES, 20 + rand.nextInt(25))); - break; - default: - break; - } - - list.add(new Requirement(SuperGroup.BONUS, (byte) (6 + numBonus), Operator.AND, Comperator.GREATER_THAN, Type.TECHS, 25 + rand.nextInt(30))); - list.add(new Requirement(SuperGroup.BONUS, (byte) (7 + numBonus), Operator.AND, Comperator.GREATER_THAN, Type.DECODE_LEVEL, 10 + rand.nextInt(10))); - - return list; - } - - private List generateAdultRequirements(Random rand) { - List list = new ArrayList<>(); - list.add(new Requirement(SuperGroup.QUOTA, (byte) 0, Operator.QUOTA, Comperator.QUOTA, Type.QUOTA, 3)); - - LinkedList queue = new LinkedList<>(Arrays.asList(Type.HP, Type.MP, Type.OFFENSE, Type.DEFENSE, Type.SPEED, Type.BRAINS)); - Collections.shuffle(queue, rand); - - int numStats = 1 + rand.nextInt(5); - for (int i = 0; i < numStats; i++) { - Type t = queue.poll(); - int val = 50 + rand.nextInt(120); - if (t == Type.HP || t == Type.MP) - val *= 10; - - list.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, t, val)); - } - - Comperator mode = rand.nextBoolean() ? Comperator.GREATER_THAN : Comperator.LESS_THAN; - list.add(new Requirement(SuperGroup.NORMAL, (byte) 2, Operator.AND, mode, Type.WEIGHT, 5 + rand.nextInt(40))); - - if (rand.nextBoolean()) - list.add(new Requirement(SuperGroup.NORMAL, (byte) 3, Operator.AND, Comperator.LESS_THAN, Type.CARE, rand.nextInt(11))); - else - list.add(new Requirement(SuperGroup.NORMAL, (byte) 3, Operator.AND, Comperator.GREATER_THAN, Type.CARE, 1 + rand.nextInt(3))); - - LinkedList bonusQueue = new LinkedList<>(Arrays.asList(Type.HAPPINESS, Type.DISCIPLINE, Type.BATTLES)); - Collections.shuffle(bonusQueue, rand); - - switch (bonusQueue.poll()) { - case HAPPINESS: - list.add(new Requirement(SuperGroup.BONUS, (byte) 4, Operator.AND, Comperator.GREATER_THAN, Type.HAPPINESS, 50 + rand.nextInt(46))); - break; - case DISCIPLINE: - list.add(new Requirement(SuperGroup.BONUS, (byte) 4, Operator.AND, rand.nextBoolean() ? Comperator.GREATER_THAN : Comperator.LESS_THAN, - Type.DISCIPLINE, 50 + rand.nextInt(46))); - break; - case BATTLES: - list.add(new Requirement(SuperGroup.BONUS, (byte) 4, Operator.AND, rand.nextBoolean() ? Comperator.GREATER_THAN : Comperator.LESS_THAN, - Type.BATTLES, 5 + rand.nextInt(26))); - break; - default: - break; - } - - list.add(new Requirement(SuperGroup.BONUS, (byte) 5, Operator.AND, Comperator.GREATER_THAN, Type.TECHS, 10 + rand.nextInt(30))); - list.add(new Requirement(SuperGroup.BONUS, (byte) 6, Operator.AND, Comperator.GREATER_THAN, Type.DECODE_LEVEL, 5 + rand.nextInt(13))); - - return list; - } - - @Override - public Map serialize() { - Map map = new HashMap<>(); - - map.put("randomizeRequirements", randomizeRequirements.get()); - map.put("randomizePaths", randomizePaths.get()); - map.put("randomizeStatsgains", randomizeStatsgains.get()); - - return map; - } - - @Override - public void load(YamlMapping map) { - if (map == null) - return; - - this.randomizeRequirements.set(Boolean.parseBoolean(map.string("randomizeRequirements"))); - this.randomizePaths.set(Boolean.parseBoolean(map.string("randomizePaths"))); - this.randomizeStatsgains.set(Boolean.parseBoolean(map.string("randomizeStatsgains"))); - } -} diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index 54b32c0..058ac57 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -169,17 +169,11 @@ public PathPosition(String pathDescriptor) { this.wildcard = true; this.path = this.path.substring(1); } - if (splitter.length == 1) { - return; - } - + if (splitter.length == 1) return; + this.line = Integer.parseInt(splitter[1]); - if (splitter.length == 2) { - this.col = -1; - } else { - this.col = Integer.parseInt(splitter[2]); - } - + if (splitter.length == 2) this.col = -1; + else this.col = Integer.parseInt(splitter[2]); } /** @@ -201,24 +195,14 @@ public Replacement(String index, String original, String replacement, String raw TermType tType = classifyTerm(replacement, origin); //Special modifications only apply to Digimon names if (!manualCsv.get() && tType != TermType.GENERAL) { - if (ogre.get() && replacement.equals("Orgemon")) { - this.replacement = "Ogremon"; - } - if (pickle.get() && replacement.equals("Piccolomon")) { - this.replacement = "Picklemon"; - } else if (blackPrefix.get() && replacement.endsWith("mon (Black)")) { - this.replacement = "Black" + replacement.substring(0, replacement.length() - 8); - } else { - this.replacement = replacement; - } - - } else { - this.replacement = replacement; - } + if (ogre.get() && replacement.equals("Orgemon")) this.replacement = "Ogremon"; + if (pickle.get() && replacement.equals("Piccolomon")) this.replacement = "Picklemon"; + else if (blackPrefix.get() && replacement.endsWith("mon (Black)")) this.replacement = "Black" + replacement.substring(0, replacement.length() - 8); + else this.replacement = replacement; + } else this.replacement = replacement; + //Separating multipart Digimon names Wikimon style - if (tType == TermType.DIGIMONMULTI && !camelCase.get()) { - this.replacement = this.replacement.replaceAll("([a-z])([A-Z])", "$1 $2"); - } + if (tType == TermType.DIGIMONMULTI && !camelCase.get()) this.replacement = this.replacement.replaceAll("([a-z])([A-Z])", "$1 $2"); this.replacement = this.replacement.replaceAll("\\n", "\n"); this.diffS = replacement.endsWith("s") != original.endsWith("s"); @@ -235,13 +219,9 @@ public Replacement(String index, String original, String replacement, String raw String[] pathos = rawDisabledPaths.split(","); for (String p : pathos) { String tp = p.trim(); - if (tp.toLowerCase().equals("all")) { - this.global = false; - } else if (tp.startsWith("!")) { - this.enabledPaths.add(new PathPosition(tp.substring(1))); - } else if (!tp.equals("")) { - this.disabledPaths.add(new PathPosition(tp)); - } + if (tp.toLowerCase().equals("all")) this.global = false; + else if (tp.startsWith("!")) this.enabledPaths.add(new PathPosition(tp.substring(1))); + else if (!tp.equals("")) this.disabledPaths.add(new PathPosition(tp)); } } @@ -250,22 +230,16 @@ public Replacement(String index, String original, String replacement, String raw * modification to the offset value. */ private int correctApostrophe(BTXEntry btx, int end) { - if (!diffS) { - return 0; - } + if (!diffS) return 0; String text = btx.getString(); int max = text.length(); - if (max == end) { - return 0; - } + if (max == end) return 0; if (replacement.endsWith("s")) { // remove s after apostrophe if (text.substring(Math.min(end, max), Math.min(end + 2, max)).equals("'s")) { btx.setString(text.substring(0, end + 1) + text.substring(end + 2)); return -1; - } else { - return 0; - } + } else return 0; } else { // add s after apostrophe if (text.substring(Math.min(end, max), Math.min(end + 1, max)).equals("'")) { @@ -284,9 +258,8 @@ private int correctApostrophe(BTXEntry btx, int end) { * of vowels in some words. */ private int correctArticle(BTXEntry btx, int start) { - if (!diffArt || start == 0) { - return 0; - } + if (!diffArt || start == 0) return 0; + String text = btx.getString(); if (vow.contains(replacement.substring(0, 1))) { //Adding the missing n @@ -324,9 +297,8 @@ public void replaceDynamic(BTXEntry btx, String path) { String origText = btx.getString(); Tuple match = findInText(origText, path); int matchStart = match.getKey(); - if (matchStart == -1) { - return; - } + if (matchStart == -1) return; + String rep = match.getValue(); int matchEnd = matchStart + matchLength; @@ -347,16 +319,14 @@ public void replaceDynamic(BTXEntry btx, String path) { */ private int realPosition(String path, int index) { ArrayList repls = replacementMap.get(path); - if (repls == null) { - return index; - } + if (repls == null) return index; + int finalOffset = 0; for (int[] current : repls) { int start = current[0]; int offset = current[2]; - if (start > index) { - break; - } + if (start > index) break; + finalOffset += offset; } return index + finalOffset; @@ -368,22 +338,18 @@ private int realPosition(String path, int index) { */ private boolean isOverlapping(String path, int index) { ArrayList repls = replacementMap.get(path); - if (repls == null) { - return false; - } + if (repls == null) return false; + int pos = realPosition(path, index); for (int[] current : repls) { int start = current[0]; int end = current[1]; // If the start position is bigger than the end of our match we don't need to check the rest - if (start >= pos + (matchLength - 1)) { - break; - } - if (end >= pos && start < pos) { - // Oh no, an overlap! - return true; - } + if (start >= pos + (matchLength - 1)) break; + + // Oh no, an overlap! + if (end >= pos && start < pos) return true; } return false; } @@ -412,28 +378,19 @@ private boolean termExclusion(String text, int index) { for (String term : excludedTerms) { if (term.equals("[]")) { //Checking for word boundaries - if (!text.substring(Math.max(0, index - 2), Math.min(text.length(), index + 2)).matches(".*\b" + original + "\b.*")) { - return true; - } + if (!text.substring(Math.max(0, index - 2), Math.min(text.length(), index + 2)).matches(".*\b" + original + "\b.*")) return true; continue; } int exDex = text.indexOf(term); if (exDex == -1) { if (text.contains("\n")) { Matcher mt = Pattern.compile(term.replaceAll(" ", "(\\\\s)")).matcher(text); - if (mt.find()) { - exDex = mt.start(); - } else { - continue; - } - } else { - continue; - } + if (mt.find()) exDex = mt.start(); + else continue; + } else continue; } int subDex = term.replaceAll("\n", " ").indexOf(original); - if (exDex + subDex == index) { - return true; - } + if (exDex + subDex == index) return true; } return false; } @@ -456,17 +413,14 @@ private boolean pathExclusion(String path, int index) { */ private Tuple adjustForNewlines(String text) { Matcher spaceMatch = Pattern.compile(original.replaceAll(" ", "(\\\\s)")).matcher(text); - if (!spaceMatch.find()) { - return new Tuple(-1, replacement); - } else { + if (!spaceMatch.find()) return new Tuple(-1, replacement); + else { int first = spaceMatch.start(); - if (!replacement.contains(" ")) { - return new Tuple(first, replacement + "\n"); - } + if (!replacement.contains(" ")) return new Tuple(first, replacement + "\n"); + String[] repSplit = replacement.split(" "); - if (repSplit.length == 2) { - return new Tuple(first, repSplit[0] + "\n" + repSplit[1]); - } + if (repSplit.length == 2) return new Tuple(first, repSplit[0] + "\n" + repSplit[1]); + int spaceLoc = 0; int spaceDex = 0; for (int i = 1; i < spaceMatch.groupCount(); i++) { @@ -479,19 +433,14 @@ private Tuple adjustForNewlines(String text) { for (int i = 0; i < splits.length; i++) { String s = splits[i]; spaceDex += s.length() + 1; - if (i == spaceLoc) { - break; - } - } - if (spaceDex >= replacement.length()) { - return new Tuple(first, replacement + "\n"); + if (i == spaceLoc) break; } + if (spaceDex >= replacement.length()) return new Tuple(first, replacement + "\n"); int firstBefore = replacement.substring(0, spaceDex).lastIndexOf(" "); int firstAfter = replacement.substring(spaceDex).indexOf(" "); - if (firstAfter == -1 && firstBefore == -1) { - return new Tuple(first, replacement + "\n"); - } + if (firstAfter == -1 && firstBefore == -1) return new Tuple(first, replacement + "\n"); + int finalSpace = firstAfter == -1 ? firstBefore : firstBefore == -1 ? firstAfter : Math.min(firstAfter, firstBefore) == firstBefore ? firstBefore : firstAfter; return new Tuple(first, replacement.substring(0, finalSpace) + "\n" + replacement.substring(finalSpace + 1)); } @@ -500,9 +449,7 @@ private Tuple adjustForNewlines(String text) { public Tuple findInText(String text, String path) { int idx = text.indexOf(original); - if (idx == -1 && original.contains(" ") && text.contains("\n")) { - return adjustForNewlines(text); - } + if (idx == -1 && original.contains(" ") && text.contains("\n")) return adjustForNewlines(text); //If any of the exclusions match, we return -1 return new Tuple((idx == -1 || termExclusion(text, idx) || (path != null && (pathExclusion(path, idx) || isOverlapping(path, idx)))) ? -1 : idx, replacement); } @@ -517,19 +464,14 @@ private ArrayList getNameListMethods(LanguageKeep lang) { Method[] methods = lang.getClass().getMethods(); for (Method method : methods) { String methodName = method.getName(); - if (methodName.contains("Names")) { - methodList.add(methodName); - } + if (methodName.contains("Names")) methodList.add(methodName); } return methodList; } private static void clearExportDir(File dir) { - try { - if (dir.exists()) { - Files.walkFileTree(dir.toPath(), new DeleteDirectoryFileVisitor()); - } - } catch (IOException exc) { + try { if (dir.exists()) Files.walkFileTree(dir.toPath(), new DeleteDirectoryFileVisitor());} + catch (IOException exc) { exc.printStackTrace(); return; } @@ -543,12 +485,8 @@ private static EventHandler buildHandler(File targetDir) { try { BufferedReader reader = new BufferedReader(new InputStreamReader(DecodeRandomizer.class.getResourceAsStream("settings/builtinRenamingPreset.csv"))); String pName; - while ((pName = reader.readLine()) != null) { - Files.copy(DecodeRandomizer.class.getResourceAsStream(pName), Path.of(pName), StandardCopyOption.REPLACE_EXISTING); - } - } catch (IOException exc) { - exc.printStackTrace(); - } + while ((pName = reader.readLine()) != null) Files.copy(DecodeRandomizer.class.getResourceAsStream(pName), Path.of(pName), StandardCopyOption.REPLACE_EXISTING); + } catch (IOException exc) {exc.printStackTrace();} }; } @@ -609,9 +547,7 @@ public TitledPane create(GlobalKeepData data, LanguageKeep language) { try { BTXPayload btx = (BTXPayload) language.getClass().getMethod(s).invoke(language); btx.getEntries().stream().forEach(e -> myList.add(new Tuple(e.getKey(), e.getValue().getString()))); - } catch (IllegalAccessException | NoSuchMethodException | InvocationTargetException e) { - e.printStackTrace(); - } + } catch (IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {e.printStackTrace();} File destFile = new File(".\\renamingPresets\\" + s.substring(3) + ".csv"); try (BufferedWriter writer = new BufferedWriter(new FileWriter(destFile, StandardCharsets.UTF_8))) { @@ -622,9 +558,7 @@ public TitledPane create(GlobalKeepData data, LanguageKeep language) { .collect(Collectors.joining(";;\n")) + ";;"; writer.write(string); - } catch (IOException e) { - e.printStackTrace(); - } + } catch (IOException e) {e.printStackTrace();} }); manualCsv.set(true); }; @@ -687,11 +621,8 @@ public PathResolver(RandomizationContext context) { * Returns a file directly from the RandomizationContext */ public ResPayload resolveRaw(String finalPath) throws IOException { - try { - return context.getFile(finalPath).get(); - } catch (NoSuchElementException exc) { - throw new IOException("Path " + finalPath + " does not exist."); - } + try {return context.getFile(finalPath).get();} + catch (NoSuchElementException exc) {throw new IOException("Path " + finalPath + " does not exist.");} } /** @@ -706,14 +637,9 @@ public Tuple resolve(String path) throws ParseException { .collect(Collectors.joining("\\")); try { NormalKCAP pk = (NormalKCAP) context.getFile(finalPath).get(); - if (frag.get(frag.size() - 1).equals("keep")) { - pk = (NormalKCAP) pk.get(0); - } - + if (frag.get(frag.size() - 1).equals("keep")) pk = (NormalKCAP) pk.get(0); return new Tuple<>(finalPath + "\\" + btxIndex, (BTXPayload) pk.get(btxIndex)); - } catch (NoSuchElementException exc) { - throw new ParseException("csv not correctly mapped", 0); - } + } catch (NoSuchElementException exc) {throw new ParseException("csv not correctly mapped", 0);} } } @@ -738,20 +664,15 @@ private void targetedBtxReplacement(BTXPayload btx, File f, String path) { private ArrayList instantiateReplacements(List lines, String path, boolean addAll) { ArrayList rList = new ArrayList<>(); for (int i = 0; i < lines.size(); i++) { - if (i == 0) { - continue; - } + if (i == 0) continue; String[] entries = lines.get(i).split(";", -1); // Even if we don't replace a term, if it's a multipart Digimon name it will be changed if the camelCase option is not set. - if (entries[1].equals(entries[2]) && (camelCase.get() || classifyTerm(entries[2], path) != TermType.DIGIMONMULTI)) { - continue; - } + if (entries[1].equals(entries[2]) && (camelCase.get() || classifyTerm(entries[2], path) != TermType.DIGIMONMULTI)) continue; Replacement rep = new Replacement(entries[0], entries[1], entries[2], entries[3], entries[4], path); rList.add(rep); //By adding only the first replacement of a word to the global replacement list, we only need to define the global rules once. - if (replaceAll.get() && rep.global && (addAll || !repMap.containsKey(rep.original))) { - repMap.put(rep.original, rep); - } + if (replaceAll.get() && rep.global && (addAll || !repMap.containsKey(rep.original))) repMap.put(rep.original, rep); + } return rList; } @@ -773,9 +694,8 @@ private ArrayList parseReplacements(File f, String path, boolean ad @Override public void randomize(RandomizationContext context) { String mode = mainAc.getExpandedPane().getId(); - if (!(mode.equals("restore") ? renameEnabled.get() : randomizeEnabled.get())) { - return; - } + if (!(mode.equals("restore") ? renameEnabled.get() : randomizeEnabled.get())) return; + PathResolver res = new PathResolver(context); if (mode.equals("restore")) { @@ -796,9 +716,7 @@ public void randomize(RandomizationContext context) { try { Tuple foundBtx = res.resolve(pName.substring(0, pName.length() - 4)); targetedBtxReplacement(foundBtx.getValue(), p, foundBtx.getKey()); - } catch (ParseException e) { - e.printStackTrace(); - } + } catch (ParseException e) {e.printStackTrace();} }); } else { BufferedReader reader = new BufferedReader(new InputStreamReader(DecodeRandomizer.class.getResourceAsStream("settings/builtinRenamingPreset.csv"))); @@ -808,9 +726,7 @@ public void randomize(RandomizationContext context) { BufferedReader reader2 = new BufferedReader(new InputStreamReader(DecodeRandomizer.class.getResourceAsStream(pName))); String str2; ArrayList foundReps = new ArrayList<>(); - while ((str2 = reader2.readLine()) != null) { - foundReps.add(str2); - } + while ((str2 = reader2.readLine()) != null) foundReps.add(str2); if (pName.endsWith("_general.csv") || pName.endsWith("_general_digimon.csv")) { if (replaceAll.get()) { System.out.println("Parsing general " + (pName.contains("digimon") ? "Digimon " : "") + "replacements"); @@ -821,20 +737,14 @@ public void randomize(RandomizationContext context) { try { Tuple foundBtx = res.resolve(pName.substring(16, pName.length() - 4)); targetedBtxReplacement(foundBtx.getValue(), foundReps, pName, foundBtx.getKey()); - } catch (ParseException e) { - e.printStackTrace(); - } + } catch (ParseException e) {e.printStackTrace();} } } - } catch (IOException exc) { - exc.printStackTrace(); - } + } catch (IOException exc) {exc.printStackTrace();} - if (!replaceAll.get()) { - return; - } + if (!replaceAll.get()) {return;} File startDir = new File(".\\working\\part0\\arcv\\"); @@ -873,9 +783,7 @@ public void randomize(RandomizationContext context) { String partialPath = normalPath.toString() + "\\" + (i); payload.getEntries().forEach(bt -> fileEntries.add(new Tuple(partialPath + ":" + bt.getKey(), bt.getValue()))); } - } catch (IOException e) { - e.printStackTrace(); - } + } catch (IOException e) {e.printStackTrace();} }); sortedReps.forEach(rep -> fileEntries.forEach(t -> rep.replaceDynamic(t.getValue(), t.getKey()))); @@ -895,20 +803,14 @@ public void randomize(RandomizationContext context) { while (entries.size() > 1) { int i = rand.nextInt(entries.size()); BTXEntry btxA = entries.remove(i); - if (firstEntry == null) { - firstEntry = btxA; - } + if (firstEntry == null) firstEntry = btxA; int n = rand.nextInt(entries.size()); BTXEntry btxB = entries.remove(n); btxSwitch(btxA, btxB); } //In case there's an uneven number of entries we switch the leftover entry with the first entry we processed previously - if (entries.size() == 1) { - btxSwitch(firstEntry, entries.get(0)); - } - } catch (ParseException e) { - e.printStackTrace(); - } + if (entries.size() == 1) btxSwitch(firstEntry, entries.get(0)); + } catch (ParseException e) {e.printStackTrace();} }); } } @@ -930,9 +832,8 @@ public Map serialize() { @Override public void load(YamlMapping map) { - if (map == null) { - return; - } + if (map == null) return; + YamlSequence list = map.yamlSequence("randomChecked"); List activeList = list == null ? new ArrayList<>() : list.values().stream().map(a -> a.toString()).collect(Collectors.toList()); randoMap.forEach((a, b) -> b.set(activeList.contains(a))); diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/PatchSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/PatchSettings.java deleted file mode 100644 index 0a96c36..0000000 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/PatchSettings.java +++ /dev/null @@ -1,1107 +0,0 @@ -package net.digimonworld.decode.randomizer.settings; - -import java.awt.image.BufferedImage; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Optional; - -import com.amihaiemil.eoyaml.YamlMapping; - -import javafx.beans.property.BooleanProperty; -import javafx.beans.property.DoubleProperty; -import javafx.beans.property.SimpleBooleanProperty; -import javafx.beans.property.SimpleDoubleProperty; -import javafx.geometry.Pos; -import javafx.scene.control.Label; -import javafx.scene.control.Slider; -import javafx.scene.control.TitledPane; -import javafx.scene.layout.HBox; -import javafx.scene.layout.VBox; -import net.digimonworld.decode.randomizer.RandoLogger.LogLevel; -import net.digimonworld.decode.randomizer.RandomizationContext; -import net.digimonworld.decode.randomizer.utils.JavaFXUtils; -import net.digimonworld.decodetools.data.keepdata.AccessoryOrder; -import net.digimonworld.decodetools.PixelFormat; -import net.digimonworld.decodetools.data.DigimonList; -import net.digimonworld.decodetools.data.digimon.PartnerDigimon; -import net.digimonworld.decodetools.data.keepdata.Digimon; -import net.digimonworld.decodetools.data.keepdata.DigimonRaising; -import net.digimonworld.decodetools.data.keepdata.EvoRequirement.Comperator; -import net.digimonworld.decodetools.data.keepdata.EvoRequirement.Operator; -import net.digimonworld.decodetools.data.keepdata.EvoRequirement.Requirement; -import net.digimonworld.decodetools.data.keepdata.EvoRequirement.SuperGroup; -import net.digimonworld.decodetools.data.keepdata.EvoRequirement.Type; -import net.digimonworld.decodetools.data.keepdata.GlobalKeepData; -import net.digimonworld.decodetools.data.keepdata.LanguageKeep; -import net.digimonworld.decodetools.res.kcap.AbstractKCAP; -import net.digimonworld.decodetools.res.kcap.GMIPKCAP; -import net.digimonworld.decodetools.res.payload.GMIOPayload; -import net.digimonworld.decodetools.res.payload.GMIOPayload.TextureFiltering; -import net.digimonworld.decodetools.res.payload.GMIOPayload.TextureWrap; -import net.digimonworld.decodetools.res.payload.GMIOPayload.UnknownEnum; -import net.digimonworld.decodetools.res.payload.GenericPayload; - -public class PatchSettings implements Setting { - - // TODO evo priority - // TODO faster menus/training - // TODO increase MP recovery rate - // TODO remove intro cutscene - - private BooleanProperty patchViewDistance = new SimpleBooleanProperty(); - private BooleanProperty patchBrainsChance = new SimpleBooleanProperty(); - private DoubleProperty patchBrainsChanceFactor = new SimpleDoubleProperty(); - private BooleanProperty patchStartMPDisc = new SimpleBooleanProperty(); - private BooleanProperty patchDisable90FBattles = new SimpleBooleanProperty(); - private BooleanProperty patchMovementSpeed = new SimpleBooleanProperty(); - private BooleanProperty patchAddRecolorDigimon = new SimpleBooleanProperty(); - private BooleanProperty patchListOrder = new SimpleBooleanProperty(); - - @Override - public TitledPane create(GlobalKeepData inputData, LanguageKeep languageKeep) { - VBox vbox = new VBox(4); - TitledPane pane = new TitledPane("Patches", vbox); - vbox.setAlignment(Pos.TOP_RIGHT); - pane.setCollapsible(false); - - Slider brainChanceSlider = new Slider(1D, 10D, 1D); - brainChanceSlider.setShowTickLabels(true); - brainChanceSlider.setShowTickMarks(true); - brainChanceSlider.setMajorTickUnit(1D); - brainChanceSlider.setMinorTickCount(3); - brainChanceSlider.setSnapToTicks(true); - brainChanceSlider.setBlockIncrement(0.25D); - brainChanceSlider.disableProperty().bind(patchBrainsChance.not()); - - Label lbl = new Label("100%"); - lbl.textProperty().bind(brainChanceSlider.valueProperty().multiply(100D).asString("%4.0f%%")); - lbl.setMinWidth(45); - lbl.setAlignment(Pos.CENTER_RIGHT); - - patchBrainsChanceFactor.bindBidirectional(brainChanceSlider.valueProperty()); - - vbox.getChildren() - .addAll(JavaFXUtils.buildToggleSwitch("View Distance", - Optional.of("Increases view distance, allowing to see Digimon from a further distance."), - Optional.of(patchViewDistance)), - JavaFXUtils.buildToggleSwitch("Increase Movement Speed", - Optional.of("Increases running speed of player and enenmies."), - Optional.of(patchMovementSpeed)), - JavaFXUtils.buildToggleSwitch("Brain Learn Chance", Optional.empty(), Optional.of(patchBrainsChance)), - new HBox(brainChanceSlider, lbl), - JavaFXUtils.buildToggleSwitch("Start with MP Disc", - Optional.of("Replaces the starting Meat with MP Discs.\nStrongly recommended when playing with randomized MP costs!"), - Optional.of(patchStartMPDisc)), - JavaFXUtils.buildToggleSwitch("Skip 90F Battles", - Optional.of("Disabled the battles on 90F where you control your allies.\nThis is useful to prevent these fight from being unwinnable."), - Optional.of(patchDisable90FBattles)), - JavaFXUtils.buildToggleSwitch("Enable additional Digimon", - Optional.of("Makes 19 previously unobtainable recolor Digimon available.\nBlackAgumon, BlackGabumon, Tsukaimon, Psychemon,\nSnowAgumon, Solarmon, BlackGarurumon, Gururumon,\nYellowGrowlmon, BlackGrowlmon, IceDevimon,\nGeremon, MetalGreymon (Virus), BlackWarGrowlmon,\nOrangeWarGrowlmon, BlackWereGarurumon, BlackWarGreymon,\nBlackMetalGarurumon, ChaosDukemon"), - Optional.of(patchAddRecolorDigimon)), - JavaFXUtils.buildToggleSwitch("Sort Lists Alphabetically", - Optional.of("Sort Digimon Evolution List & Accessories alphabetically"), - Optional.of(patchListOrder))); - return pane; - } - - @Override - public void randomize(RandomizationContext context) { - if (patchViewDistance.get()) - patchViewDistance(context); - if (patchBrainsChance.get()) - patchBrainsChance(context); - if (patchStartMPDisc.get()) - patchStartMPDisc(context); - if (patchDisable90FBattles.get()) - disable90FBattles(context); - if (patchMovementSpeed.get()) - patchMovementSpeed(context); - if (patchAddRecolorDigimon.get()) - patchAddRecolorDigimon(context); - if (patchListOrder.get()) - patchListOrder(context); - } - - private void sortAccessoryOrder(RandomizationContext context) { - List accorder = new ArrayList<>(context.getGlobalKeepData().getAccessoryOrder()); - var accNames = context.getLanguageKeep().getAccessoryNames(); - accorder.sort(Comparator.comparing(order -> accNames.getStringById(order.getId()))); - - int accOrder = 1; - for (AccessoryOrder acccorderdata : accorder) - acccorderdata.setAccId(accOrder++); - } - - private void sortDigimonOrder(RandomizationContext context) { - List list = new ArrayList<>(context.getGlobalKeepData().getDigimonData()); - var names = context.getLanguageKeep().getDigimonNames(); - list.sort(Comparator.comparing(Digimon::getLevel).thenComparing(a -> names.getStringById(a.getId()))); - - short evoListPos = 1; - for (Digimon digimon : list) - digimon.setEvoListPos(evoListPos++); - } - - private void patchListOrder(RandomizationContext context) { - context.logLine(LogLevel.ALWAYS, "Patching List Order..."); - - sortAccessoryOrder(context); - sortDigimonOrder(context); - } - - private void patchAddRecolorDigimon(RandomizationContext context) { - context.logLine(LogLevel.ALWAYS, "Adding new Digimon..."); - - addBlackAgumon(context); - addBlackGabumon(context); - addTsukaimon(context); - addPsychemon(context); - addSnowAgumon(context); - addSolarmon(context); - - addBlackGarurumon(context); - addGururumon(context); - addOrangeGrowlmon(context); - addBlackGrowlmon(context); - addIceDevimon(context); - addGeremon(context); - - addMetalGreymonVirus(context); - addWarGrowlmonBlack(context); - addWarGrowlmonOrange(context); - addBlackWereGarurumon(context); - - addBlackWarGreymon(context); - addChaosDukemon(context); - addBlackMetalGarurumon(context); - } - - private void addBlackAgumon(RandomizationContext context) { - context.logLine(LogLevel.ALWAYS, "Adding BlackAgumon..."); - - GlobalKeepData keep = context.getGlobalKeepData(); - final short ownId = DigimonList.BLACKAGUMON; - final short baseId = DigimonList.AGUMON; - - // Digimon Data - applyBaseData(context, ownId, baseId, (short) 100); - - // Raise Data - DigimonRaising raise = context.getGlobalKeepData().getRaiseData().get(ownId - 1); - raise.setSleepSchedule(5); - raise.setFavoriteFood(39); - raise.setTrainingType((byte) 0); - raise.setLikedAreas((short) 4128); - raise.setDislikedAreas((short) 272); - raise.setGains(500, 1200, 50, 70, 90, 40); - - // Evo Requirements - List requirements = new ArrayList<>(); - requirements.add(new Requirement(SuperGroup.QUOTA, (byte) 0, Operator.QUOTA, Comperator.QUOTA, Type.QUOTA, 2)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.HIGHEST, Type.MP_DIV10, 0)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 2, Operator.AND, Comperator.LESS_THAN, Type.WEIGHT, 12)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 3, Operator.AND, Comperator.EQUALS, Type.DIGIMON, DigimonList.KOROMON)); - - keep.getEvoRequirements().get(ownId - 1).setRequirements(requirements); - - // Evo Paths - setEvolveFrom(keep, ownId, DigimonList.KOROMON); - setEvolveTo(keep, ownId, DigimonList.BLACK_WARGROWLMON, DigimonList.GREYMON, DigimonList.SEADRAMON, DigimonList.GROWLMON, DigimonList.WOODMON); - - setDescriptionString(context, ownId, "Focus on MP and low weight.\nEvolves from Koromon."); - } - - private void addBlackGabumon(RandomizationContext context) { - context.logLine(LogLevel.ALWAYS, "Adding BlackGabumon..."); - - GlobalKeepData keep = context.getGlobalKeepData(); - final short ownId = DigimonList.BLACKGABUMON; - final short baseId = DigimonList.GABUMON; - - // Digimon Data - applyBaseData(context, ownId, baseId, (short) 101); - - // Raise Data - DigimonRaising raise = context.getGlobalKeepData().getRaiseData().get(ownId - 1); - raise.setSleepSchedule(5); - raise.setFavoriteFood(39); - raise.setTrainingType((byte) 1); - raise.setLikedAreas((short) 516); - raise.setDislikedAreas((short) 160); - raise.setGains(800, 1000, 50, 80, 80, 40); - - // Evo Requirements - List requirements = new ArrayList<>(); - requirements.add(new Requirement(SuperGroup.QUOTA, (byte) 0, Operator.QUOTA, Comperator.QUOTA, Type.QUOTA, 2)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.HIGHEST, Type.MP_DIV10, 0)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 2, Operator.AND, Comperator.GREATER_THAN, Type.WEIGHT, 14)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 3, Operator.AND, Comperator.EQUALS, Type.DIGIMON, DigimonList.TSUNOMON)); - - keep.getEvoRequirements().get(ownId - 1).setRequirements(requirements); - - // Evo Paths - setEvolveFrom(keep, ownId, DigimonList.TSUNOMON); - setEvolveTo(keep, ownId, DigimonList.BLACKGARURUMON, DigimonList.GARURUMON, DigimonList.GAOGAMON, DigimonList.VEEDRAMON, DigimonList.LEOMON); - - setDescriptionString(context, ownId, "Focus on MP and high weight.\nEvolves from Tsunomon."); - } - - private void addTsukaimon(RandomizationContext context) { - context.logLine(LogLevel.ALWAYS, "Adding Tsukaimon..."); - - GlobalKeepData keep = context.getGlobalKeepData(); - final short ownId = DigimonList.TSUKAIMON; - final short baseId = DigimonList.PATAMON; - - // Digimon Data - applyBaseData(context, ownId, baseId, (short) 102); - - // Raise Data - DigimonRaising raise = context.getGlobalKeepData().getRaiseData().get(ownId - 1); - raise.setSleepSchedule(7); - raise.setFavoriteFood(45); - raise.setTrainingType((byte) 3); - raise.setLikedAreas((short) 160); - raise.setDislikedAreas((short) 516); - raise.setGains(700, 500, 80, 40, 100, 80); - - // Evo Requirements - List requirements = new ArrayList<>(); - requirements.add(new Requirement(SuperGroup.QUOTA, (byte) 0, Operator.QUOTA, Comperator.QUOTA, Type.QUOTA, 2)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.HIGHEST, Type.SPEED, 0)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 2, Operator.AND, Comperator.GREATER_THAN, Type.WEIGHT, 15)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 3, Operator.AND, Comperator.EQUALS, Type.DIGIMON, DigimonList.TOKOMON)); - - keep.getEvoRequirements().get(ownId - 1).setRequirements(requirements); - - // Evo Paths - setEvolveFrom(keep, ownId, DigimonList.TOKOMON); - setEvolveTo(keep, ownId, DigimonList.DEVIMON, DigimonList.BLACKGATOMON, DigimonList.OGREMON, DigimonList.AIRDRAMON, DigimonList.KABUTERIMON); - - setDescriptionString(context, ownId, "Focus on Speed and high weight.\nEvolves from Tokomon."); - } - - private void addPsychemon(RandomizationContext context) { - context.logLine(LogLevel.ALWAYS, "Adding Psychemon..."); - - GlobalKeepData keep = context.getGlobalKeepData(); - final short ownId = DigimonList.PSYCHEMON; - final short baseId = DigimonList.GABUMON; - - // Digimon Data - applyBaseData(context, ownId, baseId, (short) 103); - - // Raise Data - DigimonRaising raise = context.getGlobalKeepData().getRaiseData().get(ownId - 1); - raise.setSleepSchedule(8); - raise.setFavoriteFood(39); - raise.setTrainingType((byte) 4); - raise.setLikedAreas((short) 160); - raise.setDislikedAreas((short) 516); - raise.setGains(300, 500, 130, 130, 40, 40); - - // Evo Requirements - List requirements = new ArrayList<>(); - requirements.add(new Requirement(SuperGroup.QUOTA, (byte) 0, Operator.QUOTA, Comperator.QUOTA, Type.QUOTA, 2)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.HIGHEST, Type.HP_DIV10, 0)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 2, Operator.AND, Comperator.GREATER_THAN, Type.WEIGHT, 13)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 3, Operator.AND, Comperator.EQUALS, Type.DIGIMON, DigimonList.WANYAMON)); - - keep.getEvoRequirements().get(ownId - 1).setRequirements(requirements); - - // Evo Paths - setEvolveFrom(keep, ownId, DigimonList.WANYAMON); - setEvolveTo(keep, ownId, DigimonList.GURURUMON, DigimonList.KYUBIMON, DigimonList.BAKEMON, DigimonList.TOGEMON, DigimonList.KUWAGAMON); - - setDescriptionString(context, ownId, "Focus on HP and high weight.\nEvolves from Wanyamon.\n\nDon't trust this false prophet."); - } - - private void addSnowAgumon(RandomizationContext context) { - context.logLine(LogLevel.ALWAYS, "Adding SnowAgumon..."); - - GlobalKeepData keep = context.getGlobalKeepData(); - final short ownId = DigimonList.SNOWAGUMON; - final short baseId = DigimonList.AGUMON; - - // Digimon Data - applyBaseData(context, ownId, baseId, (short) 104); - - // Raise Data - DigimonRaising raise = keep.getRaiseData().get(ownId - 1); - raise.setSleepSchedule(3); - raise.setFavoriteFood(39); - raise.setTrainingType((byte) 3); - raise.setLikedAreas((short) 272); - raise.setDislikedAreas((short) 640); - raise.setGains(600, 1000, 60, 40, 110, 50); - - // Evo Requirements - List requirements = new ArrayList<>(); - requirements.add(new Requirement(SuperGroup.QUOTA, (byte) 0, Operator.QUOTA, Comperator.QUOTA, Type.QUOTA, 2)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.HIGHEST, Type.DEFENSE, 0)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 2, Operator.AND, Comperator.LESS_THAN, Type.WEIGHT, 12)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 3, Operator.AND, Comperator.EQUALS, Type.DIGIMON, DigimonList.GIGIMON)); - - keep.getEvoRequirements().get(ownId - 1).setRequirements(requirements); - - // Evo Paths - setEvolveFrom(keep, ownId, DigimonList.GIGIMON); - setEvolveTo(keep, ownId, DigimonList.ICEDEVIMON, DigimonList.IKKAKUMON, DigimonList.GURURUMON, DigimonList.EXVEEMON, DigimonList.CENTARUMON); - - setDescriptionString(context, ownId, "Focus on Defense and low weight.\nEvolves from Gigimon."); - } - - private void addSolarmon(RandomizationContext context) { - context.logLine(LogLevel.ALWAYS, "Adding Solarmon..."); - - GlobalKeepData keep = context.getGlobalKeepData(); - final short baseId = DigimonList.HAGURUMON; - final short ownId = DigimonList.SOLARMON; - - // Digimon Data - applyBaseData(context, ownId, baseId, (short) 105); - - // Raise Data - DigimonRaising raise = keep.getRaiseData().get(ownId - 1); - raise.setSleepSchedule(4); - raise.setFavoriteFood(50); - raise.setTrainingType((byte) 5); - raise.setLikedAreas((short) 1056); - raise.setDislikedAreas((short) 24); - raise.setGains(400, 1000, 120, 50, 55, 55); - - // Evo Requirements - List requirements = new ArrayList<>(); - requirements.add(new Requirement(SuperGroup.QUOTA, (byte) 0, Operator.QUOTA, Comperator.QUOTA, Type.QUOTA, 2)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.HIGHEST, Type.OFFENSE, 0)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 2, Operator.AND, Comperator.GREATER_THAN, Type.WEIGHT, 15)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 3, Operator.AND, Comperator.EQUALS, Type.DIGIMON, DigimonList.MOTIMON)); - - keep.getEvoRequirements().get(ownId - 1).setRequirements(requirements); - - // Evo Paths - setEvolveFrom(keep, ownId, DigimonList.MOTIMON); - setEvolveTo(keep, ownId, DigimonList.GUARDROMON, DigimonList.GROWLMON_ORANGE, DigimonList.BIRDRAMON, DigimonList.VEGIEMON, DigimonList.GEREMON); - - setDescriptionString(context, ownId, "Focus on Offense and high weight.\nEvolves from Motimon."); - } - - private void addBlackGarurumon(RandomizationContext context) { - context.logLine(LogLevel.ALWAYS, "Adding BlackGarurumon..."); - - GlobalKeepData keep = context.getGlobalKeepData(); - final short ownId = DigimonList.BLACKGARURUMON; - final short baseId = DigimonList.GARURUMON; - - // Digimon Data - applyBaseData(context, ownId, baseId, (short) 100); - - // Raise Data - DigimonRaising raise = keep.getRaiseData().get(ownId - 1); - raise.setSleepSchedule(5); - raise.setFavoriteFood(40); - raise.setTrainingType((byte) 1); - raise.setLikedAreas((short) 320); - raise.setDislikedAreas((short) 40); - raise.setGains(2100, 1200, 140, 200, 220, 160); - - // Evo Requirements - List requirements = new ArrayList<>(); - requirements.add(new Requirement(SuperGroup.QUOTA, (byte) 0, Operator.QUOTA, Comperator.QUOTA, Type.QUOTA, 3)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.HP, 1000)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.SPEED, 85)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.DEFENSE, 60)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 2, Operator.AND, Comperator.LESS_THAN, Type.WEIGHT, 25)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 3, Operator.AND, Comperator.LESS_THAN, Type.CARE, 4)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 4, Operator.AND, Comperator.GREATER_THAN, Type.HAPPINESS, 70)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 5, Operator.AND, Comperator.GREATER_THAN, Type.TECHS, 25)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 6, Operator.AND, Comperator.GREATER_THAN, Type.DECODE_LEVEL, 10)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 7, Operator.AND, Comperator.EQUALS, Type.DIGIMON, DigimonList.BLACKGABUMON)); - - keep.getEvoRequirements().get(ownId - 1).setRequirements(requirements); - - // Evo Paths - setEvolveFrom(keep, ownId, DigimonList.BLACKGABUMON, DigimonList.GABUMON, DigimonList.SALAMON, DigimonList.RENAMON); - setEvolveTo(keep, ownId, DigimonList.BLACKWEREGARURUMON, DigimonList.BLUEMERAMON, DigimonList.WARUMONZAEMON); - - setDescriptionString(context, ownId, "Requires HP, DEF and SPD.\nDon't get too heavy. Being happy helps.\nEvolves easier from BlackGabumon."); - } - - private void addGururumon(RandomizationContext context) { - context.logLine(LogLevel.ALWAYS, "Adding Gururumon..."); - - GlobalKeepData keep = context.getGlobalKeepData(); - final short ownId = DigimonList.GURURUMON; - final short baseId = DigimonList.GARURUMON; - - // Digimon Data - applyBaseData(context, ownId, baseId, (short) 101); - - // Raise Data - DigimonRaising raise = keep.getRaiseData().get(ownId - 1); - raise.setSleepSchedule(6); - raise.setFavoriteFood(42); - raise.setTrainingType((byte) 5); - raise.setLikedAreas((short) 320); - raise.setDislikedAreas((short) 40); - raise.setGains(2400, 1200, 140, 210, 130, 210); - - // Evo Requirements - List requirements = new ArrayList<>(); - requirements.add(new Requirement(SuperGroup.QUOTA, (byte) 0, Operator.QUOTA, Comperator.QUOTA, Type.QUOTA, 3)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.HP, 900)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.OFFENSE, 65)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.DEFENSE, 110)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.SPEED, 65)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 2, Operator.AND, Comperator.LESS_THAN, Type.WEIGHT, 25)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 3, Operator.AND, Comperator.GREATER_THAN, Type.CARE, 2)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 4, Operator.AND, Comperator.LESS_THAN, Type.DISCIPLINE, 60)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 5, Operator.AND, Comperator.GREATER_THAN, Type.TECHS, 20)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 6, Operator.AND, Comperator.GREATER_THAN, Type.DECODE_LEVEL, 9)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 7, Operator.AND, Comperator.EQUALS, Type.DIGIMON, DigimonList.PSYCHEMON)); - - keep.getEvoRequirements().get(ownId - 1).setRequirements(requirements); - - // Evo Paths - setEvolveFrom(keep, ownId, DigimonList.PSYCHEMON, DigimonList.SNOWAGUMON, DigimonList.VEEMON, DigimonList.GAOMON); - setEvolveTo(keep, ownId, DigimonList.WEREGARURUMON, DigimonList.ICELEOMON, DigimonList.TAOMON); - - setDescriptionString(context, ownId, "Requires high Defense. Don't get too heavy.\nDoesn't respect authority.\nEvolves easier from Psychemon."); - } - - private void addOrangeGrowlmon(RandomizationContext context) { - context.logLine(LogLevel.ALWAYS, "Adding OrangeGrowlmon..."); - - GlobalKeepData keep = context.getGlobalKeepData(); - final short ownId = DigimonList.GROWLMON_ORANGE; - final short baseId = DigimonList.GROWLMON; - - // Digimon Data - applyBaseData(context, ownId, baseId, (short) 102); - - // Raise Data - DigimonRaising raise = keep.getRaiseData().get(ownId - 1); - raise.setSleepSchedule(5); - raise.setFavoriteFood(40); - raise.setTrainingType((byte) 4); - raise.setLikedAreas((short) 4224); - raise.setDislikedAreas((short) 272); - raise.setGains(1800, 2000, 160, 150, 220, 140); - - // Evo Requirements - List requirements = new ArrayList<>(); - requirements.add(new Requirement(SuperGroup.QUOTA, (byte) 0, Operator.QUOTA, Comperator.QUOTA, Type.QUOTA, 3)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.DEFENSE, 110)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.SPEED, 150)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 2, Operator.AND, Comperator.GREATER_THAN, Type.WEIGHT, 28)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 3, Operator.AND, Comperator.LESS_THAN, Type.CARE, 4)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 4, Operator.AND, Comperator.GREATER_THAN, Type.BATTLES, 10)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 5, Operator.AND, Comperator.GREATER_THAN, Type.TECHS, 18)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 6, Operator.AND, Comperator.GREATER_THAN, Type.DECODE_LEVEL, 12)); - - keep.getEvoRequirements().get(ownId - 1).setRequirements(requirements); - - // Evo Paths - setEvolveFrom(keep, ownId, DigimonList.SOLARMON, DigimonList.GOBURIMON, DigimonList.LALAMON, DigimonList.PATAMON); - setEvolveTo(keep, ownId, DigimonList.WARGROWLMON_ORANGE, DigimonList.RIZEGREYMON, DigimonList.METALGREYMON); - - setDescriptionString(context, ownId, "Requires DEF and SPD. Likes to fight."); - } - - private void addBlackGrowlmon(RandomizationContext context) { - context.logLine(LogLevel.ALWAYS, "Adding BlackGrowlmon..."); - - GlobalKeepData keep = context.getGlobalKeepData(); - final short ownId = DigimonList.BLACKGROWLMON; - final short baseId = DigimonList.GROWLMON; - - // Digimon Data - applyBaseData(context, ownId, baseId, (short) 103); - - // Raise Data - DigimonRaising raise = keep.getRaiseData().get(ownId - 1); - raise.setSleepSchedule(5); - raise.setFavoriteFood(40); - raise.setTrainingType((byte) 5); - raise.setLikedAreas((short) 4224); - raise.setDislikedAreas((short) 272); - raise.setGains(2000, 1900, 210, 180, 140, 130); - - // Evo Requirements - List requirements = new ArrayList<>(); - requirements.add(new Requirement(SuperGroup.QUOTA, (byte) 0, Operator.QUOTA, Comperator.QUOTA, Type.QUOTA, 3)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.HP, 800)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.OFFENSE, 110)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.DEFENSE, 110)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 2, Operator.AND, Comperator.GREATER_THAN, Type.WEIGHT, 28)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 3, Operator.AND, Comperator.LESS_THAN, Type.CARE, 5)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 4, Operator.AND, Comperator.GREATER_THAN, Type.BATTLES, 15)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 5, Operator.AND, Comperator.GREATER_THAN, Type.TECHS, 19)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 6, Operator.AND, Comperator.GREATER_THAN, Type.DECODE_LEVEL, 13)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 7, Operator.AND, Comperator.EQUALS, Type.DIGIMON, DigimonList.BLACKAGUMON)); - - keep.getEvoRequirements().get(ownId - 1).setRequirements(requirements); - - // Evo Paths - setEvolveFrom(keep, ownId, DigimonList.BLACKAGUMON, DigimonList.AGUMON, DigimonList.BETAMON, DigimonList.GUILMON); - setEvolveTo(keep, ownId, DigimonList.BLACK_WARGROWLMON, DigimonList.METALGREYMON_VIRUS, DigimonList.MEGADRAMON); - - setDescriptionString(context, ownId, "Requires HP, Offense and Defense.\nLikes to fight.\nEvolves easier from BlackAgumon."); - } - - private void addIceDevimon(RandomizationContext context) { - context.logLine(LogLevel.ALWAYS, "Adding IceDevimon..."); - - GlobalKeepData keep = context.getGlobalKeepData(); - final short ownId = DigimonList.ICEDEVIMON; - final short baseId = DigimonList.DEVIMON; - - // Digimon Data - applyBaseData(context, ownId, baseId, (short) 104); - - // Raise Data - DigimonRaising raise = keep.getRaiseData().get(ownId - 1); - raise.setSleepSchedule(4); - raise.setFavoriteFood(49); - raise.setTrainingType((byte) 4); - raise.setLikedAreas((short) 272); - raise.setDislikedAreas((short) 640); - raise.setGains(2200, 1200, 150, 200, 2200, 140); - - // Evo Requirements - List requirements = new ArrayList<>(); - requirements.add(new Requirement(SuperGroup.QUOTA, (byte) 0, Operator.QUOTA, Comperator.QUOTA, Type.QUOTA, 3)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.MP, 1150)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.SPEED, 85)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.BRAINS, 85)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 2, Operator.AND, Comperator.LESS_THAN, Type.WEIGHT, 30)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 3, Operator.AND, Comperator.GREATER_THAN, Type.CARE, 2)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 4, Operator.AND, Comperator.GREATER_THAN, Type.DISCIPLINE, 70)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 5, Operator.AND, Comperator.GREATER_THAN, Type.TECHS, 25)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 6, Operator.AND, Comperator.GREATER_THAN, Type.DECODE_LEVEL, 12)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 7, Operator.AND, Comperator.EQUALS, Type.DIGIMON, DigimonList.SNOWAGUMON)); - - keep.getEvoRequirements().get(ownId - 1).setRequirements(requirements); - - // Evo Paths - setEvolveFrom(keep, ownId, DigimonList.SNOWAGUMON, DigimonList.DEMIDEVIMON, DigimonList.GOMAMON, DigimonList.KAMEMON); - setEvolveTo(keep, ownId, DigimonList.ZUDOMON, DigimonList.LADYDEVIMON, DigimonList.DIGITAMAMON); - - setDescriptionString(context, ownId, "Requires MP, Speed and Brains.\nDon't get too heavy. Being disciplined helps.\nEvolves easier from SnowAgumon."); - } - - private void addGeremon(RandomizationContext context) { - context.logLine(LogLevel.ALWAYS, "Adding Geremon..."); - - GlobalKeepData keep = context.getGlobalKeepData(); - final short ownId = DigimonList.GEREMON; - final short baseId = DigimonList.NUMEMON; - - // Digimon Data - applyBaseData(context, ownId, baseId, (short) 105); - - // Raise Data - DigimonRaising raise = keep.getRaiseData().get(ownId - 1); - raise.setSleepSchedule(7); - raise.setFavoriteFood(47); - raise.setTrainingType((byte) 1); - raise.setLikedAreas((short) 96); - raise.setDislikedAreas((short) 2304); - raise.setGains(1300, 1600, 180, 200, 150, 130); - - // Evo Requirements - List requirements = new ArrayList<>(); - requirements.add(new Requirement(SuperGroup.QUOTA, (byte) 0, Operator.QUOTA, Comperator.QUOTA, Type.QUOTA, 3)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.HP, 900)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.OFFENSE, 65)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.DEFENSE, 110)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.SPEED, 65)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 2, Operator.AND, Comperator.LESS_THAN, Type.WEIGHT, 25)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 3, Operator.AND, Comperator.GREATER_THAN, Type.CARE, 2)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 4, Operator.AND, Comperator.LESS_THAN, Type.DISCIPLINE, 80)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 5, Operator.AND, Comperator.GREATER_THAN, Type.TECHS, 20)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 6, Operator.AND, Comperator.GREATER_THAN, Type.DECODE_LEVEL, 9)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 7, Operator.AND, Comperator.EQUALS, Type.DIGIMON, DigimonList.PSYCHEMON)); - - keep.getEvoRequirements().get(ownId - 1).setRequirements(requirements); - - // Evo Paths - setEvolveFrom(keep, ownId, DigimonList.SOLARMON, DigimonList.CHUUMON); - setEvolveTo(keep, ownId, DigimonList.MONZAEMON, DigimonList.ETEMON); - - setDescriptionString(context, ownId, "Requires high Defense. Don't get too heavy.\nYou probably want to avoid this one.\nEvolves easier from Psychemon."); - } - - private void addMetalGreymonVirus(RandomizationContext context) { - context.logLine(LogLevel.ALWAYS, "Adding MetalGreymon (Virus)..."); - - GlobalKeepData keep = context.getGlobalKeepData(); - final short ownId = DigimonList.METALGREYMON_VIRUS; - final short baseId = DigimonList.METALGREYMON; - - // Digimon Data - applyBaseData(context, ownId, baseId, (short) 100); - - // Raise Data - DigimonRaising raise = keep.getRaiseData().get(ownId - 1); - raise.setSleepSchedule(6); - raise.setFavoriteFood(41); - raise.setTrainingType((byte) 5); - raise.setLikedAreas((short) 4224); - raise.setDislikedAreas((short) 2064); - raise.setGains(3000, 4200, 380, 340, 310, 350); - - // Evo Requirements - List requirements = new ArrayList<>(); - requirements.add(new Requirement(SuperGroup.QUOTA, (byte) 0, Operator.QUOTA, Comperator.QUOTA, Type.QUOTA, 5)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.HP, 2000)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.MP, 3000)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 2, Operator.AND, Comperator.GREATER_THAN, Type.OFFENSE, 350)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 2, Operator.AND, Comperator.GREATER_THAN, Type.DEFENSE, 200)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 3, Operator.AND, Comperator.GREATER_THAN, Type.BRAINS, 270)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 4, Operator.AND, Comperator.GREATER_THAN, Type.WEIGHT, 45)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 5, Operator.AND, Comperator.GREATER_THAN, Type.CARE, 3)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 6, Operator.AND, Comperator.GREATER_THAN, Type.DISCIPLINE, 75)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 6, Operator.AND, Comperator.GREATER_THAN, Type.BATTLES, 25)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 7, Operator.AND, Comperator.GREATER_THAN, Type.TECHS, 32)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 8, Operator.AND, Comperator.GREATER_THAN, Type.DECODE_LEVEL, 15)); - - keep.getEvoRequirements().get(ownId - 1).setRequirements(requirements); - - // Evo Paths - setEvolveFrom(keep, ownId, DigimonList.BLACKGROWLMON, DigimonList.GREYMON); - setEvolveTo(keep, ownId, DigimonList.BLACKWARGREYMON, DigimonList.MACHINEDRAMON); - - setDescriptionString(context, ownId, "Requires high overall stats.\nDon't save on food.\nBeing disciplined helps."); - } - - private void addWarGrowlmonBlack(RandomizationContext context) { - context.logLine(LogLevel.ALWAYS, "Adding BlackWarGrowlmon..."); - - GlobalKeepData keep = context.getGlobalKeepData(); - final short ownId = DigimonList.BLACK_WARGROWLMON; - final short baseId = DigimonList.WARGROWLMON; - - // Digimon Data - applyBaseData(context, ownId, baseId, (short) 101); - - // Raise Data - DigimonRaising raise = keep.getRaiseData().get(ownId - 1); - raise.setSleepSchedule(5); - raise.setFavoriteFood(41); - raise.setTrainingType((byte) 4); - raise.setLikedAreas((short) 4224); - raise.setDislikedAreas((short) 272); - raise.setGains(3000, 2800, 340, 400, 460, 320); - - // Evo Requirements - List requirements = new ArrayList<>(); - requirements.add(new Requirement(SuperGroup.QUOTA, (byte) 0, Operator.QUOTA, Comperator.QUOTA, Type.QUOTA, 5)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.HP, 3000)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 2, Operator.AND, Comperator.GREATER_THAN, Type.DEFENSE, 360)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 3, Operator.AND, Comperator.GREATER_THAN, Type.SPEED, 230)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 3, Operator.AND, Comperator.GREATER_THAN, Type.BRAINS, 290)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 4, Operator.AND, Comperator.GREATER_THAN, Type.WEIGHT, 50)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 5, Operator.AND, Comperator.LESS_THAN, Type.CARE, 10)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 6, Operator.AND, Comperator.GREATER_THAN, Type.BATTLES, 30)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 7, Operator.AND, Comperator.GREATER_THAN, Type.TECHS, 28)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 8, Operator.AND, Comperator.GREATER_THAN, Type.DECODE_LEVEL, 13)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 9, Operator.AND, Comperator.EQUALS, Type.DIGIMON, DigimonList.BLACKGROWLMON)); - - keep.getEvoRequirements().get(ownId - 1).setRequirements(requirements); - - // Evo Paths - setEvolveFrom(keep, ownId, DigimonList.BLACKGROWLMON, DigimonList.GROWLMON); - setEvolveTo(keep, ownId, DigimonList.CHAOSGALLANTMON, DigimonList.DARKDRAMON); - - setDescriptionString(context, ownId, "Requires HP, Defense and Brains.\nKeep some food around. Likes to fight.\nEvolves easier from BlackGrowlmon."); - } - - private void addWarGrowlmonOrange(RandomizationContext context) { - context.logLine(LogLevel.ALWAYS, "Adding OrangeWarGrowlmon..."); - - GlobalKeepData keep = context.getGlobalKeepData(); - final short ownId = DigimonList.WARGROWLMON_ORANGE; - final short baseId = DigimonList.WARGROWLMON; - - // Digimon Data - applyBaseData(context, ownId, baseId, (short) 102); - - // Raise Data - DigimonRaising raise = keep.getRaiseData().get(ownId - 1); - raise.setSleepSchedule(5); - raise.setFavoriteFood(41); - raise.setTrainingType((byte) 1); - raise.setLikedAreas((short) 4224); - raise.setDislikedAreas((short) 272); - raise.setGains(4000, 2500, 250, 410, 310, 480); - - // Evo Requirements - List requirements = new ArrayList<>(); - requirements.add(new Requirement(SuperGroup.QUOTA, (byte) 0, Operator.QUOTA, Comperator.QUOTA, Type.QUOTA, 5)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.HP, 2700)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 2, Operator.AND, Comperator.GREATER_THAN, Type.OFFENSE, 210)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 2, Operator.AND, Comperator.GREATER_THAN, Type.DEFENSE, 360)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 3, Operator.AND, Comperator.GREATER_THAN, Type.BRAINS, 370)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 4, Operator.AND, Comperator.GREATER_THAN, Type.WEIGHT, 45)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 5, Operator.AND, Comperator.LESS_THAN, Type.CARE, 10)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 6, Operator.AND, Comperator.GREATER_THAN, Type.BATTLES, 30)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 7, Operator.AND, Comperator.GREATER_THAN, Type.TECHS, 30)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 8, Operator.AND, Comperator.GREATER_THAN, Type.DECODE_LEVEL, 13)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 9, Operator.AND, Comperator.EQUALS, Type.DIGIMON, DigimonList.GROWLMON_ORANGE)); - - keep.getEvoRequirements().get(ownId - 1).setRequirements(requirements); - - // Evo Paths - setEvolveFrom(keep, ownId, DigimonList.GROWLMON_ORANGE, DigimonList.TYRANNOMON); - setEvolveTo(keep, ownId, DigimonList.RUSTTYRANNOMON, DigimonList.PRINCEMAMEMON); - - setDescriptionString(context, ownId, "Requires HP, Defense and Brains.\nKeep some food around. Likes to fight.\nEvolves easier from OrangeGrowlmon."); - } - - private void addBlackWereGarurumon(RandomizationContext context) { - context.logLine(LogLevel.ALWAYS, "Adding BlackWereGarurumon..."); - - GlobalKeepData keep = context.getGlobalKeepData(); - final short ownId = DigimonList.BLACKWEREGARURUMON; - final short baseId = DigimonList.WEREGARURUMON; - - // Digimon Data - applyBaseData(context, ownId, baseId, (short) 103); - - // Raise Data - DigimonRaising raise = keep.getRaiseData().get(ownId - 1); - raise.setSleepSchedule(5); - raise.setFavoriteFood(53); - raise.setTrainingType((byte) 1); - raise.setLikedAreas((short) 576); - raise.setDislikedAreas((short) 4112); - raise.setGains(3200, 2600, 400, 330, 440, 350); - - // Evo Requirements - List requirements = new ArrayList<>(); - requirements.add(new Requirement(SuperGroup.QUOTA, (byte) 0, Operator.QUOTA, Comperator.QUOTA, Type.QUOTA, 5)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.HP, 2000)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.MP, 2000)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 2, Operator.AND, Comperator.GREATER_THAN, Type.OFFENSE, 310)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 3, Operator.AND, Comperator.GREATER_THAN, Type.SPEED, 350)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 4, Operator.AND, Comperator.LESS_THAN, Type.WEIGHT, 40)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 5, Operator.AND, Comperator.LESS_THAN, Type.CARE, 15)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 6, Operator.AND, Comperator.GREATER_THAN, Type.HAPPINESS, 80)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 6, Operator.AND, Comperator.GREATER_THAN, Type.BATTLES, 25)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 7, Operator.AND, Comperator.GREATER_THAN, Type.TECHS, 35)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 8, Operator.AND, Comperator.GREATER_THAN, Type.DECODE_LEVEL, 14)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 9, Operator.AND, Comperator.EQUALS, Type.DIGIMON, DigimonList.BLACKGARURUMON)); - - keep.getEvoRequirements().get(ownId - 1).setRequirements(requirements); - - // Evo Paths - setEvolveFrom(keep, ownId, DigimonList.BLACKGARURUMON, DigimonList.GARURUMON, DigimonList.BLACKGATOMON); - setEvolveTo(keep, ownId, DigimonList.BLACKMETALGARURUMON, DigimonList.PIEDMON); - - setDescriptionString(context, ownId, "Strong, fast and nimble fighter.\nEvolves easier from BlackGarurumon."); - } - - private void addBlackWarGreymon(RandomizationContext context) { - context.logLine(LogLevel.ALWAYS, "Adding BlackWarGreymon..."); - - GlobalKeepData keep = context.getGlobalKeepData(); - final short ownId = DigimonList.BLACKWARGREYMON; - final short baseId = DigimonList.WARGREYMON; - - // Digimon Data - applyBaseData(context, ownId, baseId, (short) 100); - - // Raise Data - DigimonRaising raise = keep.getRaiseData().get(ownId - 1); - raise.setSleepSchedule(5); - raise.setFavoriteFood(57); - raise.setTrainingType((byte) 4); - raise.setLikedAreas((short) 40); - raise.setDislikedAreas((short) 1152); - raise.setGains(5800, 6700, 770, 460, 660, 870); - - // Evo Requirements - List requirements = new ArrayList<>(); - requirements.add(new Requirement(SuperGroup.QUOTA, (byte) 0, Operator.QUOTA, Comperator.QUOTA, Type.QUOTA, 6)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.HP, 5500)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 2, Operator.AND, Comperator.GREATER_THAN, Type.OFFENSE, 650)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 3, Operator.AND, Comperator.GREATER_THAN, Type.DEFENSE, 550)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 4, Operator.AND, Comperator.GREATER_THAN, Type.BRAINS, 420)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 5, Operator.AND, Comperator.GREATER_THAN, Type.WEIGHT, 55)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 6, Operator.AND, Comperator.LESS_THAN, Type.CARE, 10)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 7, Operator.AND, Comperator.GREATER_THAN, Type.DISCIPLINE, 80)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 8, Operator.AND, Comperator.GREATER_THAN, Type.TECHS, 40)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 9, Operator.AND, Comperator.GREATER_THAN, Type.DECODE_LEVEL, 16)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 10, Operator.AND, Comperator.EQUALS, Type.DIGIMON, DigimonList.METALGREYMON_VIRUS)); - - keep.getEvoRequirements().get(ownId - 1).setRequirements(requirements); - - // Evo Paths - setEvolveFrom(keep, ownId, DigimonList.METALGREYMON_VIRUS, DigimonList.METALGREYMON); - - setDescriptionString(context, ownId, "A perfect balance of offensive.\nand defense capabilities.\nRequires disciplined training and good food.\nEvolves from MetalGreymon."); - } - - private void addChaosDukemon(RandomizationContext context) { - context.logLine(LogLevel.ALWAYS, "Adding ChaosDukemon..."); - - GlobalKeepData keep = context.getGlobalKeepData(); - final short ownId = DigimonList.CHAOSGALLANTMON; - final short baseId = DigimonList.GALLANTMON; - - // Digimon Data - applyBaseData(context, ownId, baseId, (short) 101); - - // Raise Data - DigimonRaising raise = keep.getRaiseData().get(ownId - 1); - raise.setSleepSchedule(4); - raise.setFavoriteFood(60); - raise.setTrainingType((byte) 0); - raise.setLikedAreas((short) 2056); - raise.setDislikedAreas((short) 1056); - raise.setGains(6300, 6500, 750, 600, 600, 620); - - // Evo Requirements - List requirements = new ArrayList<>(); - requirements.add(new Requirement(SuperGroup.QUOTA, (byte) 0, Operator.QUOTA, Comperator.QUOTA, Type.QUOTA, 8)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.HP, 4000)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 2, Operator.AND, Comperator.GREATER_THAN, Type.MP, 3000)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 3, Operator.AND, Comperator.GREATER_THAN, Type.OFFENSE, 600)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 4, Operator.AND, Comperator.GREATER_THAN, Type.DEFENSE, 600)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 5, Operator.AND, Comperator.GREATER_THAN, Type.SPEED, 700)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 6, Operator.AND, Comperator.GREATER_THAN, Type.BRAINS, 500)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 7, Operator.AND, Comperator.GREATER_THAN, Type.WEIGHT, 60)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 8, Operator.AND, Comperator.LESS_THAN, Type.CARE, 10)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 9, Operator.AND, Comperator.GREATER_THAN, Type.HAPPINESS, 80)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 10, Operator.AND, Comperator.GREATER_THAN, Type.TECHS, 42)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 11, Operator.AND, Comperator.GREATER_THAN, Type.DECODE_LEVEL, 17)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 12, Operator.AND, Comperator.EQUALS, Type.DIGIMON, DigimonList.BLACK_WARGROWLMON)); - - keep.getEvoRequirements().get(ownId - 1).setRequirements(requirements); - - // Evo Paths - setEvolveFrom(keep, ownId, DigimonList.BLACK_WARGROWLMON, DigimonList.WARGROWLMON); - - setDescriptionString(context, ownId, "Requires high overall stats. Likes good food.\nEvolves easier from BlackWarGrowlmon."); - } - - private void addBlackMetalGarurumon(RandomizationContext context) { - context.logLine(LogLevel.ALWAYS, "Adding BlackMetalGarurumon..."); - - GlobalKeepData keep = context.getGlobalKeepData(); - final short ownId = DigimonList.BLACKMETALGARURUMON; - final short baseId = DigimonList.METALGARURUMON; - - // Digimon Data - applyBaseData(context, ownId, baseId, (short) 102); - - // Raise Data - DigimonRaising raise = keep.getRaiseData().get(ownId - 1); - raise.setSleepSchedule(4); - raise.setFavoriteFood(59); - raise.setTrainingType((byte) 0); - raise.setLikedAreas((short) 320); - raise.setDislikedAreas((short) 136); - raise.setGains(9300, 4700, 520, 690, 750, 450); - - // Evo Requirements - List requirements = new ArrayList<>(); - requirements.add(new Requirement(SuperGroup.QUOTA, (byte) 0, Operator.QUOTA, Comperator.QUOTA, Type.QUOTA, 7)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 1, Operator.AND, Comperator.GREATER_THAN, Type.MP, 4500)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 2, Operator.AND, Comperator.GREATER_THAN, Type.OFFENSE, 500)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 3, Operator.AND, Comperator.GREATER_THAN, Type.DEFENSE, 700)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 4, Operator.AND, Comperator.GREATER_THAN, Type.SPEED, 700)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 5, Operator.AND, Comperator.GREATER_THAN, Type.BRAINS, 400)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 6, Operator.AND, Comperator.LESS_THAN, Type.WEIGHT, 50)); - requirements.add(new Requirement(SuperGroup.NORMAL, (byte) 7, Operator.AND, Comperator.LESS_THAN, Type.CARE, 15)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 8, Operator.AND, Comperator.GREATER_THAN, Type.HAPPINESS, 80)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 9, Operator.AND, Comperator.GREATER_THAN, Type.DISCIPLINE, 80)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 10, Operator.AND, Comperator.GREATER_THAN, Type.TECHS, 44)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 11, Operator.AND, Comperator.GREATER_THAN, Type.DECODE_LEVEL, 17)); - requirements.add(new Requirement(SuperGroup.BONUS, (byte) 12, Operator.AND, Comperator.EQUALS, Type.DIGIMON, DigimonList.BLACKWEREGARURUMON)); - - keep.getEvoRequirements().get(ownId - 1).setRequirements(requirements); - - // Evo Paths - setEvolveFrom(keep, ownId, DigimonList.BLACKWEREGARURUMON, DigimonList.WEREGARURUMON); - - setDescriptionString(context, ownId, "Very fast and defensive.\nKeep a disciplined diet, but don't get depressed.\nEvolves easier from BlackWereGarurumon."); - } - - private void setDescriptionString(RandomizationContext context, short ownId, String string) { - context.getLanguageKeep().getDigimonDescription().getEntryById(ownId).ifPresent(a -> a.setString(string)); - } - - @SuppressWarnings("unused") - private static void registerSprite(RandomizationContext context, short id, BufferedImage image) { - Optional images = context.getFile("part0/arcv/Keep/GlobalKeepRes.res").map(AbstractKCAP.class::cast).map(a -> (GMIPKCAP) a.get(8)); - - if(images.isEmpty()) - return; - - GMIOPayload gmio = new GMIOPayload(null); - gmio.setImage(image); - gmio.setFormat(PixelFormat.RGB5551); - gmio.setMinFilter(TextureFiltering.LINEAR); - gmio.setMagFilter(TextureFiltering.LINEAR); - gmio.setUnknown(UnknownEnum.NORMAL); - gmio.setUVHeightAbsolute(16); - gmio.setUVWidthAbsolute(68); - gmio.setWrapS(TextureWrap.CLAMP_TO_EDGE); - gmio.setWrapT(TextureWrap.CLAMP_TO_EDGE); - - images.get().add(gmio); - - for(int offset : SPRITE_TABLES) { - context.addASM(String.format(".org 0x%X", offset + id * 2)); - context.addASM(String.format(".halfword %d", 0x145 + images.get().getEntryCount() - 1)); - } - } - - private static final int[] SPRITE_TABLES = { 0x4A4330, 0x4A4E00, 0x4A527C, 0x4A6E00, 0x4A9AB0, 0x4AA564, 0x4AAFBC, 0x4AB678, 0x4ABD40, 0x4AC510, 0x4ACA90, - 0x4AE12C, 0x4AE828, 0x4AF108, 0x4AFE08 }; - - private static void applyBaseData(RandomizationContext context, short self, short base, short evoListPos) { - Digimon baseData = context.getGlobalKeepData().getDigimonData().get(base - 1); - Digimon data = context.getGlobalKeepData().getDigimonData().get(self - 1); - - data.setEvoListPos(evoListPos); - data.setInitialY(baseData.getInitialY()); - data.setInitialZ(baseData.getInitialZ()); - data.setMinY(baseData.getMinY()); - data.setMinZ(baseData.getMinZ()); - data.setMaxY(baseData.getMaxY()); - data.setMaxZ(baseData.getMaxZ()); - data.setInitialRotation(baseData.getInitialRotation()); - data.setDigiviceScale(baseData.getDigiviceScale()); - data.setUnk7(baseData.getUnk7()); - data.setUnk8(baseData.getUnk8()); - data.setUnk11(baseData.getUnk11()); - data.setUnk38((short) (data.getUnk38() | 65)); - - Optional baseDigi = context.getDigimon(base, true); - Optional modDigi = context.getDigimon(self); - - if(baseDigi.isEmpty() || modDigi.isEmpty()) - return; - - if(modDigi.get().getAnim5().isEmpty()) - modDigi.ifPresent(b -> b.setAnim5(baseDigi.map(a -> a.getAnim5().orElse(null)))); - - if(modDigi.get().getAccessoryData().isEmpty()) - modDigi.ifPresent(b -> b.setAccessoryData(baseDigi.map(PartnerDigimon::getAccessoryData).orElse(Collections.emptyList()))); - } - - private static void setEvolveFrom(GlobalKeepData keep, short self, short... sources) { - DigimonRaising data = keep.getRaiseData().get(self - 1); - - for (short source : sources) { - data.addEvolveFrom(source); - keep.getRaiseData().get(source - 1).addEvolveTo(self); - } - } - - private static void setEvolveTo(GlobalKeepData keep, short self, short... targets) { - DigimonRaising data = keep.getRaiseData().get(self - 1); - - for (short target : targets) { - data.addEvolveTo(target); - keep.getRaiseData().get(target - 1).addEvolveFrom(self); - } - } - - private void patchMovementSpeed(RandomizationContext context) { - context.logLine(LogLevel.ALWAYS, "Patching running speed..."); - - float newRunSpeed = 50f * 1.5f; - float newWalkSpeed = 21f; - float newEnemySpeed = 57.5f * 1.5f; - - context.addASM(".org 0x44B8B8"); - context.addASM(String.format(Locale.US, ".float %5.3f", newRunSpeed)); - context.addASM(String.format(Locale.US, ".float %5.3f", newWalkSpeed)); - - context.addASM(".org 0x2FDCE8"); - context.addASM(String.format(Locale.US, ".float %5.3f", newEnemySpeed)); - } - - private void disable90FBattles(RandomizationContext context) { - context.logLine(LogLevel.ALWAYS, "Patching out 90F battle..."); - - context.getFile("part0/arcv/map/are90.res").ifPresent(a -> { - byte[] data = ((GenericPayload) ((AbstractKCAP) a).get(0)).getData(); - data[0x30D8] = 0x7D; // JZ -> J - data[0x30D9] = 0x60; // 101 -> 96 - }); - } - - private void patchStartMPDisc(RandomizationContext context) { - context.logLine(LogLevel.ALWAYS, "Patching starting MP Disc..."); - - context.addASM(".org 0x27AD7C"); - context.addASM("MOV R0, #5"); - } - - private void patchBrainsChance(RandomizationContext context) { - context.logLine(LogLevel.ALWAYS, "Patching Brains learning chance..."); - - context.addASM(".org 0x14B820"); - context.addASM(String.format(Locale.US, ".float %5.3f", 0.002 * Math.max(1D, patchBrainsChanceFactor.get()))); - } - - private void patchViewDistance(RandomizationContext context) { - context.logLine(LogLevel.ALWAYS, "Patching view distance..."); - - context.addASM(".org 0x4E5118"); - context.addASM(".float 1000.0"); - context.addASM(".float 1000.0"); - context.addASM(".org 0x44CC48"); - context.addASM(".float 1000.0"); - context.addASM(".float 1000.0"); - context.addASM(".org 0x1F9F74"); - context.addASM(".float 1000.0"); - context.addASM(".float 1000.0"); - context.addASM(".org 0x2C56B8"); - context.addASM("NOP"); - context.addASM(".org 0x2C56C4"); - context.addASM("NOP"); - } - - @Override - public Map serialize() { - Map map = new HashMap<>(); - - map.put("patchViewDistance", patchViewDistance.get()); - map.put("patchBrainsChance", patchBrainsChance.get()); - map.put("patchBrainsChanceFactor", patchBrainsChanceFactor.get()); - map.put("patchStartMPDisc", patchStartMPDisc.get()); - map.put("patchDisable90FBattles", patchDisable90FBattles.get()); - map.put("patchMovementSpeed", patchMovementSpeed.get()); - map.put("patchAddRecolorDigimon", patchAddRecolorDigimon.get()); - map.put("patchListOrder", patchListOrder.get()); - - return map; - } - - @Override - public void load(YamlMapping map) { - if (map == null) - return; - - this.patchViewDistance.set(Boolean.parseBoolean(map.string("patchViewDistance"))); - this.patchBrainsChance.set(Boolean.parseBoolean(map.string("patchBrainsChance"))); - this.patchBrainsChanceFactor.set(map.doubleNumber("patchBrainsChanceFactor")); - this.patchStartMPDisc.set(Boolean.parseBoolean(map.string("patchStartMPDisc"))); - this.patchDisable90FBattles.set(Boolean.parseBoolean(map.string("patchDisable90FBattles"))); - this.patchMovementSpeed.set(Boolean.parseBoolean(map.string("patchMovementSpeed"))); - this.patchAddRecolorDigimon.set(Boolean.parseBoolean(map.string("patchAddRecolorDigimon"))); - this.patchListOrder.set(Boolean.parseBoolean(map.string("patchListOrder"))); - } - -} diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/PlayerSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/PlayerSettings.java deleted file mode 100644 index 9bd8982..0000000 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/PlayerSettings.java +++ /dev/null @@ -1,151 +0,0 @@ -package net.digimonworld.decode.randomizer.settings; - -import java.util.Arrays; -import java.util.EnumMap; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Random; -import java.util.stream.Collectors; - -import org.controlsfx.control.CheckListView; - -import com.amihaiemil.eoyaml.YamlMapping; - -import net.digimonworld.decodetools.data.keepdata.GlobalKeepData; -import net.digimonworld.decodetools.data.keepdata.LanguageKeep; -import javafx.beans.property.BooleanProperty; -import javafx.beans.property.SimpleBooleanProperty; -import javafx.collections.FXCollections; -import javafx.geometry.Pos; -import javafx.scene.control.TitledPane; -import javafx.scene.control.cell.CheckBoxListCell; -import javafx.scene.layout.VBox; -import net.digimonworld.decode.randomizer.RandomizationContext; -import net.digimonworld.decode.randomizer.RandoLogger.LogLevel; -import net.digimonworld.decode.randomizer.utils.JavaFXUtils; - -public class PlayerSettings implements Setting { - // TODO pronouns, requires translation patch 1.1 - // TODO cutins, see 0x4D8624 and 0x4D8628 | requires target value to have _01 to _10, otherwise the game will crash when trying to load those - // TODO voice? - - - private BooleanProperty enabled = new SimpleBooleanProperty(); - private Map checkedMap = new EnumMap<>(Character.class); - - @Override - public TitledPane create(GlobalKeepData inputData, LanguageKeep languageKeep) { - VBox vbox = new VBox(8); - TitledPane pane = new TitledPane("Player", vbox); - vbox.setAlignment(Pos.TOP_LEFT); - pane.setCollapsible(false); - pane.setPrefHeight(400); - - Arrays.stream(Character.values()).forEach(a -> checkedMap.put(a, new SimpleBooleanProperty())); - CheckListView list = new CheckListView<>(FXCollections.observableArrayList(Character.values())); - list.disableProperty().bind(enabled.not()); - list.setCellFactory(listView -> new CheckBoxListCell<>(checkedMap::get) { - @Override - public void updateItem(Character a, boolean b) { - super.updateItem(a, b); - setText(a == null ? "" : languageKeep.getCharacterNames().getStringById(a.getStringId())); - } - }); - - vbox.getChildren().addAll(JavaFXUtils.buildToggleSwitch("Enabled", Optional.empty(), Optional.of(enabled)), list); - return pane; - } - - @Override - public void randomize(RandomizationContext context) { - if (enabled.get()) - randomizePlayer(context); - } - - private void randomizePlayer(RandomizationContext context) { - List list = checkedMap.entrySet().stream().filter(a -> a.getValue().get()).map(Map.Entry::getKey).collect(Collectors.toList()); - - if (list.isEmpty()) - return; - - context.logLine(LogLevel.ALWAYS, "Randomizing player character..."); - Random rand = new Random(context.getInitialSeed() * "Player".hashCode()); - - Character starterRina = list.get(rand.nextInt(list.size())); - Character starterTaiga = list.get(rand.nextInt(list.size())); - - context.addASM(".org 0x4A1CDE"); - context.addASM(String.format(".ascii \"%s\"", starterTaiga.getFileName())); - context.addASM(".org 0x4A1D4E"); - context.addASM(String.format(".ascii \"%s\"", starterRina.getFileName())); - - context.logLine(LogLevel.CASUAL, - String.format("Randomized Rina's Character to %s.", - context.getLanguageKeep().getCharacterNames().getStringById(starterRina.getStringId()))); - context.logLine(LogLevel.CASUAL, - String.format("Randomized Taiga's Character to %s.", - context.getLanguageKeep().getCharacterNames().getStringById(starterTaiga.getStringId()))); - } - - @Override - public Map serialize() { - Map map = new HashMap<>(); - - map.put("enabled", enabled.get()); - map.put("checked", checkedMap.entrySet().stream().collect(Collectors.toMap(a -> a.getKey().toString(), a -> a.getValue().get()))); - - return map; - } - - @Override - public void load(YamlMapping map) { - if (map == null) - return; - - YamlMapping list = map.yamlMapping("checked"); - Arrays.asList(Character.values()) - .forEach(a -> checkedMap.computeIfAbsent(a, b -> new SimpleBooleanProperty()).setValue(Boolean.parseBoolean(list.string(a.toString())))); - enabled.set(Boolean.parseBoolean(map.string("enabled"))); - } - - public enum Character { - TAIGA("pc01.res", 1062, Pronoun.HE), - RINA("pc02.res", 1063, Pronoun.SHE), - AKIHO("Npc01.res", 1002, Pronoun.SHE), - NIKO("Npc02.res", 1003, Pronoun.HE), - YUUYA("Npc03.res", 1004, Pronoun.HE), - MIREI("Npc04.res", 1005, Pronoun.SHE), - PETROV("Npc05.res", 1006, Pronoun.HE), - LILY("Npc10.res", 1007, Pronoun.SHE); - - private final String fileName; - private final int stringId; - private final Pronoun pronoun; - - private Character(String fileName, int stringId, Pronoun pronoun) { - this.fileName = fileName; - this.stringId = stringId; - this.pronoun = pronoun; - } - - public String getFileName() { - return fileName; - } - - public int getStringId() { - return stringId; - } - - public Pronoun getPronoun() { - return pronoun; - } - } - - public enum Pronoun { - HE, - SHE, - THEY; - } -} diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/RandomizerSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/RandomizerSettings.java index 7588461..af868d9 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/RandomizerSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/RandomizerSettings.java @@ -22,26 +22,12 @@ import net.digimonworld.decode.randomizer.RandomizationContext; public class RandomizerSettings { - private SkillsSettings skillSettings = new SkillsSettings(); - private DigimonSettings digimonSettings = new DigimonSettings(); - private EvolutionSettings evolutionSettings = new EvolutionSettings(); - private StarterSettings starterSettings = new StarterSettings(); - private WorldSettings worldSettings = new WorldSettings(); - private PatchSettings patchSettings = new PatchSettings(); - private PlayerSettings playerSettings = new PlayerSettings(); + private NamingSettings namingSettings = new NamingSettings(); public void randomize(RandomizationContext context) { logSettings(context); - namingSettings.randomize(context); - patchSettings.randomize(context); - skillSettings.randomize(context); - digimonSettings.randomize(context); - evolutionSettings.randomize(context); - starterSettings.randomize(context); - worldSettings.randomize(context); - playerSettings.randomize(context); } private void logSettings(RandomizationContext context) { @@ -81,36 +67,15 @@ public List create(GlobalKeepData inputData, LanguageKeep languageKeep) { private List>> getSettingsMap() { return List.of( - Tuple.of("General", - Arrays.asList(digimonSettings, evolutionSettings, skillSettings, worldSettings, patchSettings)), - Tuple.of("New Game", Arrays.asList(starterSettings, playerSettings)), Tuple.of("Patch Names", Arrays.asList(namingSettings))); } public Map serialize() { Map map = new HashMap<>(); - map.put("skillSettings", skillSettings.serialize()); - map.put("digimonSettings", digimonSettings.serialize()); - map.put("evolutionSettings", evolutionSettings.serialize()); - map.put("starterSettings", starterSettings.serialize()); - map.put("worldSettings", worldSettings.serialize()); - map.put("patchSettings", patchSettings.serialize()); - map.put("playerSettings", playerSettings.serialize()); map.put("namingSettings", namingSettings.serialize()); - return map; } public void load(YamlMapping map) { - if (map == null) - return; - - skillSettings.load(map.yamlMapping("skillSettings")); - digimonSettings.load(map.yamlMapping("digimonSettings")); - evolutionSettings.load(map.yamlMapping("evolutionSettings")); - starterSettings.load(map.yamlMapping("starterSettings")); - worldSettings.load(map.yamlMapping("worldSettings")); - patchSettings.load(map.yamlMapping("patchSettings")); - playerSettings.load(map.yamlMapping("playerSettings")); } } diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/SkillsSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/SkillsSettings.java deleted file mode 100644 index 4c035ec..0000000 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/SkillsSettings.java +++ /dev/null @@ -1,293 +0,0 @@ -package net.digimonworld.decode.randomizer.settings; - -import java.util.HashMap; -import java.util.ListIterator; -import java.util.Map; -import java.util.Optional; -import java.util.Random; - -import com.amihaiemil.eoyaml.YamlMapping; - -import net.digimonworld.decodetools.data.keepdata.Finisher; -import net.digimonworld.decodetools.data.keepdata.GlobalKeepData; -import net.digimonworld.decodetools.data.keepdata.LanguageKeep; -import net.digimonworld.decodetools.data.keepdata.Skill; -import net.digimonworld.decodetools.data.keepdata.enums.MoveKind; -import net.digimonworld.decodetools.data.keepdata.enums.Status; -import javafx.beans.property.BooleanProperty; -import javafx.beans.property.SimpleBooleanProperty; -import javafx.geometry.Pos; -import javafx.scene.control.TitledPane; -import javafx.scene.layout.VBox; -import net.digimonworld.decode.randomizer.RandoLogger.LogLevel; -import net.digimonworld.decode.randomizer.RandomizationContext; -import net.digimonworld.decode.randomizer.utils.JavaFXUtils; - -public class SkillsSettings implements Setting { - /*- - * MP Cost - * enable - * Cooldown - * enable - * Learn Rate - * enable - * Damage - * enable - * Status - * enable - * Status chance - * enable - */ - // TODO Tooltips - - private BooleanProperty randomizeMPCost = new SimpleBooleanProperty(); - private BooleanProperty randomizeCooldown = new SimpleBooleanProperty(); - private BooleanProperty randomizeLearnRate = new SimpleBooleanProperty(); - private BooleanProperty randomizeDamage = new SimpleBooleanProperty(); - private BooleanProperty randomizeStatus = new SimpleBooleanProperty(); - private BooleanProperty randomizeStatusChance = new SimpleBooleanProperty(); - private BooleanProperty randomizeFinisher = new SimpleBooleanProperty(); - - @Override - public TitledPane create(GlobalKeepData data, LanguageKeep language) { - VBox vbox = new VBox(4); - TitledPane pane = new TitledPane("Skills", vbox); - vbox.setAlignment(Pos.TOP_RIGHT); - pane.setCollapsible(false); - - vbox.getChildren().addAll(JavaFXUtils.buildToggleSwitch("MP Cost", Optional.empty(), Optional.of(randomizeMPCost)), - JavaFXUtils.buildToggleSwitch("Cooldown", Optional.empty(), Optional.of(randomizeCooldown)), - JavaFXUtils.buildToggleSwitch("Learn Rate", Optional.empty(), Optional.of(randomizeLearnRate)), - JavaFXUtils.buildToggleSwitch("Power", Optional.empty(), Optional.of(randomizeDamage)), - JavaFXUtils.buildToggleSwitch("Status", Optional.empty(), Optional.of(randomizeStatus)), - JavaFXUtils.buildToggleSwitch("Status Chance", Optional.empty(), Optional.of(randomizeStatusChance)), - JavaFXUtils.buildToggleSwitch("Finisher", Optional.empty(), Optional.of(randomizeFinisher))); - return pane; - } - - public void setRandomizeMPCost(boolean set) { - randomizeMPCost.set(set); - } - - @Override - public void randomize(RandomizationContext context) { - if (randomizeMPCost.get()) - randomizeMPCost(context); - if (randomizeCooldown.get()) - randomizeCooldown(context); - if (randomizeLearnRate.get()) - randomizeLearnRate(context); - if (randomizeDamage.get()) - randomizeDamage(context); - if (randomizeStatus.get()) - randomizeStatus(context); - if (randomizeStatusChance.get()) - randomizeStatusChance(context); - if (randomizeFinisher.get()) - randomizeFinisher(context); - } - - private void randomizeLearnRate(RandomizationContext context) { - Random rand = new Random(context.getInitialSeed() * "LearnChance".hashCode()); - - context.logLine(LogLevel.ALWAYS, "Randomizing Learn Rates..."); - - for (ListIterator itr = context.getGlobalKeepData().getSkills().listIterator(); itr.hasNext();) { - int i = itr.nextIndex(); - Skill a = itr.next(); - - if (a.getTier() == 0) - continue; - - float newLearnRate = 0.1f + 0.9f * rand.nextFloat(); - context.logLine(LogLevel.CASUAL, - String.format(FORMAT_FLOAT, - context.getLanguageKeep().getSkillNames().getStringById(i + 1), - "Learn Rate", - a.getLearning(), - newLearnRate)); - a.setLearning(newLearnRate); - } - - context.logLine(LogLevel.ALWAYS, ""); - } - - private void randomizeFinisher(RandomizationContext context) { - Random randDamage = new Random(context.getInitialSeed() * "FinisherDamage".hashCode()); - Random randStatus = new Random(context.getInitialSeed() * "FinisherStatus".hashCode()); - - context.logLine(LogLevel.ALWAYS, "Randomizing Finisher..."); - - for (ListIterator itr = context.getGlobalKeepData().getFinisher().listIterator(); itr.hasNext();) { - int i = itr.nextIndex(); - Finisher a = itr.next(); - - if (randomizeDamage.get()) { - int power = 250 + randDamage.nextInt(750); - context.logLine(LogLevel.CASUAL, - String.format(FORMAT_INT, context.getLanguageKeep().getFinisherNames().getStringById(i + 1), "Power", a.getPower(), power)); - a.setPower(power); - } - - if (randomizeStatus.get()) { - Status status = randStatus.nextDouble() > 0.75 ? Status.NONE : Status.values()[randStatus.nextInt(6) + 1]; - context.logLine(LogLevel.CASUAL, - String.format(FORMAT_STRING, - context.getLanguageKeep().getFinisherNames().getStringById(i + 1), - "Status", - a.getEffect(), - status)); - a.setEffect(status); - a.setChance((short) (status == Status.NONE ? 0 : 100)); - } - } - - context.logLine(LogLevel.ALWAYS, ""); - } - - private void randomizeCooldown(RandomizationContext context) { - Random rand = new Random(context.getInitialSeed() * "Cooldown".hashCode()); - - context.logLine(LogLevel.ALWAYS, "Randomizing Cooldowns..."); - - for (ListIterator itr = context.getGlobalKeepData().getSkills().listIterator(); itr.hasNext();) { - int i = itr.nextIndex(); - Skill a = itr.next(); - - if (a.getKind() != MoveKind.ATTACK || a.getTier() == 0) - continue; - - short newCooldown = (short) (500 + rand.nextInt(6500)); - context.logLine(LogLevel.CASUAL, - String.format(FORMAT_INT, - context.getLanguageKeep().getSkillNames().getStringById(i + 1), - "Cooldown", - a.getCooldown(), - newCooldown)); - a.setCooldown(newCooldown); - } - - context.logLine(LogLevel.ALWAYS, ""); - } - - private void randomizeDamage(RandomizationContext context) { - Random rand = new Random(context.getInitialSeed() * "Power".hashCode()); - - context.logLine(LogLevel.ALWAYS, "Randomizing Power..."); - - for (ListIterator itr = context.getGlobalKeepData().getSkills().listIterator(); itr.hasNext();) { - int i = itr.nextIndex(); - Skill a = itr.next(); - - if (a.getKind() != MoveKind.ATTACK) - continue; - - int newDamage = 50 + rand.nextInt(200) + (rand.nextInt(1024) * rand.nextInt(1 + rand.nextInt(749))) / 1024; - context.logLine(LogLevel.CASUAL, - String.format(FORMAT_INT, context.getLanguageKeep().getSkillNames().getStringById(i + 1), "Power", a.getDamage(), newDamage)); - a.setDamage(newDamage); - } - - context.logLine(LogLevel.ALWAYS, ""); - } - - private void randomizeStatus(RandomizationContext context) { - Random rand = new Random(context.getInitialSeed() * "Status".hashCode()); - - context.logLine(LogLevel.ALWAYS, "Randomizing Status Effects..."); - - for (ListIterator itr = context.getGlobalKeepData().getSkills().listIterator(); itr.hasNext();) { - int i = itr.nextIndex(); - Skill a = itr.next(); - - if (a.getKind() != MoveKind.ATTACK || a.getTier() == 0) - continue; - - Status newStatus = rand.nextBoolean() ? Status.NONE : Status.values()[rand.nextInt(6) + 1]; - context.logLine(LogLevel.CASUAL, - String.format(FORMAT_STRING, context.getLanguageKeep().getSkillNames().getStringById(i + 1), "Status", a.getStatus(), newStatus)); - a.setStatus(newStatus); - } - - context.logLine(LogLevel.ALWAYS, ""); - } - - private void randomizeStatusChance(RandomizationContext context) { - Random rand = new Random(context.getInitialSeed() * "StatusChance".hashCode()); - - context.logLine(LogLevel.ALWAYS, "Randomizing Status Chances..."); - - for (ListIterator itr = context.getGlobalKeepData().getSkills().listIterator(); itr.hasNext();) { - int i = itr.nextIndex(); - Skill a = itr.next(); - - if (a.getStatus() == Status.NONE || a.getKind() != MoveKind.ATTACK || a.getTier() == 0) - continue; - - short newStatusChance = (short) (1 + rand.nextInt(99)); - - context.logLine(LogLevel.CASUAL, - String.format(FORMAT_INT, - context.getLanguageKeep().getSkillNames().getStringById(i + 1), - "StatusChance", - a.getStatusChance(), - newStatusChance)); - a.setStatusChance(newStatusChance); - } - - context.logLine(LogLevel.ALWAYS, ""); - } - - private void randomizeMPCost(RandomizationContext context) { - Random rand = new Random(context.getInitialSeed() * "MPCost".hashCode()); - - context.logLine(LogLevel.ALWAYS, "Randomizing MP Cost..."); - - final int mean = 250; - final int stdDev = 150; - - for (ListIterator itr = context.getGlobalKeepData().getSkills().listIterator(); itr.hasNext();) { - int i = itr.nextIndex(); - Skill a = itr.next(); - - int val = (int) (mean + (rand.nextGaussian() * stdDev)); - if (val < 5 || val > 995 || rand.nextDouble() < (500 - val) / 3000D) - val = 5 + rand.nextInt(994); - - context.logLine(LogLevel.CASUAL, - String.format(FORMAT_INT, context.getLanguageKeep().getSkillNames().getStringById(i + 1), "MP Cost", a.getMpCost(), val)); - a.setMpCost((short) val); - } - - context.logLine(LogLevel.ALWAYS, ""); - } - - @Override - public Map serialize() { - Map map = new HashMap<>(); - - map.put("randomizeMPCosts", randomizeMPCost.get()); - map.put("randomizeCooldown", randomizeCooldown.get()); - map.put("randomizeLearnRate", randomizeLearnRate.get()); - map.put("randomizeDamage", randomizeDamage.get()); - map.put("randomizeStatus", randomizeStatus.get()); - map.put("randomizeStatusChance", randomizeStatusChance.get()); - map.put("randomizeFinisher", randomizeFinisher.get()); - - return map; - } - - @Override - public void load(YamlMapping map) { - if(map == null) - return; - - this.randomizeMPCost.set(Boolean.parseBoolean(map.string("randomizeMPCosts"))); - this.randomizeCooldown.set(Boolean.parseBoolean(map.string("randomizeCooldown"))); - this.randomizeLearnRate.set(Boolean.parseBoolean(map.string("randomizeLearnRate"))); - this.randomizeDamage.set(Boolean.parseBoolean(map.string("randomizeDamage"))); - this.randomizeStatus.set(Boolean.parseBoolean(map.string("randomizeStatus"))); - this.randomizeStatusChance.set(Boolean.parseBoolean(map.string("randomizeStatusChance"))); - this.randomizeFinisher.set(Boolean.parseBoolean(map.string("randomizeFinisher"))); - } -} diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/StarterSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/StarterSettings.java deleted file mode 100644 index 780ac55..0000000 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/StarterSettings.java +++ /dev/null @@ -1,145 +0,0 @@ -package net.digimonworld.decode.randomizer.settings; - -import java.util.ArrayList; -import java.util.EnumMap; -import java.util.HashMap; -import java.util.List; -import java.util.ListIterator; -import java.util.Map; -import java.util.Optional; -import java.util.Random; -import java.util.stream.Collectors; - -import org.controlsfx.control.CheckTreeView; - -import com.amihaiemil.eoyaml.YamlMapping; -import com.amihaiemil.eoyaml.YamlSequence; - -import net.digimonworld.decodetools.data.keepdata.Digimon; -import net.digimonworld.decodetools.data.keepdata.GlobalKeepData; -import net.digimonworld.decodetools.data.keepdata.LanguageKeep; -import net.digimonworld.decodetools.data.keepdata.enums.Level; -import javafx.beans.property.BooleanProperty; -import javafx.beans.property.SimpleBooleanProperty; -import javafx.geometry.Pos; -import javafx.scene.control.CheckBoxTreeItem; -import javafx.scene.control.TitledPane; -import javafx.scene.layout.VBox; -import net.digimonworld.decode.randomizer.RandoLogger.LogLevel; -import net.digimonworld.decode.randomizer.RandomizationContext; -import net.digimonworld.decode.randomizer.utils.JavaFXUtils; - -public class StarterSettings implements Setting { - - // TODO adjust lifespan - - private class DigimonEntry { - int id; - String name; - - public DigimonEntry(int id, String name) { - this.id = id; - this.name = name; - } - - @Override - public String toString() { - return name; - } - } - - private BooleanProperty enabled = new SimpleBooleanProperty(); - private Map propertyMap = new HashMap<>(); - - @Override - public TitledPane create(GlobalKeepData data, LanguageKeep language) { - VBox vbox = new VBox(8); - TitledPane pane = new TitledPane("Starter", vbox); - vbox.setAlignment(Pos.TOP_LEFT); - pane.setCollapsible(false); - pane.setPrefHeight(400); - - CheckBoxTreeItem root = new CheckBoxTreeItem<>(new DigimonEntry(-10, "Root")); - Map> map = new EnumMap<>(Level.class); - - for (ListIterator itr = data.getDigimonData().listIterator(); itr.hasNext();) { - int id = itr.nextIndex() + 1; - Digimon digi = itr.next(); - - if ((digi.getUnk38() & 1) == 1) - map.computeIfAbsent(digi.getLevel(), a -> new ArrayList()) - .add(new DigimonEntry(id, language.getDigimonNames().getStringById(id))); - } - - map.entrySet().forEach(a -> { - CheckBoxTreeItem item = new CheckBoxTreeItem<>(new DigimonEntry(-a.getKey().ordinal(), a.getKey().getDisplayName())); - item.getChildren().addAll(a.getValue().stream().map(b -> { - CheckBoxTreeItem i = new CheckBoxTreeItem<>(b); - BooleanProperty prop = new SimpleBooleanProperty(); - i.selectedProperty().bindBidirectional(prop); - propertyMap.put(b.id, prop); - return i; - }).collect(Collectors.toList())); - root.getChildren().add(item); - }); - - CheckTreeView tree = new CheckTreeView<>(root); - tree.setShowRoot(false); - tree.disableProperty().bind(enabled.not()); - - vbox.getChildren().addAll(JavaFXUtils.buildToggleSwitch("Enabled", Optional.empty(), Optional.of(enabled)), tree); - return pane; - } - - @Override - public void randomize(RandomizationContext context) { - List list = propertyMap.entrySet().stream().filter(a -> a.getValue().get()).map(Map.Entry::getKey).collect(Collectors.toList()); - - if (!enabled.get() || list.isEmpty()) - return; - - context.logLine(LogLevel.ALWAYS, "Randomizing starter Digimon..."); - Random rand = new Random(context.getInitialSeed() * "Starter".hashCode()); - - int starterRina = list.get(rand.nextInt(list.size())); - int starterTaiga = list.get(rand.nextInt(list.size())); - int starterTaigaNGP = list.get(rand.nextInt(list.size())); - - context.addASM(".org 0x12CCC4"); - context.addASM(String.format(".byte 0x%02X", starterRina)); - - context.addASM(".org 0x12D6A0"); - context.addASM(String.format(".byte 0x%02X", starterTaigaNGP)); - - context.addASM(".org 0x27AA18"); - context.addASM(String.format(".byte 0x%02X", starterTaiga)); - - context.logLine(LogLevel.CASUAL, - String.format("Randomized Rina's Starter to %s.", context.getLanguageKeep().getDigimonNames().getStringById(starterRina + 1))); - context.logLine(LogLevel.CASUAL, - String.format("Randomized Taiga's Starter to %s.", context.getLanguageKeep().getDigimonNames().getStringById(starterTaiga + 1))); - context.logLine(LogLevel.CASUAL, - String.format("Randomized Taiga's BG+ Starter to %s.", context.getLanguageKeep().getDigimonNames().getStringById(starterTaigaNGP + 1))); - - } - - @Override - public Map serialize() { - Map map = new HashMap<>(); - map.put("enabled", enabled.get()); - map.put("checked", propertyMap.entrySet().stream().filter(a -> a.getValue().get()).map(Map.Entry::getKey).collect(Collectors.toList())); - return map; - } - - @Override - public void load(YamlMapping map) { - if (map == null) - return; - - YamlSequence list = map.yamlSequence("checked"); - List activeList = list == null ? new ArrayList<>() - : list.values().stream().map(a -> Integer.parseInt(a.asScalar().value())).collect(Collectors.toList()); - propertyMap.forEach((a, b) -> b.set(activeList.contains(a))); - enabled.set(Boolean.parseBoolean(map.string("enabled"))); - } -} diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/WorldSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/WorldSettings.java deleted file mode 100644 index 6b254b7..0000000 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/WorldSettings.java +++ /dev/null @@ -1,372 +0,0 @@ -package net.digimonworld.decode.randomizer.settings; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Random; - -import org.controlsfx.control.ToggleSwitch; - -import com.amihaiemil.eoyaml.YamlMapping; - -import javafx.beans.property.BooleanProperty; -import javafx.beans.property.SimpleBooleanProperty; -import javafx.geometry.Pos; -import javafx.scene.control.TitledPane; -import javafx.scene.layout.VBox; -import net.digimonworld.decode.randomizer.RandoLogger.LogLevel; -import net.digimonworld.decode.randomizer.RandomizationContext; -import net.digimonworld.decode.randomizer.utils.JavaFXUtils; -import net.digimonworld.decode.randomizer.utils.RandomizerUtils; -import net.digimonworld.decodetools.core.MappedSet; -import net.digimonworld.decodetools.core.StreamAccess; -import net.digimonworld.decodetools.data.keepdata.Digimon; -import net.digimonworld.decodetools.data.keepdata.EnemyData; -import net.digimonworld.decodetools.data.keepdata.EnemyData.ItemDrop; -import net.digimonworld.decodetools.data.keepdata.GlobalKeepData; -import net.digimonworld.decodetools.data.keepdata.LanguageKeep; -import net.digimonworld.decodetools.data.keepdata.MapEnemyData; -import net.digimonworld.decodetools.data.keepdata.MapEnemyData.MapEnemyEntry; -import net.digimonworld.decodetools.data.keepdata.TreasureLoot; -import net.digimonworld.decodetools.data.keepdata.TypeAlignmentChart; -import net.digimonworld.decodetools.data.keepdata.enums.DropType; -import net.digimonworld.decodetools.data.keepdata.enums.Special; -import net.digimonworld.decodetools.data.map.MapItemSpawns; -import net.digimonworld.decodetools.data.map.MapItemSpawns.ItemSpawn; -import net.digimonworld.decodetools.data.map.MapItemSpawns.MapItemSpawn; -import net.digimonworld.decodetools.res.kcap.AbstractKCAP; -import net.digimonworld.decodetools.res.payload.GenericPayload; - -public class WorldSettings implements Setting { - - private BooleanProperty randomizeTypeEffectiveness = new SimpleBooleanProperty(); - private BooleanProperty randomizeTreasureHunt = new SimpleBooleanProperty(); - private BooleanProperty randomizeItemSpawns = new SimpleBooleanProperty(); - - private BooleanProperty randomizeEnemies = new SimpleBooleanProperty(); - private BooleanProperty randomizeEnemyStats = new SimpleBooleanProperty(); - private BooleanProperty randomizeEnemyDigimon = new SimpleBooleanProperty(); - private BooleanProperty randomizeEnemyMoves = new SimpleBooleanProperty(); - private BooleanProperty randomizeEnemyLoot = new SimpleBooleanProperty(); - - @Override - public TitledPane create(GlobalKeepData inputData, LanguageKeep languageKeep) { - VBox vbox = new VBox(4); - TitledPane pane = new TitledPane("World", vbox); - vbox.setAlignment(Pos.TOP_RIGHT); - pane.setCollapsible(false); - - ToggleSwitch enemies = JavaFXUtils.buildToggleSwitch("Enemies", Optional.empty(), Optional.of(randomizeEnemies)); - ToggleSwitch stats = JavaFXUtils.buildToggleSwitch("Enemy Stats", Optional.empty(), Optional.of(randomizeEnemyStats)); - ToggleSwitch digimon = JavaFXUtils.buildToggleSwitch("Enemy Digimon", Optional.empty(), Optional.of(randomizeEnemyDigimon)); - ToggleSwitch moves = JavaFXUtils.buildToggleSwitch("Enemy Moves", Optional.empty(), Optional.of(randomizeEnemyMoves)); - ToggleSwitch loot = JavaFXUtils.buildToggleSwitch("Enemy Loot", Optional.empty(), Optional.of(randomizeEnemyLoot)); - - stats.disableProperty().bind(randomizeEnemies.not()); - digimon.disableProperty().bind(randomizeEnemies.not()); - moves.disableProperty().bind(randomizeEnemies.not()); - loot.disableProperty().bind(randomizeEnemies.not()); - - vbox.getChildren().addAll(JavaFXUtils.buildToggleSwitch("Type Effectiveness", Optional.empty(), Optional.of(randomizeTypeEffectiveness)), - JavaFXUtils.buildToggleSwitch("Treasure Hunt", Optional.empty(), Optional.of(randomizeTreasureHunt)), - JavaFXUtils.buildToggleSwitch("Item Spawns", Optional.empty(), Optional.of(randomizeItemSpawns)), - enemies, - stats, - digimon, - moves, - loot); - return pane; - } - - @Override - public void randomize(RandomizationContext context) { - if (randomizeTypeEffectiveness.get()) - randomizeTypeEffectiveness(context); - if (randomizeTreasureHunt.get()) - randomizeTreasureHunt(context); - if (randomizeEnemies.get()) - randomizeEnemies(context); - if (randomizeItemSpawns.get()) - randomizeItemSpawns(context); - } - - private void randomizeItemSpawns(RandomizationContext context) { - Random rand = new Random(context.getInitialSeed() * "ItemSpawns".hashCode()); - - context.logLine(LogLevel.ALWAYS, "Randomizing Item Spawns..."); - context.logLine(LogLevel.CASUAL, ""); - - List items = RandomizerUtils.getUseableItems(context.getGlobalKeepData()); - Map mapMap = readItemSpawnMapping(); - - mapMap.forEach((a, b) -> { - String filePath = String.format("part0/arcv/map/%s.res", a); - context.getFile(filePath).ifPresent(m -> { - AbstractKCAP root = (AbstractKCAP) m; - AbstractKCAP map = (AbstractKCAP) root.get(1); - GenericPayload payload = (GenericPayload) map.get(b); - - @SuppressWarnings("resource") - MapItemSpawns mapSpawns = new MapItemSpawns(new StreamAccess(payload.getData())); - - context.logLine(LogLevel.CASUAL, String.format("=== %s old spawns: ===", a)); - logItemSpawns(mapSpawns, context); - - for (MapItemSpawn spawns : mapSpawns.getSpawns()) { - int numItems = 1 + rand.nextInt(8); - float chancePerItem = (0.1f + rand.nextFloat() * 0.9f) / numItems; - - for (int i = 0; i < 8; i++) { - ItemSpawn spawn = spawns.getSpawns()[i]; - - // don't randomize firewood - if(spawn.getItemId() == 367) - continue; - - spawn.setChance(i < numItems ? chancePerItem : 0f); - spawn.setItemId(i < numItems ? items.get(rand.nextInt(items.size())) : 0); - } - } - - context.logLine(LogLevel.CASUAL, String.format("=== %s new spawns: ===", a)); - logItemSpawns(mapSpawns, context); - - payload.setData(mapSpawns.toByteArray()); - context.logLine(LogLevel.CASUAL, ""); - }); - }); - } - - private void logItemSpawns(MapItemSpawns mapSpawns, RandomizationContext context) { - for (MapItemSpawn spawns : mapSpawns.getSpawns()) - for (ItemSpawn spawn : spawns.getSpawns()) - context.logLine(LogLevel.CASUAL, - String.format("%30s | %5.4f", - context.getLanguageKeep().getItemNames().getStringById(spawn.getItemId()), - spawn.getChance())); - } - - private Map readItemSpawnMapping() { - Map map = new HashMap<>(); - try (BufferedReader reader = new BufferedReader(new InputStreamReader(WorldSettings.class.getResourceAsStream("itemSpawnMapping.csv")))) { - String str; - while ((str = reader.readLine()) != null) { - String[] arr = str.split(","); - map.put(arr[0], Integer.parseInt(arr[1])); - } - } - catch (IOException e) { - e.printStackTrace(); - } - - return map; - } - - private void randomizeEnemies(RandomizationContext context) { - Random rand = new Random(context.getInitialSeed() * "Enemies".hashCode()); - - context.logLine(LogLevel.ALWAYS, "Randomizing Map Encounters..."); - context.logLine(LogLevel.CASUAL, ""); - - GlobalKeepData keep = context.getGlobalKeepData(); - MappedSet enemyData = keep.getEnemyData(); - List digimonList = RandomizerUtils.getEnemyDigimonList(keep); - - int i = 7000; - for (MapEnemyData a : keep.getEnemyMapData()) { - for (MapEnemyEntry entry : a.getEntries()) { - if (entry.getEnemyId() == 0) - continue; - - EnemyData oldData = enemyData.get(entry.getEnemyId()); - EnemyData newData = new EnemyData(oldData); - - entry.setEnemyId((short) i); - newData.setEnemyId((short) i++); - - // Digimon ID - if (randomizeEnemyDigimon.get()) - newData.setDigimonId(digimonList.get(rand.nextInt(digimonList.size())).shortValue()); - - Digimon digi = keep.getDigimonData().get(newData.getDigimonId() - 1); - - // Stats - if (randomizeEnemyStats.get()) - randomizeEnemyStats(rand, newData); - - // Moves - List moves = RandomizerUtils.getMoveList(digi); - Collections.shuffle(moves, rand); - - if (randomizeEnemyMoves.get() || !moves.contains(newData.getMove1())) - newData.setMove1(moves.isEmpty() ? 0 : moves.get(0)); - if (randomizeEnemyMoves.get() || !moves.contains(newData.getMove2())) - newData.setMove2(moves.size() < 2 ? 0 : moves.get(1)); - if (randomizeEnemyMoves.get() || !moves.contains(newData.getMove3())) - newData.setMove3(moves.size() < 3 ? 0 : moves.get(2)); - - // Loot - if (randomizeEnemyLoot.get()) - randomizeLoot(rand, newData, keep); - - enemyData.add(newData); - - context.logLine(LogLevel.CASUAL, String.format("=== Map %s | Spawn %d", a.getMap(), a.getSpawnPoint())); - context.logLine(LogLevel.CASUAL, ""); - RandomizerUtils.logEnemyData(context, oldData); - context.logLine(LogLevel.CASUAL, ""); - RandomizerUtils.logEnemyData(context, newData); - context.logLine(LogLevel.CASUAL, ""); - context.logLine(LogLevel.CASUAL, ""); - } - } - } - - private void randomizeLoot(Random rand, EnemyData newData, GlobalKeepData keep) { - List itemList = RandomizerUtils.getUseableItems(keep); - - short bits = newData.getBits(); - short decodeXP = newData.getDecodeXP(); - - bits *= 1 + (rand.nextBoolean() ? -rand.nextFloat() / 2 : rand.nextFloat()); - decodeXP *= 1 + (rand.nextBoolean() ? -rand.nextFloat() / 2 : rand.nextFloat()); - - newData.setBits(bits); - newData.setDecodeXP(decodeXP); - - for (int j = 0; j < 3; j++) { - int r1 = rand.nextInt(10); - ItemDrop drop = newData.getDrop(j); - - if (r1 < 5) { - drop.setType(DropType.ITEM); - drop.setId(itemList.get(rand.nextInt(itemList.size())).shortValue()); - drop.setChance(Math.min(1.0f, 0.05f + rand.nextFloat())); - } - else if (r1 < 7) { - drop.setType(DropType.CARD); - drop.setId((short) (1 + rand.nextInt(588))); - drop.setChance(Math.min(1.0f, 0.05f + rand.nextFloat())); - } - else { - drop.setType(DropType.ITEM); - drop.setId((short) 0); - drop.setChance(0f); - } - } - } - - private void randomizeEnemyStats(Random rand, EnemyData newData) { - int hp = newData.getHp(); - int mp = newData.getMp(); - short off = newData.getOffense(); - short def = newData.getDefense(); - short speed = newData.getSpeed(); - short brains = newData.getBrains(); - - hp *= 1 + (rand.nextBoolean() ? -rand.nextFloat() / 2 : rand.nextFloat()); - mp *= 1 + (rand.nextBoolean() ? -rand.nextFloat() / 2 : rand.nextFloat()); - off *= 1 + (rand.nextBoolean() ? -rand.nextFloat() / 2 : rand.nextFloat()); - def *= 1 + (rand.nextBoolean() ? -rand.nextFloat() / 2 : rand.nextFloat()); - speed *= 1 + (rand.nextBoolean() ? -rand.nextFloat() / 2 : rand.nextFloat()); - brains *= 1 + (rand.nextBoolean() ? -rand.nextFloat() / 2 : rand.nextFloat()); - - newData.setHp(hp); - newData.setMp(mp); - newData.setOffense(off); - newData.setDefense(def); - newData.setSpeed(speed); - newData.setBrains(brains); - } - - private void randomizeTreasureHunt(RandomizationContext context) { - Random rand = new Random(context.getInitialSeed() * "TreasureLoot".hashCode()); - List itemList = RandomizerUtils.getUseableItems(context.getGlobalKeepData()); - - context.logLine(LogLevel.ALWAYS, "Randomizing Treasure Hunt Loot..."); - context.logLine(LogLevel.CASUAL, "Old Table: "); - - for (int i = 0; i < 120; i++) { - if (i % 20 == 0) - Collections.shuffle(itemList, rand); - - TreasureLoot loot = context.getGlobalKeepData().getTreasureLoot().get(i); - context.logLine(LogLevel.CASUAL, - String.format("%s - %3.2f", context.getLanguageKeep().getItemNames().getStringById(loot.getItem()), loot.getChance())); - - loot.setItem(itemList.get(i % 20)); - loot.setChance(0.05f); - } - - context.logLine(LogLevel.CASUAL, ""); - context.logLine(LogLevel.CASUAL, "New Table: "); - - for (TreasureLoot loot : context.getGlobalKeepData().getTreasureLoot()) - context.logLine(LogLevel.CASUAL, - String.format("%s - %3.2f", context.getLanguageKeep().getItemNames().getStringById(loot.getItem()), loot.getChance())); - } - - private void randomizeTypeEffectiveness(RandomizationContext context) { - Random rand = new Random(context.getInitialSeed() * "TypeAlignment".hashCode()); - - TypeAlignmentChart chart = context.getGlobalKeepData().getTypeAlignmentChart(); - - StringBuilder sbOld = new StringBuilder(); - StringBuilder sbNew = new StringBuilder(); - - for (Special attacker : TypeAlignmentChart.VALUES) { - for (Special victim : TypeAlignmentChart.VALUES) { - int val = rand.nextInt(101); - int value = 50 + (Math.min(val, 50) + Math.max(2 * (val - 50), 0)); - sbOld.append(Byte.toUnsignedInt(chart.get(attacker, victim))).append(" "); - sbNew.append(value).append(" "); - chart.set(attacker, victim, value); - } - sbOld.append("\n"); - sbNew.append("\n"); - } - - context.logLine(LogLevel.ALWAYS, "Randomizing type alignments..."); - context.logLine(LogLevel.CASUAL, "Old Alignments: "); - context.logLine(LogLevel.CASUAL, sbOld.toString()); - context.logLine(LogLevel.CASUAL, "New Alignments: "); - context.logLine(LogLevel.CASUAL, sbNew.toString()); - } - - @Override - public Map serialize() { - Map map = new HashMap<>(); - - map.put("randomizeTypeEffectiveness", randomizeTypeEffectiveness.get()); - map.put("randomizeTreasureHunt", randomizeTreasureHunt.get()); - map.put("randomizeEnemies", randomizeEnemies.get()); - map.put("randomizeEnemyStats", randomizeEnemyStats.get()); - map.put("randomizeEnemyDigimon", randomizeEnemyDigimon.get()); - map.put("randomizeEnemyMoves", randomizeEnemyMoves.get()); - map.put("randomizeEnemyLoot", randomizeEnemyLoot.get()); - map.put("randomizeItemSpawns", randomizeItemSpawns.get()); - - return map; - } - - @Override - public void load(YamlMapping map) { - if (map == null) - return; - - this.randomizeTypeEffectiveness.set(Boolean.parseBoolean(map.string("randomizeTypeEffectiveness"))); - this.randomizeTreasureHunt.set(Boolean.parseBoolean(map.string("randomizeTreasureHunt"))); - this.randomizeEnemies.set(Boolean.parseBoolean(map.string("randomizeEnemies"))); - this.randomizeEnemyStats.set(Boolean.parseBoolean(map.string("randomizeEnemyStats"))); - this.randomizeEnemyDigimon.set(Boolean.parseBoolean(map.string("randomizeEnemyDigimon"))); - this.randomizeEnemyMoves.set(Boolean.parseBoolean(map.string("randomizeEnemyMoves"))); - this.randomizeEnemyLoot.set(Boolean.parseBoolean(map.string("randomizeEnemyLoot"))); - this.randomizeItemSpawns.set(Boolean.parseBoolean(map.string("randomizeItemSpawns"))); - } - -} diff --git a/src/main/java/net/digimonworld/decode/randomizer/utils/RandomizerUtils.java b/src/main/java/net/digimonworld/decode/randomizer/utils/RandomizerUtils.java deleted file mode 100644 index d2d056f..0000000 --- a/src/main/java/net/digimonworld/decode/randomizer/utils/RandomizerUtils.java +++ /dev/null @@ -1,86 +0,0 @@ -package net.digimonworld.decode.randomizer.utils; - -import java.util.ArrayList; -import java.util.List; -import java.util.ListIterator; - -import net.digimonworld.decodetools.data.keepdata.Digimon; -import net.digimonworld.decodetools.data.keepdata.EnemyData; -import net.digimonworld.decodetools.data.keepdata.EnemyData.ItemDrop; -import net.digimonworld.decodetools.data.keepdata.GlobalKeepData; -import net.digimonworld.decodetools.data.keepdata.Item; -import net.digimonworld.decodetools.data.keepdata.Item.ItemType; -import net.digimonworld.decodetools.data.keepdata.enums.DropType; -import net.digimonworld.decode.randomizer.RandoLogger.LogLevel; -import net.digimonworld.decode.randomizer.RandomizationContext; - -public class RandomizerUtils { - private RandomizerUtils() { - } - - public static List getUseableItems(GlobalKeepData data) { - List itemList = new ArrayList<>(); - for (ListIterator itr = data.getItems().listIterator(); itr.hasNext();) { - int i = itr.nextIndex(); - Item a = itr.next(); - - // filter technical, unused and Mt. Infinity items - if (a.getType() == ItemType.BASE || a.getUnk30() == 0 || (a.getUnk30() & 64) != 0 || (a.getUnk31() & 1) != 0) - continue; - - itemList.add(i + 1); - } - return itemList; - } - - public static List getMoveList(Digimon digi) { - List moves = new ArrayList<>(); - for (byte b : digi.getSkills()) - if (b != 0) - moves.add(b); - - return moves; - } - - public static List getEnemyDigimonList(GlobalKeepData keep) { - List itemList = new ArrayList<>(); - for (ListIterator itr = keep.getDigimonData().listIterator(); itr.hasNext();) { - int i = itr.nextIndex(); - Digimon a = itr.next(); - - if (a.getSkills()[0] == 0) - continue; - - itemList.add(i + 1); - } - return itemList; - } - - public static void logEnemyData(RandomizationContext context, EnemyData oldData) { - context.logLine(LogLevel.CASUAL, - String.format("ID %d | %s | Stats: %d %d %d %d %d %d", - oldData.getEnemyId(), - context.getLanguageKeep().getDigimonNames().getStringById(oldData.getDigimonId()), - oldData.getHp(), - oldData.getMp(), - oldData.getOffense(), - oldData.getDefense(), - oldData.getSpeed(), - oldData.getBrains())); - - context.logLine(LogLevel.CASUAL, - String.format("Moves: %s | %s | %s", - context.getLanguageKeep().getSkillNames().getStringById(oldData.getMove1()), - context.getLanguageKeep().getSkillNames().getStringById(oldData.getMove2()), - context.getLanguageKeep().getSkillNames().getStringById(oldData.getMove3()))); - - for (int i = 0; i < 3; i++) { - ItemDrop drop = oldData.getDrop(i); - String name = drop.getType() == DropType.CARD ? context.getLanguageKeep().getCardNames1().getStringById(drop.getId()) - : context.getLanguageKeep().getItemNames().getStringById(drop.getId()); - - context.logLine(LogLevel.CASUAL, String.format("Drop %d: %s | %s | %1.3f", i, drop.getType().name(), name, drop.getChance())); - } - - } -} diff --git a/src/main/resources/net/digimonworld/decode/randomizer/AboutScene.fxml b/src/main/resources/net/digimonworld/decode/randomizer/AboutScene.fxml index a894d00..82b6bba 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/AboutScene.fxml +++ b/src/main/resources/net/digimonworld/decode/randomizer/AboutScene.fxml @@ -9,14 +9,16 @@ - + - + diff --git a/src/main/resources/net/digimonworld/decode/randomizer/MainWindow.fxml b/src/main/resources/net/digimonworld/decode/randomizer/MainWindow.fxml index 46b95e4..74cd550 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/MainWindow.fxml +++ b/src/main/resources/net/digimonworld/decode/randomizer/MainWindow.fxml @@ -17,12 +17,14 @@ - +

- + @@ -38,8 +40,6 @@
- - - - - - - - - - - - + + + + + + + + + + + + diff --git a/src/main/resources/net/digimonworld/decode/randomizer/settings/BlackAgumon.png b/src/main/resources/net/digimonworld/decode/randomizer/settings/BlackAgumon.png deleted file mode 100644 index c3cb54578941b74d8c7915c67da746ed4c6bfa10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1395 zcmV-(1&sQMP)EX>4Tx04R}tkv&MmKpe$iTcsiu2O|`5$WR@`f~bh2RIvyaN?V~-2a`*`ph-iL z;^HW{799LotU9+0Yt2!bCVZf;JBE>hzEl0u6Z503ls?%w0>9pGmEM7-bHzq_qjhupOQBj;1h}Gm~L3a8^kl4 zmd<&fSYRbdAwDM_H|T=Ik6f2se&bwp*v~TsBa@mZ7Kp`S2g@DIN`^{2O&n2Fjq?3j zmle)ioYhK=weHDZ7|LraX|B^8MjT5>APEsNYAB-u3sG7%QcR?1Kjz^da{Nhh$>b`7 zkz)Z>sE`~#_#gc4)+|g-x=EoJ(EVcDA0t3;7iiXP`}^3onmKj!>Fn*_Gp+u90I9ojy+9T$jQ{`u24YJ`L;xWG5C8}lAC`##000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2jvG96fh*G(1M}>000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0009@Nkl4XnOaIs(-5zvbTec! z*FmJ(0{#Qit%jsa4b^6YAVcsP5M-(l0$cVJFkXzwYU4O4Loy|qvIMfJL-HM`t9~WU zkRpFzY|Fk+=X>va@4K_|u8_k^j;otHKkWK)A*WywbI0qKw(#>N=s>bl){aZMei(B8v@1Ngs zdUg(PGF#Zla}YoVOO#sz;P6iec}0P$vB-s&NhIbX67}6)B#D*_IVB7%$8xc=yA1%y zD++&|7W}6WF_S%j47>H=Yj(RGn$) z0U*ay52dvt##1jg;k+agtCxW9yFGLV?EtA%jiJmck#-rhR!qzhH(?QU$}Q)Ta}e-h#LN0tGO!Ia4ITDy1jllD6*e0!h@i$bPGKq_?%BP` z45hVV?1ZQZ+}Yhmv(bWS=y>z-6R&JpnWDf8Qy;PMOd@mU6d>#bPHwQ$s(@+esMhKM z5FE=z-|b=VU_Y{Q!>U--7&gCrzHa~@z)w@XVM;~2HV z81DhbQxC=U)mW(}|E<>QC@rl7yxFnbL=_M#+p%2O!%+Zy(Nf~(LA!yz+kZ zgl40aY95(t0%WMkG!IwJ81L8B~PZ$q-S3~fDv<${}O;t$zgYn=9i4 diff --git a/src/main/resources/net/digimonworld/decode/randomizer/settings/BlackGabumon.png b/src/main/resources/net/digimonworld/decode/randomizer/settings/BlackGabumon.png deleted file mode 100644 index 3df5cbc6cdf2a5438cec2c04917eee25a0116255..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1382 zcmV-s1)2JZP)EX>4Tx04R}tkv&MmKpe$iTcsiu2O|`5$WR@`f~bh2RIvyaN?V~-2a`*`ph-iL z;^HW{799LotU9+0Yt2!bCVZf;JBE>hzEl0u6Z503ls?%w0>9pGmEM7-bHzq_qjhupOQBj;1h}Gm~L3a8^kl4 zmd<&fSYRbdAwDM_H|T=Ik6f2se&bwp*v~TsBa@mZ7Kp`S2g@DIN`^{2O&n2Fjq?3j zmle)ioYhK=weHDZ7|LraX|B^8MjT5>APEsNYAB-u3sG7%QcR?1Kjz^da{Nhh$>b`7 zkz)Z>sE`~#_#gc4)+|g-x=EoJ(EVcDA0t3;7iiXP`}^3onmKj!>Fn*_Gp+u90I9ojy+9T$jQ{`u24YJ`L;xWG5C8}lAC`##000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2jvG96f+MXK`0>r000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0009$Nkl(hFKk3% z@BlBFSqEMJ3Ws(AFaYE1V225)wA!3xx>rf;A|fITx!uDV3?dHKbusLBG3<8(tA9~3 z>okniYMd)4w|j`k$43Cbu-^p$Bs1$6_Pbnh^xQA`9^jR)Zg6(6gG#Fn$8i7vg+c+2 z<3!H&t7;jCiuEsoLrVe3$#=Hyv3U_^(p}fZ()fjmAY$YME+QhaGKn;2>;8?npBqy+ zRQd!F2MwC9B4+J+0ICogzt8`0f=tuIWF^5#6Dv`!U`jfXN6DV7BzP{_x=6YK7<8TP zZvy}}FXB`0s8*{=&7_D!#7f^0hC^Ei5FgT7Ynmop*X6{Y?r#TH3niXxmIM&wBvDo_ zyAp{r41+vRw*2?t(5eS0U)@aoXxld5Q^LXsTU11T>$q*(FimrYxOs5+xtuBvZ3G}E zkHip*#gr4asE9-iVjSDHr|f?o^2iZHF{xNBVr8u-9RCcgULG;5)!#U*!O6;4Wz>o0GxQLSaJZl za~21YOY`fs5erHD{Uc&jT5S}I#mJA_E0)k3G|?M0v9a-XmXOcqXSTdwOMqm*y+IRq zx65q*GI1*Q-5WFk0C%^`Q}+FlG5q4lG4_fj7Sy-%2PGWZIe-UvPtUL1FlAFmyk-yk zT`Y}XxRH8#ehoZ0kz>fjg~gCD06;c%#8@asZuc+}ix}s+dO1VB%C~5J5F}PcP=cZ= oPwC|WN5S*HBPz~3ICL9-0jeXrBadlL8vpEX>4Tx04R}tkv&MmKpe$iTcsiu2O|`5$WR@`f~bh2RIvyaN?V~-2a`*`ph-iL z;^HW{799LotU9+0Yt2!bCVZf;JBE>hzEl0u6Z503ls?%w0>9pGmEM7-bHzq_qjhupOQBj;1h}Gm~L3a8^kl4 zmd<&fSYRbdAwDM_H|T=Ik6f2se&bwp*v~TsBa@mZ7Kp`S2g@DIN`^{2O&n2Fjq?3j zmle)ioYhK=weHDZ7|LraX|B^8MjT5>APEsNYAB-u3sG7%QcR?1Kjz^da{Nhh$>b`7 zkz)Z>sE`~#_#gc4)+|g-x=EoJ(EVcDA0t3;7iiXP`}^3onmKj!>Fn*_Gp+u90I9ojy+9T$jQ{`u24YJ`L;xWG5C8}lAC`##000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2jvG96f`O%1ZtrG000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}000AJNkl5dkMO@* z12hScbX^OL`LW0C$#-r8G%+$__r4l~WBaZ(K(ov?cog%;Is%{pn*H(Y5JktzdwryR z79%z`Hve+Dd`e+H5|rQ35|#iuVVP|l=f1tZV3}>~=LASNHYCrFVsy!Oh!8oS&t_1p zSI_vDGC&3K*EJ;j|gTN1>(_x3nd|~gM4!cH< z2?bD$PzGKCB&Wm92GJlDU^*T(06=-o^V}iodb?x0-QslEIhiXnj}Dg@04&aAzCc-) zPNp_MGnp@1iXa1~EK9o{i6O@rV=x_$;5UXLQbVfI0L}GwZ($6o2e{tu$n)HB*#3CN zWWGRM*Ek(^y+A(3+v|(PFvd98%>J@0oom~k5Q{619j9R-j!nJ+M#%>ck5UuL_^-cZesVaNdU6(O`h%KmIN!|AYdf}yG^CkXr= zL~D)p>e<1NrKn3q2Gs;I6QosDg}Sb-vq@sCX$oOzt&!(B%CdAYNJt2Sa!jI0pp^gp z@oaH9M#_1brdB~>rAU?;i81(HfXvXMC|b=MNv^6YSbP1lP}j9X7C$Scf?4MW0ZC^m znT|&`fB-nXMNElkoG$~2??VlMCn@iA!2WoKQVLpY7-O)^HZ~(KmkYGkRvrAti}iMY zJR?n0D5dNeW@L#HeoXJ-nV8>)=~kKQb^O(5-I2Q?f<3nu;w%PSRO*9B-W2mx%j)NC__C5 z2nGO2l=Yru^13Vm{v6)p9GUejE$j#S`Uo0>i#T1|%MeD0_!!1u1HkX_yADYFy|kR; zpC$Nx0h=@iLf=ln?*U}cg~~|`N3N|8W3c}PEVGRzvM35$Pi23w%r>psOTyQyXX{}3 zBKgzt2*#M!IX<7y=lT6ai2P9P?!r+@wa6cG{qNib_$O$wF(1jAuKADrA@j&O`f$GL cw|p1-3$8{V$T*`3bpQYW07*qoM6N<$g4qUEX>4Tx04R}tkv&MmKpe$iTcsiu2O|`5$WR@`f~bh2RIvyaN?V~-2a`*`ph-iL z;^HW{799LotU9+0Yt2!bCVZf;JBE>hzEl0u6Z503ls?%w0>9pGmEM7-bHzq_qjhupOQBj;1h}Gm~L3a8^kl4 zmd<&fSYRbdAwDM_H|T=Ik6f2se&bwp*v~TsBa@mZ7Kp`S2g@DIN`^{2O&n2Fjq?3j zmle)ioYhK=weHDZ7|LraX|B^8MjT5>APEsNYAB-u3sG7%QcR?1Kjz^da{Nhh$>b`7 zkz)Z>sE`~#_#gc4)+|g-x=EoJ(EVcDA0t3;7iiXP`}^3onmKj!>Fn*_Gp+u90I9ojy+9T$jQ{`u24YJ`L;xWG5C8}lAC`##000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2jvG96$cG;r_jv+000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}000A8NklBjE6#f)E7~H{AGZ+d@$Rh9xG6D1>G+G?}s(vR#Mx9q*n`&NZbSVm&aC zPSS^R-}m18?i9RiHzDKt_D%!9cDotKF**LPW8J&_&-Zw$vE`cZNt!yxhH>mo8vWK? zb6xj+7l~I>`M3yV1#nH~Buz0dON@%b8h2&jLu7EQh1O^VK_$*4O_3;NuFJ9O+dI7u zqmGB8A&KMJMMQD(e|`UPXX|Z z<-{G1$7lrshH-2N%d-r-2mO_a_rV}Cxrq3ft5Wdb!lCTH$5FL^_*)M!6%(E)g0`2g@P&p|%q`u0u}PL(h5@eg$@1#r47t%*{YmnDXA zjHCB&Ou41Z>qe2u969m67$hPW`I9uo6u^!U7m0}n;f#u6C7XTxLrp#N0MgviIhFs5 z*$g+Am+1BTl_t*@qZ>trd`aHCERoQOQs&uV9OLt+&}swSDB^}vbD{}LwkJ7O3jt_w zHw^%-Ag~C}vkW(vm*xQ%d4G!GitTnY7!`$fiD*<57%u;ETxkfoe@K*C@ezqq$g>Qu zUVp^17hh^2@MWOPY(CMP{7x8JWxZ;%NQz~hfP9ycd6t>uUcbMBUD{crdUk!*;tFw1Pl$0$po!!gOJ9>_jQ&J@OmC@nEo0?mJXrZi002ovPDHLkV1gIcjMV@D diff --git a/src/main/resources/net/digimonworld/decode/randomizer/settings/BlackWarGreymon.png b/src/main/resources/net/digimonworld/decode/randomizer/settings/BlackWarGreymon.png deleted file mode 100644 index cb8d020e56ca576825752066bd751766aaeb9f92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1485 zcmV;;1v2`HP)EX>4Tx04R}tkv&MmKpe$iTcsiu2O|`5$WR@`f~bh2RIvyaN?V~-2a`*`ph-iL z;^HW{799LotU9+0Yt2!bCVZf;JBE>hzEl0u6Z503ls?%w0>9pGmEM7-bHzq_qjhupOQBj;1h}Gm~L3a8^kl4 zmd<&fSYRbdAwDM_H|T=Ik6f2se&bwp*v~TsBa@mZ7Kp`S2g@DIN`^{2O&n2Fjq?3j zmle)ioYhK=weHDZ7|LraX|B^8MjT5>APEsNYAB-u3sG7%QcR?1Kjz^da{Nhh$>b`7 zkz)Z>sE`~#_#gc4)+|g-x=EoJ(EVcDA0t3;7iiXP`}^3onmKj!>Fn*_Gp+u90I9ojy+9T$jQ{`u24YJ`L;xWG5C8}lAC`##000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2jvG96$Tl1W;O8u000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}000A|Nkl-W3y#FI{Mz!S{iGx~|=o!($AI7ojJ zh&Jhcq^(bh2mr@%cu@PJDf*)+%GD+qd{(YDk;xahPMEwGL?2;G28B3Qbv@1i(CI*f zu5}wG>yM@Y0M~U!w%^#$y? zkI7_6L4%kqF?sT_45HNjP5?wCnS4PBC=pmuY^ea*A5D?VJvc}1(2!)s_MCze6h528>W)YVh4cK z-Yyt?X3u?Ok91`61pt8Od05PBB+^+dW;Ou8p8F^kbCHs_4n$!kfSOIiFjmTiTsla? z{18irO#L#5HkG2-FhGAa#pT(tvKvn(lW<*^Cq^y-iF6hZ4^|`)kq+IL%Lo9@5|m_d zP8v(|saQa@J0RahP^#E0b^s75nO5M*$#+~`oug8Dgl)HA7zU?KIeB8>w*irg!fF0w zGRf@_fCvDIbQS;t;FA5=R6;tv0a~rr3Y*2Y1gLJ_-uw9RO%D!`x_%1!dqE^KKqg;6 ztyV+5Ugs<}iFF+c0^FC>D#z<#MRiYDya_=JGrbp6BuYVUr(G*djLX0mOPOcFj~X zRh@ZQ14iQy4!&c#9ERFatzywex!OdfQh{Yzd|w}CgP4ebwT&Nf-3IDn@ZMgZ@~sjD zh_1{3a`IKiH==ispBD(v36 nmoVGfd9RHqA9kWXPh8{=6KBEX>4Tx04R}tkv&MmKpe$iTcsiu2O|`5$WR@`f~bh2RIvyaN?V~-2a`*`ph-iL z;^HW{799LotU9+0Yt2!bCVZf;JBE>hzEl0u6Z503ls?%w0>9pGmEM7-bHzq_qjhupOQBj;1h}Gm~L3a8^kl4 zmd<&fSYRbdAwDM_H|T=Ik6f2se&bwp*v~TsBa@mZ7Kp`S2g@DIN`^{2O&n2Fjq?3j zmle)ioYhK=weHDZ7|LraX|B^8MjT5>APEsNYAB-u3sG7%QcR?1Kjz^da{Nhh$>b`7 zkz)Z>sE`~#_#gc4)+|g-x=EoJ(EVcDA0t3;7iiXP`}^3onmKj!>Fn*_Gp+u90I9ojy+9T$jQ{`u24YJ`L;xWG5C8}lAC`##000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2jvG96gnLOI^rMz000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}000A?NklF|9LGN+nIjP@p{Fg|+71y|*n%KQ z9h4yUAQ5=z5_%B?LArJ5=uJetc-cHHw1=d_5`=q5j38L3-Ajp!%jSA8A^1N^i4Lz<{fGP&3 zdnW?WOawT+5GNc8kY0!%1iyZVOfpeX+O0)IDk)-&AbR)xr4k%g{Z843OJxhFzH}Vo zo}Wcv1e?v00Hm@7N&ef|X>L9INh(`laCn$ZGC?KpT@he_^g_HuSY9F$s;}DUP2!s%X z0BXhYY-R?)CJMg`;FJ^Lx^4aX2EfvK(RCeefRRZiN<^fKARG#)zI*oKjPv9yl>`Vk4c5ZWal)G|IO2o<8!6^SEUVH&e;;+WhHOHmFpexxa+NcLESa zQ#cf$y{C^Cv$Fs^eQ*_k{{BY*)VH2ze`D3Pi1QNBON~4?)5#N=NZEz4w*3EF%5XliJvc!TS|Uj>Za zZDaEFSJ~mp{aqqE7XV7`dwrl0em>m%B1IJ0xll4*CBaDm;#?P_j>T!LS{FFs(4WOk zh`!kfvcQ^}j*;6eaxpSVZnG$ZyF6!dF*3>M^E{%@)O5_YY*c+rO~)90p6AWD$@1L6 zA^fU++{hPwa+^iojGHz;Di$4w0Y-jtUbZ{o(4WOEOZajtSP!PxKDnNHkLttCkLcs| hALV?M4TMi?fZvi`<^|5N2wwmI002ovPDHLkV1oGEsC@tc diff --git a/src/main/resources/net/digimonworld/decode/randomizer/settings/builtinRenamingPreset.csv b/src/main/resources/net/digimonworld/decode/randomizer/settings/builtinRenamingPreset.csv deleted file mode 100644 index 705d1f8..0000000 --- a/src/main/resources/net/digimonworld/decode/randomizer/settings/builtinRenamingPreset.csv +++ /dev/null @@ -1,15 +0,0 @@ -renamingPresets/_general.csv -renamingPresets/_general_digimon.csv -renamingPresets/DigimonNames.csv -renamingPresets/CardNames1.csv -renamingPresets/FinisherNames.csv -renamingPresets/AccessoryNames.csv -renamingPresets/CardNames2.csv -renamingPresets/CardSetNames.csv -renamingPresets/CharacterNames.csv -renamingPresets/GlossaryNames.csv -renamingPresets/ItemNames.csv -renamingPresets/keep-15.csv -renamingPresets/keep-39.csv -renamingPresets/KeyItemNames.csv -renamingPresets/MedalNames.csv \ No newline at end of file diff --git a/src/main/resources/net/digimonworld/decode/randomizer/settings/itemSpawnMapping.csv b/src/main/resources/net/digimonworld/decode/randomizer/settings/itemSpawnMapping.csv deleted file mode 100644 index d56052a..0000000 --- a/src/main/resources/net/digimonworld/decode/randomizer/settings/itemSpawnMapping.csv +++ /dev/null @@ -1,50 +0,0 @@ -can01,12 -can02,12 -can03,12 -can04,12 -des01,12 -des02,12 -des03,12 -des04,12 -des05,12 -fie01,12 -fie02,12 -fie03,12 -fie04,12 -fie05,12 -for01,12 -for02,6 -for03,6 -for04,12 -for05,12 -gro01,6 -gro02,6 -gro03,6 -gro04,6 -gro05,6 -gro06,6 -mar01,12 -mar02,13 -mar03,12 -mar04,13 -mar05,12 -mar06,12 -sea01,12 -sea02,12 -sea03,12 -sea04,12 -sno01,12 -sno02,12 -sno03,6 -sno04,6 -tem01,6 -tem02,6 -tem03,6 -vol01,6 -vol03,6 -vol04,12 -vol05,6 -wat01,6 -wat02,6 -wat03,6 -wat04,6 \ No newline at end of file From 604bf4ebd39257dceba55b4cecb7c2adb0275b7f Mon Sep 17 00:00:00 2001 From: Thertzlor Date: Tue, 28 Oct 2025 15:36:11 +0100 Subject: [PATCH 47/54] undub and name randomizer in separate files --- .../randomizer/settings/NamingSettings.java | 67 +----- .../settings/RandomizerSettings.java | 7 +- .../settings/StringRandomizeSettings.java | 210 ++++++++++++++++++ .../decode/randomizer/MainWindow.fxml | 2 +- 4 files changed, 223 insertions(+), 63 deletions(-) create mode 100644 src/main/java/net/digimonworld/decode/randomizer/settings/StringRandomizeSettings.java diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java index 058ac57..9f4ed17 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/NamingSettings.java @@ -6,7 +6,6 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.Random; import java.util.stream.Collectors; import java.io.BufferedWriter; import java.nio.file.StandardCopyOption; @@ -62,7 +61,6 @@ public class NamingSettings implements Setting { private final List skippable = List.of("", "None", "Unused Item", "???", "NO DATA", "n"); private final BooleanProperty renameEnabled = new SimpleBooleanProperty(); - private final BooleanProperty randomizeEnabled = new SimpleBooleanProperty(); private final BooleanProperty camelCase = new SimpleBooleanProperty(true); private final BooleanProperty manualCsv = new SimpleBooleanProperty(); private final BooleanProperty replaceAll = new SimpleBooleanProperty(true); @@ -70,11 +68,9 @@ public class NamingSettings implements Setting { private final BooleanProperty ogre = new SimpleBooleanProperty(false); private final BooleanProperty blackPrefix = new SimpleBooleanProperty(false); private final Map randoMap = new HashMap<>(); - private final List randoTypes = List.of("Digimon Names", "Finisher Names", "Skill Names", "Character Names", "Item Names", "Medal Names"); private final List priorities = List.of("_general.csv", "_general_digimon.csv", "DigimonNames.csv", "CardNames1.csv", "FinisherNames.csv"); private final Map repMap = new HashMap<>(); - private Accordion mainAc; /** * Visualization of a replacement map: * @@ -100,7 +96,7 @@ public class NamingSettings implements Setting { * DIGIMONMULTI designates names like WarGreymon or MetalGarurumon. * * All other DIGIMON names are simply other terms contained in a file - * designated as Digijmon name file. + * designated as Digimon name file. * * Everything else is classified as "GENERAL" * @@ -118,13 +114,6 @@ private static TermType classifyTerm(String term, String path) { return digiNamePaths.contains(path) ? (term.matches(".*[a-z][A-Z].*") ? TermType.DIGIMONMULTI : TermType.DIGIMON) : TermType.GENERAL; } - private static void btxSwitch(BTXEntry btxA, BTXEntry btxB) { - String a = btxA.getString(); - String b = btxB.getString(); - btxA.setString(b); - btxB.setString(a); - } - /** * This class does everything that has to do with directly replacing * strings. @@ -493,20 +482,13 @@ private static EventHandler buildHandler(File targetDir) { @Override public TitledPane create(GlobalKeepData data, LanguageKeep language) { - mainAc = new Accordion(); VBox restoreBox = new VBox(8); - VBox randoBox = new VBox(8); restoreBox.setAlignment(Pos.TOP_LEFT); - randoBox.setAlignment(Pos.TOP_LEFT); - TitledPane pane = new TitledPane("Edit Names", mainAc); - TitledPane restorePane = new TitledPane("Restore original names", restoreBox); - restorePane.setId("restore"); - mainAc.setExpandedPane(restorePane); - TitledPane randoPane = new TitledPane("Randomize names", randoBox); - randoPane.setId("random"); + TitledPane pane = new TitledPane("Undub/Editing Settings", restoreBox); + pane.setCollapsible(false); File csvDir = new File(".\\renamingPresets\\"); @@ -578,17 +560,7 @@ public TitledPane create(GlobalKeepData data, LanguageKeep language) { pickleCheck, curExp, camelExp); - randoBox.getChildren().addAll( - JavaFXUtils.buildToggleSwitch("Enabled", Optional.empty(), Optional.of(randomizeEnabled))); - - for (String r : randoTypes) { - randoMap.put(r, new SimpleBooleanProperty(false)); - ToggleSwitch swit = JavaFXUtils.buildToggleSwitch(r, Optional.empty(), Optional.of(randoMap.get(r))); - swit.disableProperty().bind(randomizeEnabled.not()); - randoBox.getChildren().add(swit); - } - mainAc.getPanes().addAll(restorePane, randoPane); return pane; } @@ -693,12 +665,10 @@ private ArrayList parseReplacements(File f, String path, boolean ad @Override public void randomize(RandomizationContext context) { - String mode = mainAc.getExpandedPane().getId(); - if (!(mode.equals("restore") ? renameEnabled.get() : randomizeEnabled.get())) return; PathResolver res = new PathResolver(context); - if (mode.equals("restore")) { + // Main logic for dub -> sub conversion try { File manualCsvDir = new File(".\\renamingPresets\\"); @@ -789,37 +759,13 @@ public void randomize(RandomizationContext context) { repMap.clear(); replacementMap.clear(); - - } else { - //Randomizing different lists of strings - Random rand = new Random(context.getInitialSeed() * "ShuffleTerms".hashCode()); - randoTypes.stream().filter(k -> randoMap.get(k).get()).map(s -> s.replaceAll(" ", "")).forEach(name -> { - try { - //creating a list of all btx entries in the payload without empty/filler fields - ArrayList entries = new ArrayList<>(res.resolve(name).getValue().getEntries().stream().map(e -> e.getValue()).filter(v -> !skippable.contains(v.getString())).collect(Collectors.toList())); - - BTXEntry firstEntry = null; - //Switching the value of a random pair of BTX entries and removing them from the list. - while (entries.size() > 1) { - int i = rand.nextInt(entries.size()); - BTXEntry btxA = entries.remove(i); - if (firstEntry == null) firstEntry = btxA; - int n = rand.nextInt(entries.size()); - BTXEntry btxB = entries.remove(n); - btxSwitch(btxA, btxB); - } - //In case there's an uneven number of entries we switch the leftover entry with the first entry we processed previously - if (entries.size() == 1) btxSwitch(firstEntry, entries.get(0)); - } catch (ParseException e) {e.printStackTrace();} - }); - } - } + } + @Override public Map serialize() { Map map = new HashMap<>(); map.put("renameEnabled", renameEnabled.get()); - map.put("randomizeEnabled", randomizeEnabled.get()); map.put("camelCase", camelCase.get()); map.put("manualCsv", manualCsv.get()); map.put("replaceAll", replaceAll.get()); @@ -838,7 +784,6 @@ public void load(YamlMapping map) { List activeList = list == null ? new ArrayList<>() : list.values().stream().map(a -> a.toString()).collect(Collectors.toList()); randoMap.forEach((a, b) -> b.set(activeList.contains(a))); renameEnabled.set(Boolean.parseBoolean(map.string("renameEnabled"))); - randomizeEnabled.set(Boolean.parseBoolean(map.string("randomizeEnabled"))); camelCase.set(Boolean.parseBoolean(map.string("camelCase"))); manualCsv.set(Boolean.parseBoolean(map.string("manualCsv"))); replaceAll.set(Boolean.parseBoolean(map.string("replaceAll"))); diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/RandomizerSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/RandomizerSettings.java index af868d9..0e5ca75 100644 --- a/src/main/java/net/digimonworld/decode/randomizer/settings/RandomizerSettings.java +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/RandomizerSettings.java @@ -24,10 +24,12 @@ public class RandomizerSettings { private NamingSettings namingSettings = new NamingSettings(); + private StringRandomizeSettings stringRandoSettings = new StringRandomizeSettings(); public void randomize(RandomizationContext context) { logSettings(context); namingSettings.randomize(context); + stringRandoSettings.randomize(context); } private void logSettings(RandomizationContext context) { @@ -67,12 +69,15 @@ public List create(GlobalKeepData inputData, LanguageKeep languageKeep) { private List>> getSettingsMap() { return List.of( - Tuple.of("Patch Names", Arrays.asList(namingSettings))); + Tuple.of("Patch Names", Arrays.asList(namingSettings)), + Tuple.of("Randomize Names", Arrays.asList(stringRandoSettings)) + ); } public Map serialize() { Map map = new HashMap<>(); map.put("namingSettings", namingSettings.serialize()); + map.put("stringRandomSettings", stringRandoSettings.serialize()); return map; } diff --git a/src/main/java/net/digimonworld/decode/randomizer/settings/StringRandomizeSettings.java b/src/main/java/net/digimonworld/decode/randomizer/settings/StringRandomizeSettings.java new file mode 100644 index 0000000..3531d20 --- /dev/null +++ b/src/main/java/net/digimonworld/decode/randomizer/settings/StringRandomizeSettings.java @@ -0,0 +1,210 @@ +package net.digimonworld.decode.randomizer.settings; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Random; +import java.util.stream.Collectors; + +import java.text.ParseException; +import java.util.NoSuchElementException; + +import org.controlsfx.control.ToggleSwitch; + +import com.amihaiemil.eoyaml.YamlMapping; +import com.amihaiemil.eoyaml.YamlSequence; + +import net.digimonworld.decodetools.data.keepdata.GlobalKeepData; +import net.digimonworld.decodetools.data.keepdata.LanguageKeep; +import net.digimonworld.decodetools.res.kcap.NormalKCAP; +import net.digimonworld.decodetools.res.payload.BTXPayload; +import net.digimonworld.decodetools.core.Tuple; +import net.digimonworld.decodetools.res.payload.BTXPayload.BTXEntry; + +import javafx.beans.property.BooleanProperty; +import javafx.beans.property.SimpleBooleanProperty; + +import javafx.geometry.Pos; + +import javafx.scene.control.TitledPane; +import javafx.scene.layout.VBox; + +import net.digimonworld.decode.randomizer.RandomizationContext; +import net.digimonworld.decode.randomizer.utils.JavaFXUtils; + +public class StringRandomizeSettings implements Setting { + + private final List skippable = List.of("", "None", "Unused Item", "???", "NO DATA", "n"); + private final BooleanProperty randomizeEnabled = new SimpleBooleanProperty(); + private final Map randoMap = new HashMap<>(); + private final List randoTypes = List.of("Digimon Names", "Finisher Names", "Skill Names", "Character Names", "Item Names", "Medal Names"); + + /** + * Visualization of a replacement map: + * + * { "part0\arcv\Keep\LanguageKeep_jp.res\11:12" : [ [0,4,2] , [8,13,-1] ] } + * + * Path schema works like this: + * + * [string path to the actual file]/[index of BTX file]:[BTX line] + * + * Replacement info pattern: + * + * [match start, match end, offset of result] + * + * Replacements are saved to prevent replacing terms that have already been + * processed by a prior replacement. The offsets are used to map a position + * of a match to its position in the unmodified line, making it possible to + * exclude replacing matches at specific indices in a line based on the + * unmodified contents. + */ + public Map> replacementMap = new HashMap<>(); + + /** + * DIGIMONMULTI designates names like WarGreymon or MetalGarurumon. + * + * All other DIGIMON names are simply other terms contained in a file + * designated as Digijmon name file. + * + * Everything else is classified as "GENERAL" + * + */ + protected enum TermType { + GENERAL, + DIGIMON, + DIGIMONMULTI + } + + private static void btxSwitch(BTXEntry btxA, BTXEntry btxB) { + String a = btxA.getString(); + String b = btxB.getString(); + btxA.setString(b); + btxB.setString(a); + } + + + @Override + public TitledPane create(GlobalKeepData data, LanguageKeep language) { + + + VBox randoBox = new VBox(8); + + randoBox.setAlignment(Pos.TOP_LEFT); + + TitledPane pane = new TitledPane("Randomizer Settings", randoBox); + + + pane.setCollapsible(false); + + + randoBox.getChildren().addAll( + JavaFXUtils.buildToggleSwitch("Enabled", Optional.empty(), Optional.of(randomizeEnabled))); + + for (String r : randoTypes) { + randoMap.put(r, new SimpleBooleanProperty(false)); + ToggleSwitch swit = JavaFXUtils.buildToggleSwitch(r, Optional.empty(), Optional.of(randoMap.get(r))); + swit.disableProperty().bind(randomizeEnabled.not()); + randoBox.getChildren().add(swit); + } + + return pane; + } + + private class PathResolver { + + private final RandomizationContext context; + private final Map shortcuts = new HashMap<>(); + public final Map keepMap = new HashMap<>(); + + public PathResolver(RandomizationContext context) { + this.context = context; + this.shortcuts.put("keep", "Keep\\LanguageKeep_jp.res"); + this.shortcuts.put("map", "map\\text"); + this.keepMap.put("DigimonNames", "11"); + this.keepMap.put("ItemNames", "0"); + this.keepMap.put("KeyItemNames", "3"); + this.keepMap.put("AccessoryNames", "5"); + this.keepMap.put("SkillNames", "7"); + this.keepMap.put("FinisherNames", "9"); + this.keepMap.put("CharacterNames", "13"); + this.keepMap.put("NatureNames", "16"); + this.keepMap.put("MedalNames", "17"); + this.keepMap.put("GlossaryNames", "25"); + this.keepMap.put("CardNames1", "27"); + this.keepMap.put("CardNames2", "28"); + this.keepMap.put("CardSetNames", "30"); + } + + + + /** + * Resolves a path directly into BTX payloads while applying shortcuts + */ + public Tuple resolve(String path) throws ParseException { + ArrayList frag = new ArrayList<>( + List.of((keepMap.containsKey(path) ? ("keep-" + keepMap.get(path)) : path).split("-"))); + int btxIndex = Integer.parseInt(frag.remove(frag.size() - 1)); + String finalPath = "part0\\arcv\\" + frag.stream() + .map(s -> shortcuts.containsKey(s) ? shortcuts.get(s) : s) + .collect(Collectors.joining("\\")); + try { + NormalKCAP pk = (NormalKCAP) context.getFile(finalPath).get(); + if (frag.get(frag.size() - 1).equals("keep")) pk = (NormalKCAP) pk.get(0); + return new Tuple<>(finalPath + "\\" + btxIndex, (BTXPayload) pk.get(btxIndex)); + } catch (NoSuchElementException exc) {throw new ParseException("csv not correctly mapped", 0);} + } + } + + + + + @Override + public void randomize(RandomizationContext context) { + + + PathResolver res = new PathResolver(context); + + //Randomizing different lists of strings + Random rand = new Random(context.getInitialSeed() * "ShuffleTerms".hashCode()); + randoTypes.stream().filter(k -> randoMap.get(k).get()).map(s -> s.replaceAll(" ", "")).forEach(name -> { + try { + //creating a list of all btx entries in the payload without empty/filler fields + ArrayList entries = new ArrayList<>(res.resolve(name).getValue().getEntries().stream().map(e -> e.getValue()).filter(v -> !skippable.contains(v.getString())).collect(Collectors.toList())); + + BTXEntry firstEntry = null; + //Switching the value of a random pair of BTX entries and removing them from the list. + while (entries.size() > 1) { + int i = rand.nextInt(entries.size()); + BTXEntry btxA = entries.remove(i); + if (firstEntry == null) firstEntry = btxA; + int n = rand.nextInt(entries.size()); + BTXEntry btxB = entries.remove(n); + btxSwitch(btxA, btxB); + } + //In case there's an uneven number of entries we switch the leftover entry with the first entry we processed previously + if (entries.size() == 1) btxSwitch(firstEntry, entries.get(0)); + } catch (ParseException e) {e.printStackTrace();} + }); + + } + + @Override + public Map serialize() { + Map map = new HashMap<>(); + map.put("randomizeEnabled", randomizeEnabled.get()); + map.put("randomChecked", randoMap.entrySet().stream().filter(a -> a.getValue().get()).map(Map.Entry::getKey).collect(Collectors.toList())); + return map; + } + + @Override + public void load(YamlMapping map) { + if (map == null) return; + + YamlSequence list = map.yamlSequence("randomChecked"); + List activeList = list == null ? new ArrayList<>() : list.values().stream().map(a -> a.toString()).collect(Collectors.toList()); + randoMap.forEach((a, b) -> b.set(activeList.contains(a))); + randomizeEnabled.set(Boolean.parseBoolean(map.string("randomizeEnabled"))); + } +} diff --git a/src/main/resources/net/digimonworld/decode/randomizer/MainWindow.fxml b/src/main/resources/net/digimonworld/decode/randomizer/MainWindow.fxml index 74cd550..50c52bf 100644 --- a/src/main/resources/net/digimonworld/decode/randomizer/MainWindow.fxml +++ b/src/main/resources/net/digimonworld/decode/randomizer/MainWindow.fxml @@ -40,7 +40,7 @@