diff --git a/core/src/main/java/com/openeggbert/main/AssetsTxt.java b/core/src/main/java/com/openeggbert/main/AssetsTxt.java
new file mode 100644
index 0000000..7bddbd0
--- /dev/null
+++ b/core/src/main/java/com/openeggbert/main/AssetsTxt.java
@@ -0,0 +1,156 @@
+///////////////////////////////////////////////////////////////////////////////////////////////
+// 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.main;
+
+import com.openeggbert.entity.common.OpenEggbertException;
+import com.openeggbert.utils.OpenEggbertUtils;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+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 list(".", directoryType, fileType);
+ }
+
+ public List listRoot() {
+ return listRoot(true, true);
+ }
+
+ public List list(String pathToDirectory) {
+ return list(pathToDirectory, true, true);
+ }
+
+ public List listDirectories(String pathToDirectory) {
+ return list(pathToDirectory, true, false);
+ }
+
+ public List listFiles(String pathToDirectory) {
+ return list(pathToDirectory, false, true);
+ }
+
+ public List list(String pathToDirectory, boolean directoryType, boolean fileType) {
+ 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;
+
+ }
+
+ private static String convertListStringToStringPath(List list) {
+ return list.stream().collect(Collectors.joining("/"));
+ }
+
+}
diff --git a/core/src/main/java/com/openeggbert/main/OpenEggbertGame.java b/core/src/main/java/com/openeggbert/main/OpenEggbertGame.java
index 59dfabb..9ba115a 100644
--- a/core/src/main/java/com/openeggbert/main/OpenEggbertGame.java
+++ b/core/src/main/java/com/openeggbert/main/OpenEggbertGame.java
@@ -22,12 +22,16 @@ package com.openeggbert.main;
import com.badlogic.gdx.Game;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
+import com.badlogic.gdx.graphics.Camera;
import com.badlogic.gdx.graphics.GL20;
+import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.utils.ObjectMap;
+import com.badlogic.gdx.utils.viewport.FitViewport;
+import com.badlogic.gdx.utils.viewport.Viewport;
import com.openeggbert.entity.common.GameSpace;
import com.openeggbert.mods.Mod;
import com.openeggbert.screens.GameSpaceListScreen;
@@ -55,6 +59,9 @@ public class OpenEggbertGame extends Game {
private List embeddedMods = new ArrayList<>();
private int heightInPixels = 480;
private int widthInPixels = 640;
+ private Camera camera;
+ private Viewport viewport;
+ private AssetsTxt assetsTxt;
public OpenEggbertGame() {
this(null, null);
@@ -72,8 +79,18 @@ public class OpenEggbertGame extends Game {
@Override
public void create() {
+// viewport = new FitViewport(640,480);
+// viewport.apply();
+ //camera = new OrthographicCamera();
+
+ //.setToOrtho(false,640,480);
+
+ assetsTxt = new AssetsTxt(Gdx.files.internal("assets.txt").readString());
System.out.println("Searching mods");
+ for(FileHandle f:Gdx.files.internal(".").list()) {
+ System.out.println("assets contains also: " + f.name());
+ }
FileHandle embeddedModsDirectory = Gdx.files.internal("embedded_mods");
System.out.println("embeddedModsDirectory.list().length=" + embeddedModsDirectory.list().length);
for (FileHandle embeddedModGroup : embeddedModsDirectory.list()) {
@@ -107,6 +124,7 @@ public class OpenEggbertGame extends Game {
}
////
batch = new SpriteBatch();
+ //batch.setProjectionMatrix(viewport.getCamera().combined);
image = new Texture("libgdx.png");
shapeRenderer = new ShapeRenderer();
font = new BitmapFont();
diff --git a/core/src/main/java/com/openeggbert/screens/GameSpaceListScreen.java b/core/src/main/java/com/openeggbert/screens/GameSpaceListScreen.java
index c94b5d8..599b89b 100644
--- a/core/src/main/java/com/openeggbert/screens/GameSpaceListScreen.java
+++ b/core/src/main/java/com/openeggbert/screens/GameSpaceListScreen.java
@@ -55,7 +55,7 @@ public class GameSpaceListScreen extends AbstractOpenEggbertScreen {
this.fullEmbeddedMods = openEggbertGame.getEmbeddedMods().stream().filter(m -> m.getModType() == ModType.FULL).collect(Collectors.toList());
Gdx.app.log("fullEmbeddedMods: ", String.valueOf(fullEmbeddedMods.size()));
Gdx.app.log("openEggbertGame.getEmbeddedMods(): ", String.valueOf(openEggbertGame.getEmbeddedMods().size()));
-
+
if (Gdx.app.getType() == Application.ApplicationType.Android) {
game.setHeightInPixels(Gdx.app.getGraphics().getHeight());
game.setWidthInPixels(Gdx.app.getGraphics().getWidth());
@@ -70,6 +70,10 @@ public class GameSpaceListScreen extends AbstractOpenEggbertScreen {
if (keyCode == Input.Keys.SPACE) {
game.setScreen(new TestScreen(game));
}
+ if (keyCode == Input.Keys.ESCAPE) {
+ Gdx.app.exit();
+ }
+
return true;
}
@@ -89,7 +93,7 @@ public class GameSpaceListScreen extends AbstractOpenEggbertScreen {
if(
x > fourArray[i].x && x < (fourArray[i].x + fourArray[i].width)
&&
- y > fourArray[i].y && y < (fourArray[i].y + fourArray[i].height)
+ y > fourArray[4-i].y && y < (fourArray[4-i].y + fourArray[4-i].height)
) {
System.out.println("button " + i);
}
@@ -102,7 +106,10 @@ public class GameSpaceListScreen extends AbstractOpenEggbertScreen {
@Override
public void render(float delta) {
+
ScreenUtils.clear(1f, 1f, 0.6f, 0.5f);
+ int buttonHeight = (int) (game.getHeightInPixels() * 0.1f);
+
batch.begin();
BitmapFont font;
@@ -128,7 +135,6 @@ public class GameSpaceListScreen extends AbstractOpenEggbertScreen {
final boolean isLastPage = !(pageNumber * pageSize < fullEmbeddedMods.size());
- int buttonHeight = (int) (game.getHeightInPixels() * 0.1f);
final ShapeRenderer shapeRenderer = game.getShapeRenderer();
shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
shapeRenderer.setColor(1f, 1f, 0.8f, 0.5f);
diff --git a/core/src/main/java/com/openeggbert/screens/TestScreen.java b/core/src/main/java/com/openeggbert/screens/TestScreen.java
index 9f6b0dd..009a8fa 100644
--- a/core/src/main/java/com/openeggbert/screens/TestScreen.java
+++ b/core/src/main/java/com/openeggbert/screens/TestScreen.java
@@ -80,6 +80,7 @@ public class TestScreen extends AbstractOpenEggbertScreen {
font = new BitmapFont();
font.draw(game.getBatch(), game.getCurrentDirectory(), 40, 340);
}
+ batch.draw(game.getImage(), 40, 400);
game.getBatch().end();
}
diff --git a/core/src/main/java/com/openeggbert/utils/OpenEggbertUtils.java b/core/src/main/java/com/openeggbert/utils/OpenEggbertUtils.java
new file mode 100644
index 0000000..3d4a349
--- /dev/null
+++ b/core/src/main/java/com/openeggbert/utils/OpenEggbertUtils.java
@@ -0,0 +1,37 @@
+///////////////////////////////////////////////////////////////////////////////////////////////
+// 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.utils;
+
+import java.util.Arrays;
+import java.util.stream.Stream;
+
+/**
+ *
+ * @author robertvokac
+ */
+public class OpenEggbertUtils {
+ private OpenEggbertUtils() {
+ //Not meant to be instantiated.
+ }
+ public static Stream lines(String string) {
+ return Arrays.asList(string.split("\\r?\\n")).stream();
+ }
+
+}
diff --git a/lwjgl3/src/main/java/com/openeggbert/lwjgl3/TestAssetsTxt.java b/lwjgl3/src/main/java/com/openeggbert/lwjgl3/TestAssetsTxt.java
new file mode 100644
index 0000000..c9ff187
--- /dev/null
+++ b/lwjgl3/src/main/java/com/openeggbert/lwjgl3/TestAssetsTxt.java
@@ -0,0 +1,95 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.openeggbert.lwjgl3;
+
+import com.openeggbert.main.AssetsTxt;
+import java.util.List;
+import java.util.Scanner;
+
+/**
+ *
+ * @author robertvokac
+ */
+public class TestAssetsTxt {
+ private TestAssetsTxt() {
+ //Not meant to be instantiated.
+ }
+ public static void main(String[] args) {
+
+ AssetsTxt a = new AssetsTxt(ASSETS_TXT);
+// a.listFiles();
+// System.out.println("-----");
+// a.listDirectories();
+ System.out.println("Root has these");
+ a.listFiles("embedded_mods/epsitec/speedy_blupi_I_legacy_full").forEach(l -> System.out.println("Root has this: " + l));
+
+ System.out.println("\n\n\n\n");
+
+ String nextFile = ".";
+ while (true) {
+ if(nextFile.equals("..")) {
+ var array = nextFile.split("/");
+ if(array.length == 1) {
+ nextFile = ".";
+ } else {
+ nextFile = nextFile.substring(0, nextFile.length() - 1 - array[array.length-1].length());
+ }
+ }
+ nextFile = browse(nextFile, a);
+ if (nextFile == null) {
+ break;
+ }
+ }
+ }
+
+ private static String browse(String file, AssetsTxt a) {
+ System.out.println("Calling browser(" + file + "," + a + ")");
+ List files = a.listFiles(file);
+ List directories = a.listDirectories(file);
+ System.out.println("[" + 1 + "] D ..");
+ System.out.println("[" + 2 + "] D .");
+ int z = 3;
+ for (int i = 0; i < directories.size(); i++, z++) {
+ System.out.println("[" + z + "] D " + directories.get(i));
+ }
+ for (int i = 0; i < files.size(); i++, z++) {
+ System.out.println("[" + (" ") + "] F " + files.get(i));
+ }
+ System.out.print("Option: ");
+ Scanner s = new Scanner(System.in);
+
+ String selected = s.next();
+ if(selected.equals("exit"))return null;
+ int selectedInt = -1;
+ try {
+ selectedInt = Integer.parseInt(selected);
+ } catch (Exception e) {
+ System.err.println(e.getMessage());
+ selectedInt = 2;
+ }
+ if (selectedInt == 1) {
+ if(file.equals(".")) {
+ //cannot go up a level
+ return file;
+ }
+ var array = file.split("/");
+ if(array.length == 1) {return "..";}
+ var endIndex = file.length() - 1 - (array[array.length - 1].length());
+ return file.substring(0, endIndex);
+ }
+ if (selectedInt == 2) {
+ return file;
+ }
+ if (selectedInt < (directories.size() + 3)) {
+ return (file.equals(".") ? "" : (file + "/")) + directories.get(-3 + selectedInt);
+ }
+// if (selectedInt < (directories.size() + files.size() + 3)) {
+// return (file.equals(".") ? "" : (file + "/")) + files.get(-3 + directories.size() + selectedInt);
+// }
+ 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";
+}