diff --git a/core/src/main/java/com/openeggbert/core/configuration/ConfigDef.java b/core/src/main/java/com/openeggbert/core/configuration/ConfigDef.java index 6ab0b2a..235df64 100644 --- a/core/src/main/java/com/openeggbert/core/configuration/ConfigDef.java +++ b/core/src/main/java/com/openeggbert/core/configuration/ConfigDef.java @@ -21,6 +21,7 @@ package com.openeggbert.core.configuration; import com.openeggbert.core.main.OpenEggbertException; import com.openeggbert.core.utils.OpenEggbertUtils; +import com.pixelgamelibrary.api.Pixel; import java.util.HashMap; import java.util.Map; import lombok.ToString; @@ -35,8 +36,7 @@ public class ConfigDef { private Map map = new HashMap<>(); public ConfigDef(String textContentofConfigDefFile) { - OpenEggbertUtils - .lines(textContentofConfigDefFile) + Pixel.utils().splitStringToLinesAsStream(textContentofConfigDefFile) .filter(l -> !l.trim().isEmpty()) .filter(l -> !l.trim().startsWith(HASH_CHARACTER)) .filter(l -> l.contains(EQUALS_CHARACTER)) diff --git a/core/src/main/java/com/openeggbert/core/main/OpenEggbertGame.java b/core/src/main/java/com/openeggbert/core/main/OpenEggbertGame.java index 139ebf5..0493c30 100644 --- a/core/src/main/java/com/openeggbert/core/main/OpenEggbertGame.java +++ b/core/src/main/java/com/openeggbert/core/main/OpenEggbertGame.java @@ -19,7 +19,6 @@ /////////////////////////////////////////////////////////////////////////////////////////////// package com.openeggbert.core.main; -import com.openeggbert.core.utils.AssetsTxt; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.Camera; @@ -35,11 +34,9 @@ import com.openeggbert.core.mod.Mod; import com.openeggbert.core.mod.ModIdentification; import com.openeggbert.core.screen.GameSpaceListScreen; import com.openeggbert.core.screen.InitScreen; -import com.pixelgamelibrary.api.storage.Storage; import com.openeggbert.core.configuration.OpenEggbertDisplayMode; import com.pixelgamelibrary.api.Game; import com.openeggbert.core.utils.OpenEggbertUtils; -import com.pixelgamelibrary.api.Pixel; import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -65,7 +62,6 @@ public class OpenEggbertGame extends Game { private int widthInPixels = 640; private Camera camera; private Viewport viewport; - private AssetsTxt assets; private ConfigDef configDef; private OpenEggbertDisplayMode openEggbertDisplayMode = OpenEggbertDisplayMode.WINDOW; @@ -91,7 +87,6 @@ public class OpenEggbertGame extends Game { //.setToOrtho(false,640,480); - assets = new AssetsTxt(Gdx.files.internal("assets.txt").readString()); System.out.println("Searching mods"); for(FileHandle f:Gdx.files.internal(".").list()) { @@ -100,31 +95,31 @@ public class OpenEggbertGame extends Game { FileHandle embeddedModsDirectory = Gdx.files.internal("embedded_mods"); System.out.println("embeddedModsDirectory.exists=" + embeddedModsDirectory.exists()); System.out.println("embeddedModsDirectory.list().length=" + embeddedModsDirectory.list().length); - for (FileHandle embeddedModGroup : assets.list(embeddedModsDirectory)) { - if(embeddedModGroup.name().equals("README.md"))continue; - System.out.println("Found group " + embeddedModGroup.name()); - for (FileHandle embeddedMod : assets.list(embeddedModGroup)) { - System.out.println("Found mod " + embeddedMod.name()); - - FileHandle modXml = null; - for(FileHandle file: assets.list(embeddedMod)) { - if(file.name().equals("mod.xml")) { - modXml = file; - } - } - - if (modXml == null) { - continue; - } - System.out.println("Found mod: " + embeddedMod.name()); - - Mod mod = new Mod(modXml.readString()); - embeddedMods.add(mod); - System.out.println("embeddedMods.size(): " + embeddedMods.size()); -// for (int i = 0; i < 42; i++) embeddedMods.add(mod);//for testing purposes - } - - } +// for (FileHandle embeddedModGroup : assets.list(embeddedModsDirectory)) { +// if(embeddedModGroup.name().equals("README.md"))continue; +// System.out.println("Found group " + embeddedModGroup.name()); +// for (FileHandle embeddedMod : assets.list(embeddedModGroup)) { +// System.out.println("Found mod " + embeddedMod.name()); +// +// FileHandle modXml = null; +// for(FileHandle file: assets.list(embeddedMod)) { +// if(file.name().equals("mod.xml")) { +// modXml = file; +// } +// } +// +// if (modXml == null) { +// continue; +// } +// System.out.println("Found mod: " + embeddedMod.name()); +// +// Mod mod = new Mod(modXml.readString()); +// embeddedMods.add(mod); +// System.out.println("embeddedMods.size(): " + embeddedMods.size()); +//// for (int i = 0; i < 42; i++) embeddedMods.add(mod);//for testing purposes +// } +// +// } //// batch = new SpriteBatch(); //batch.setProjectionMatrix(viewport.getCamera().combined); diff --git a/core/src/main/java/com/openeggbert/core/screen/InitScreen.java b/core/src/main/java/com/openeggbert/core/screen/InitScreen.java index e60fba0..41ecbe5 100644 --- a/core/src/main/java/com/openeggbert/core/screen/InitScreen.java +++ b/core/src/main/java/com/openeggbert/core/screen/InitScreen.java @@ -27,10 +27,7 @@ import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.utils.ScreenUtils; import com.openeggbert.core.configuration.ConfigDef; import com.openeggbert.core.main.OpenEggbertGame; -import com.openeggbert.core.utils.EmbeddedFileHandleFactory; import com.openeggbert.core.configuration.OpenEggbertDisplayMode; -import com.pixelgamelibrary.api.Pixel; -import java.util.Arrays; import java.util.Optional; /** @@ -51,14 +48,14 @@ public class InitScreen extends AbstractOpenEggbertScreen { FileHandle configDefFileHandle = null; String[] array = new String[]{"config.def", "Config.def", "CONFIG.DEF"}; if (game.getGameSpace().isEmbeddedAssets()) { - for (String a : array) { - configDefFileHandle = EmbeddedFileHandleFactory.create(game.getGameSpace().getDataDirectory() + "/" + a); - if (configDefFileHandle.exists()) { - break; - } else { - continue; - } - } +// for (String a : array) { +// configDefFileHandle = EmbeddedFileHandleFactory.create(game.getGameSpace().getDataDirectory() + "/" + a); +// if (configDefFileHandle.exists()) { +// break; +// } else { +// continue; +// } +// } } else { for (String a : array) { configDefFileHandle = Gdx.files.absolute(game.getGameSpace().getDataDirectory() + "/" + a); diff --git a/core/src/main/java/com/openeggbert/core/utils/AssetsTxt.java b/core/src/main/java/com/openeggbert/core/utils/AssetsTxt.java deleted file mode 100644 index 48b3dac..0000000 --- a/core/src/main/java/com/openeggbert/core/utils/AssetsTxt.java +++ /dev/null @@ -1,172 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////////////////// -// Open Eggbert: Free recreation of the computer game Speedy Eggbert. -// Copyright (C) 2024 the original author or authors. -// -// This program is free software: you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation, either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see -// or write to the Free Software -// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -/////////////////////////////////////////////////////////////////////////////////////////////// -package com.openeggbert.core.utils; - -import com.badlogic.gdx.Application; -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.files.FileHandle; -import com.openeggbert.core.main.OpenEggbertException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.function.Function; -import java.util.stream.Collectors; - -/** - * - * @author robertvokac - */ -public class AssetsTxt { - - - private final List> filesLists = new ArrayList<>(); - private final List> directoriesLists = new ArrayList<>(); - - private final Set directoriesSet = new HashSet<>(); - - public AssetsTxt(String readString) { - OpenEggbertUtils.lines(readString).forEach(line -> { - var lineArray = Arrays.asList(line.split("/")); - filesLists.add(lineArray); - if (lineArray.size() > 1) { - String fileName = lineArray.get(lineArray.size() - 1); - String directory = line.substring(0, line.length() - 1 - fileName.length()); - if (!directoriesSet.contains(directory)) { - directoriesSet.add(directory); - directoriesLists.add(Arrays.asList(directory.split("/"))); - } - } - }); - //directories: without files, with only directories - Set subDirectoriesTmpSet = new HashSet<>(); - for (String dir : directoriesSet) { - List list = Arrays.asList(dir.split("/")); - int depth = list.size(); - - while (depth > 1) { - depth = depth - 1; - String aSubdirectory = list.stream().limit(depth).collect(Collectors.joining("/")); - if (!directoriesSet.contains(aSubdirectory)) { - subDirectoriesTmpSet.add(aSubdirectory); - directoriesLists.add(Arrays.asList(aSubdirectory.split("/"))); - } - - } - } - directoriesSet.addAll(subDirectoriesTmpSet); - - } - - public void listDirectories() { - directoriesLists.forEach(l -> System.out.println(convertListStringToStringPath(l))); - } - - public void listFiles() { - filesLists.forEach(l -> System.out.println(convertListStringToStringPath(l))); - } - - public List listRoot(boolean directoryType, boolean fileType) { - return AssetsTxt.this.list(".", directoryType, fileType); - } - - public List listRoot() { - return listRoot(true, true); - } - - public List list(String pathToDirectory) { - return AssetsTxt.this.list(pathToDirectory, true, true); - } - - public List listDirectories(String pathToDirectory) { - return AssetsTxt.this.list(pathToDirectory, true, false); - } - - public List listFiles(String pathToDirectory) { - return AssetsTxt.this.list(pathToDirectory, false, true); - } - - public List list(String pathToDirectory, boolean directoryType, boolean fileType) { -// System.out.println("Calling: AssetsTxt.list( " + pathToDirectory + " ...)"); - if (!directoryType && !fileType) { - throw new OpenEggbertException("Invalid arguments, both arguments are false: directoryType, fileType"); - } - - if (pathToDirectory.equals(".")) { - List files = fileType ? filesLists - .stream() - .filter(l -> l.size() == 1) - .map(l -> l.get(0)) - .collect(Collectors.toList()) : new ArrayList<>(); - List directories = directoryType ? directoriesLists - .stream() - .filter(l -> l.size() == 1) - .map(l -> l.get(0)) - .collect(Collectors.toList()) : new ArrayList<>(); - List result = new ArrayList<>(); - result.addAll(files); - result.addAll(directories); - return result; - } - if (!directoriesSet.contains(pathToDirectory)) { - throw new OpenEggbertException("There is no such directory in assets: " + pathToDirectory); - } - - var directoryArray = pathToDirectory.split("/"); - int depth = directoryArray.length; - - List files = fileType ? filesLists - .stream() - .filter(l -> l.size() == depth + 1) - .filter(l -> convertListStringToStringPath(l).startsWith(pathToDirectory)) - .map(l -> l.get(depth)) - .collect(Collectors.toList()) : new ArrayList<>(); - List directories = directoryType ? directoriesLists - .stream() - .filter(l -> l.size() == depth + 1) - .filter(l -> convertListStringToStringPath(l).startsWith(pathToDirectory)) - .map(l -> l.get(depth)) - .distinct() - .collect(Collectors.toList()) : new ArrayList<>(); - List result = new ArrayList<>(); - result.addAll(files); - result.addAll(directories); - return result; - - } - - public List list(FileHandle fileHandle) { - String pathToDirectory = fileHandle.path();//((fileHandle.path().isEmpty() ? "" : (fileHandle.path() + "/"))) + fileHandle.name(); - Function createFileHandle = s -> - Gdx.app.getType() == Application.ApplicationType.Desktop ? - Gdx.files.classpath(s):Gdx.files.internal(s) - ; - return AssetsTxt.this.list(pathToDirectory) - .stream() - .map(p-> createFileHandle.apply((pathToDirectory.equals(".") ? "" : (pathToDirectory + "/")) + p)) - .collect(Collectors.toList()); - } - - private static String convertListStringToStringPath(List list) { - return list.stream().collect(Collectors.joining("/")); - } - -} diff --git a/core/src/main/java/com/openeggbert/core/utils/EmbeddedFileHandleFactory.java b/core/src/main/java/com/openeggbert/core/utils/EmbeddedFileHandleFactory.java deleted file mode 100644 index fc4953c..0000000 --- a/core/src/main/java/com/openeggbert/core/utils/EmbeddedFileHandleFactory.java +++ /dev/null @@ -1,47 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////////////////// -// Open Eggbert: Free recreation of the computer game Speedy Eggbert. -// Copyright (C) 2024 the original author or authors. -// -// This program is free software: you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation, either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see -// or write to the Free Software -// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -/////////////////////////////////////////////////////////////////////////////////////////////// -package com.openeggbert.core.utils; - -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.files.FileHandle; -import com.pixelgamelibrary.api.Pixel; -import com.pixelgamelibrary.api.Platform; - -/** - * - * @author robertvokac - */ -public class EmbeddedFileHandleFactory { - - private EmbeddedFileHandleFactory() { - //Not meant to be instantiated. - } - - public static FileHandle create(String name) { - - if (Pixel.app().isOneOfPlatforms(Platform.ANDROID, Platform.WEB)) { - return Gdx.files.internal(name); - } else { - return Gdx.files.classpath(name); - - } - } - -} diff --git a/core/src/main/java/com/openeggbert/core/utils/OpenEggbertUtils.java b/core/src/main/java/com/openeggbert/core/utils/OpenEggbertUtils.java index b27838e..26d17c2 100644 --- a/core/src/main/java/com/openeggbert/core/utils/OpenEggbertUtils.java +++ b/core/src/main/java/com/openeggbert/core/utils/OpenEggbertUtils.java @@ -40,10 +40,6 @@ public class OpenEggbertUtils { //Not meant to be instantiated. } - public static Stream lines(String string) { - return Arrays.asList(string.split("\\r?\\n")).stream(); - } - public static List streamToList(Stream stream) { return stream.collect(Collectors.toList()); } diff --git a/lwjgl3/src/main/java/com/openeggbert/lwjgl3/debugging/DebuggingAssetsTxt.java b/lwjgl3/src/main/java/com/openeggbert/lwjgl3/debugging/DebuggingAssetsTxt.java index 81a5afc..f771ffa 100644 --- a/lwjgl3/src/main/java/com/openeggbert/lwjgl3/debugging/DebuggingAssetsTxt.java +++ b/lwjgl3/src/main/java/com/openeggbert/lwjgl3/debugging/DebuggingAssetsTxt.java @@ -19,7 +19,9 @@ /////////////////////////////////////////////////////////////////////////////////////////////// package com.openeggbert.lwjgl3.debugging; -import com.openeggbert.core.utils.AssetsTxt; +import com.pixelgamelibrary.api.Pixel; +import com.pixelgamelibrary.backend.libgdx.PixelBackendLibGDX; +import com.pixelgamelibrary.backend.libgdx.assets.AssetsTxt; import java.util.List; import java.util.Scanner; @@ -28,11 +30,14 @@ import java.util.Scanner; * @author robertvokac */ public class DebuggingAssetsTxt { + private DebuggingAssetsTxt() { //Not meant to be instantiated. } + public static void main(String[] args) { - + Pixel.initBackend(new PixelBackendLibGDX()); + AssetsTxt a = new AssetsTxt(ASSETS_TXT); // a.listFiles(); // System.out.println("-----"); @@ -44,12 +49,12 @@ public class DebuggingAssetsTxt { String nextFile = "."; while (true) { - if(nextFile.equals("..")) { + if (nextFile.equals("..")) { var array = nextFile.split("/"); - if(array.length == 1) { + if (array.length == 1) { nextFile = "."; } else { - nextFile = nextFile.substring(0, nextFile.length() - 1 - array[array.length-1].length()); + nextFile = nextFile.substring(0, nextFile.length() - 1 - array[array.length - 1].length()); } } nextFile = browse(nextFile, a); @@ -74,9 +79,11 @@ public class DebuggingAssetsTxt { } System.out.print("Option: "); Scanner s = new Scanner(System.in); - + String selected = s.next(); - if(selected.equals("exit"))return null; + if (selected.equals("exit")) { + return null; + } int selectedInt = -1; try { selectedInt = Integer.parseInt(selected); @@ -85,12 +92,14 @@ public class DebuggingAssetsTxt { selectedInt = 2; } if (selectedInt == 1) { - if(file.equals(".")) { + if (file.equals(".")) { //cannot go up a level return file; } var array = file.split("/"); - if(array.length == 1) {return "..";} + if (array.length == 1) { + return ".."; + } var endIndex = file.length() - 1 - (array[array.length - 1].length()); return file.substring(0, endIndex); } @@ -105,6 +114,6 @@ public class DebuggingAssetsTxt { // } return file; } - + private static final String ASSETS_TXT = "ui/uiskin.png\n" + "ui/uiskin.json\n" + "ui/font.fnt\n" + "ui/uiskin.atlas\n" + "ui/font-list.fnt\n" + "ui/font-subtitle.fnt\n" + "ui/font-window.fnt\n" + "default-spritesheets/speedy_blupi_I.spritesheet.csv.computed.csv\n" + "default-spritesheets/speedy_blupi_I.spritesheet.csv\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_music/MUSIC004.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_music/MUSIC000.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_music/MUSIC008.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_music/MUSIC001.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_music/MUSIC003.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_music/MUSIC009.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_music/MUSIC005.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_music/MUSIC007.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_music/MUSIC006.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_music/MUSIC002.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD044.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD108.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD205.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD057.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD202.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD063.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/DEMO202.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD020.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/DEMO205.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD206.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD065.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD025.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD042.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD031.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD110.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/DEMO204.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD070.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD056.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/DEMO206.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/DEMO200.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD073.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD062.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD045.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD001.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD055.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD054.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD066.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD021.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD043.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD032.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD071.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD052.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD041.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD203.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD099.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/Config.def\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD022.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD061.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD104.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/DEMO201.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD040.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD102.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD030.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD200.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/DEMO203.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD010.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD103.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD050.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD107.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD023.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD106.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD051.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD075.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD034.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD033.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD105.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD074.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD058.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD201.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD060.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD072.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD064.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD109.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD101.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD204.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD053.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_data/WORLD024.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/INSERT.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/DECOR008.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/OBJECT.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/DECOR023.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/DECOR021.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/LITTLE.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/DECOR006.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/SERVICE.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/WIN.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/SETUP.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/NAME.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/DECOR001.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/CLEAR.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/JAUGE.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/DECOR011.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/DECOR013.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/REGION.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/DECOR020.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/BYE.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/STOP.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/DECOR014.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/INFO.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/MAP.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/BLUPI000.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/HELP.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/BLUPI002.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/READ.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/TEMP.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/DECOR002.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/MOVIE.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/ELEMENT.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/MULTI.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/TEXT.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/BLUPI001.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/LOST.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/DECOR009.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/DECOR000.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/DECOR019.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/DECOR012.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/DECOR016.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/DECOR004.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/CREATE.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/SESSION.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/DECOR015.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/BLUPI003.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/BUTTON00.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/DECOR022.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/DECOR005.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/INIT.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/DECOR010.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/WRITE.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/MUSIC.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/DECOR018.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/DECOR007.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/GREAD.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/EXPLO.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/GAMER.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/DECOR017.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/DECOR003.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/IMAGE08/GWRITE.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image08/mod.xml\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND001.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND048.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND003.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND050.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND056.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND025.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND053.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND029.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND040.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND007.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND063.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND033.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND044.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND042.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND005.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND010.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND000.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND013.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND022.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND016.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND062.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND035.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND032.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND012.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND037.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND020.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND058.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND031.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND049.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND004.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND038.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND018.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND064.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND047.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND046.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND008.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND030.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND041.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND019.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND065.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND051.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND039.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND021.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND014.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND011.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND060.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND006.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND023.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND028.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND015.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND027.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND052.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND045.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND017.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND036.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND002.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND054.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND055.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND009.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND024.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND059.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND026.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND043.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND061.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND034.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_sound/SOUND057.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_full/mod.xml\n" + "embedded_mods/epsitec/speedy_blupi_II_legacy_full/mod.xml_\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/INSERT.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/DECOR008.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/DECOR023.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/DECOR021.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/DECOR006.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/SERVICE.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/WIN.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/SETUP.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/NAME.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/DECOR001.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/CLEAR.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/DECOR011.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/DECOR013.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/REGION.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/DECOR020.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/BYE.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/STOP.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/DECOR014.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/INFO.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/HELP.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/READ.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/DECOR002.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/MULTI.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/LOST.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/DECOR000.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/DECOR019.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/DECOR012.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/DECOR016.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/DECOR004.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/CREATE.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/SESSION.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/DECOR015.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/DECOR022.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/DECOR005.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/INIT.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/DECOR010.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/WRITE.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/MUSIC.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/DECOR018.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/GREAD.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/GAMER.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/DECOR017.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/DECOR003.BLP\n" + "embedded_mods/epsitec/speedy_blupi_I_legacy_image16/GWRITE.BLP\n" + "embedded_mods/README.md\n" + "embedded_mods/open-eggbert/open_eggbert_free_image24x2/.gitkeep\n" + "embedded_mods/open-eggbert/open_eggbert_free_sound/.gitkeep\n" + "embedded_mods/open-eggbert/open_eggbert_free_music/.gitkeep\n" + "embedded_mods/open-eggbert/open_eggbert_free_image24/.gitkeep\n" + "com/badlogic/gdx/utils/lsans-15.fnt\n" + "com/badlogic/gdx/utils/lsans-15.png\n" + "libgdx.png\n"; }