diff --git a/.gitignore b/.gitignore
index d42cb7a..007f943 100755
--- a/.gitignore
+++ b/.gitignore
@@ -8,4 +8,7 @@ target
*.idea/**
*.class
+logs/*
+dist/*
+system/*
diff --git a/build.sh b/build.sh
new file mode 100755
index 0000000..b07bb1e
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,4 @@
+mkdir dist
+rm dist/openeggbert.jar
+mvn clean install
+mv target/open-eggbert-0.0.0-SNAPSHOT-jar-with-dependencies.jar dist/openeggbert.jar
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..aee6d6f
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,212 @@
+
+
+
+ 4.0.0
+
+
+ org.nanoboot.essential
+ nanoboot-parent
+ 0.1.1-SNAPSHOT
+
+
+ com.openeggbert
+ open-eggbert
+ 0.0.0-SNAPSHOT
+ jar
+
+ Open Eggbert
+ Free recreation of the computer game Speedy Eggbert
+
+
+ UTF-8
+ true
+ 21
+ 21
+ com.openeggbert.core.Main
+
+ 6.2.3
+ 6.0.7
+ 2.1.0
+ 4.0.19
+ 2.0.1
+ 0.0.8
+ 1.0.22
+ host
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-deploy-plugin
+ ${maven-deploy-plugin.version}
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+
+
+ ${javase.version}
+ ${javase.version}
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+ ${maven-assembly-plugin.version}
+
+
+
+ ${main.class}
+
+
+
+ jar-with-dependencies
+
+
+
+
+
+ make-assembly
+ package
+
+ single
+
+
+
+
+
+
+ org.openjfx
+ javafx-maven-plugin
+ ${javafx.maven.plugin.version}
+
+ ${main.class}
+
+
+
+ com.gluonhq
+ gluonfx-maven-plugin
+ ${gluonfx.maven.plugin.version}
+
+ ${gluonfx.target}
+ ${main.class}
+
+
+
+ org.apache.maven.plugins
+ maven-checkstyle-plugin
+
+ ${checkstyle.skip}
+
+
+
+
+
+
+
+ ios
+
+ ios
+
+
+
+ android
+
+ android
+
+
+
+
+
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+
+
+
+
+ org.apache.logging.log4j
+ log4j-api
+ ${log4j.version}
+
+
+ org.apache.logging.log4j
+ log4j-core
+ ${log4j.version}
+
+
+ org.apache.logging.log4j
+ log4j-slf4j-impl
+ ${log4j.version}
+
+
+ com.github.almasb
+ fxgl
+ 21.1
+
+
+
+
+
+
+ releases
+ nanoboot-releases-repository
+ https://maven.nanoboot.org/releases
+
+
+ snapshots
+ nanoboot-snapshots-repository
+ https://maven.nanoboot.org/snapshots
+
+
+
+
+
+ releases
+ nanoboot-releases-repository
+ https://maven.nanoboot.org/releases
+
+
+ snapshots
+ nanoboot-snapshots-repository
+ https://maven.nanoboot.org/snapshots
+
+
+
+
diff --git a/src/main/java/com/openeggbert/core/Main.java b/src/main/java/com/openeggbert/core/Main.java
new file mode 100755
index 0000000..fba1afb
--- /dev/null
+++ b/src/main/java/com/openeggbert/core/Main.java
@@ -0,0 +1,36 @@
+///////////////////////////////////////////////////////////////////////////////////////////////
+// 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;
+
+/**
+ * @author Robert Vokac
+ * @since 0.0.0
+ */
+public class Main {
+
+ public static void main(String[] args) {
+ System.out.println("Open Eggbert - Free recreation of the computer game Speedy Eggbert.\n");
+
+ OpenEggbertApp.launch(OpenEggbertApp.class, args);
+ }
+
+}
diff --git a/src/main/java/com/openeggbert/entity/common/Cheat.java b/src/main/java/com/openeggbert/entity/common/Cheat.java
new file mode 100644
index 0000000..e9d7c08
--- /dev/null
+++ b/src/main/java/com/openeggbert/entity/common/Cheat.java
@@ -0,0 +1,47 @@
+///////////////////////////////////////////////////////////////////////////////////////////////
+// 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.entity.common;
+
+import com.openeggbert.entity.common.compatibility.CompatibilityMode;
+import lombok.Getter;
+
+/**
+ *
+ * @author robertvokac
+ */
+public enum Cheat {
+
+ MEGABLUPI(Utils.ALL__COMPATIBILITY_MODES);
+ //todo
+
+ @Getter
+ private final CompatibilityMode[] compatibilityModes;
+ @Getter
+ private String note;
+ Cheat (CompatibilityMode[] compatibilityModes) {
+ this(compatibilityModes, "");
+ }
+ Cheat (CompatibilityMode[] compatibilityModes, String note) {
+ this.compatibilityModes = compatibilityModes;
+ this.note = note;
+ }
+}
diff --git a/src/main/java/com/openeggbert/entity/common/EggbertMusic.java b/src/main/java/com/openeggbert/entity/common/EggbertMusic.java
new file mode 100644
index 0000000..b0eaec6
--- /dev/null
+++ b/src/main/java/com/openeggbert/entity/common/EggbertMusic.java
@@ -0,0 +1,30 @@
+///////////////////////////////////////////////////////////////////////////////////////////////
+// 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.entity.common;
+
+/**
+ *
+ * @author robertvokac
+ */
+public enum EggbertMusic {
+
+}
diff --git a/src/main/java/com/openeggbert/entity/common/EggbertSound.java b/src/main/java/com/openeggbert/entity/common/EggbertSound.java
new file mode 100644
index 0000000..412a396
--- /dev/null
+++ b/src/main/java/com/openeggbert/entity/common/EggbertSound.java
@@ -0,0 +1,30 @@
+///////////////////////////////////////////////////////////////////////////////////////////////
+// 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.entity.common;
+
+/**
+ *
+ * @author robertvokac
+ */
+public enum EggbertSound {
+
+}
diff --git a/src/main/java/com/openeggbert/entity/common/EggbertState.java b/src/main/java/com/openeggbert/entity/common/EggbertState.java
new file mode 100644
index 0000000..716a0c7
--- /dev/null
+++ b/src/main/java/com/openeggbert/entity/common/EggbertState.java
@@ -0,0 +1,30 @@
+///////////////////////////////////////////////////////////////////////////////////////////////
+// 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.entity.common;
+
+/**
+ *
+ * @author robertvokac
+ */
+public enum EggbertState {
+
+}
diff --git a/src/main/java/com/openeggbert/entity/common/EntityType.java b/src/main/java/com/openeggbert/entity/common/EntityType.java
new file mode 100644
index 0000000..bdbaa3e
--- /dev/null
+++ b/src/main/java/com/openeggbert/entity/common/EntityType.java
@@ -0,0 +1,34 @@
+///////////////////////////////////////////////////////////////////////////////////////////////
+// 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.entity.common;
+
+/**
+ *
+ * @author robertvokac
+ */
+public enum EntityType {
+ PLAYER,
+ COIN,
+ EGGBERT,
+ BULDOZER;
+ //todo
+}
diff --git a/src/main/java/com/openeggbert/entity/common/GameExecution.java b/src/main/java/com/openeggbert/entity/common/GameExecution.java
new file mode 100644
index 0000000..c90cb9b
--- /dev/null
+++ b/src/main/java/com/openeggbert/entity/common/GameExecution.java
@@ -0,0 +1,40 @@
+///////////////////////////////////////////////////////////////////////////////////////////////
+// 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.entity.common;
+
+import com.openeggbert.entity.common.compatibility.CompatibilityMode;
+import com.openeggbert.entity.common.compatibility.GraphicsMode;
+import com.openeggbert.entity.common.compatibility.ResolutionMode;
+import lombok.Data;
+
+/**
+ *
+ * @author robertvokac
+ */
+@Data
+public class GameExecution {
+ private CompatibilityMode compatibilityMode;
+ private ResolutionMode resolutionMode = ResolutionMode.RESOLUTION_640_480;
+ private GraphicsMode graphicsMode = GraphicsMode.ORIGINAL;
+ private Boolean cheatsEnabled = true;
+
+}
diff --git a/src/main/java/com/openeggbert/entity/common/GameFile.java b/src/main/java/com/openeggbert/entity/common/GameFile.java
new file mode 100644
index 0000000..d43974f
--- /dev/null
+++ b/src/main/java/com/openeggbert/entity/common/GameFile.java
@@ -0,0 +1,36 @@
+///////////////////////////////////////////////////////////////////////////////////////////////
+// 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.entity.common;
+
+import com.openeggbert.entity.common.compatibility.CompatibilityMode;
+
+/**
+ *
+ * @author robertvokac
+ */
+public class GameFile {
+
+ private CompatibilityMode compatibilityMode;
+ private GameFileType gameFileType;
+ private String path;
+ private String name;
+ private String originalSha512Sum;
+}
diff --git a/src/main/java/com/openeggbert/entity/common/GameFileType.java b/src/main/java/com/openeggbert/entity/common/GameFileType.java
new file mode 100644
index 0000000..6afb723
--- /dev/null
+++ b/src/main/java/com/openeggbert/entity/common/GameFileType.java
@@ -0,0 +1,13 @@
+/*
+ * 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.entity.common;
+
+/**
+ *
+ * @author robertvokac
+ */
+public enum GameFileType {
+ CONFIG, WORLD, MUSIC, SOUND, IMAGE8, IMAGE16, IMAGE32;
+}
diff --git a/src/main/java/com/openeggbert/entity/common/GameFiles.java b/src/main/java/com/openeggbert/entity/common/GameFiles.java
new file mode 100644
index 0000000..f84270b
--- /dev/null
+++ b/src/main/java/com/openeggbert/entity/common/GameFiles.java
@@ -0,0 +1,29 @@
+///////////////////////////////////////////////////////////////////////////////////////////////
+// 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.entity.common;
+
+/**
+ *
+ * @author robertvokac
+ */
+public class GameFiles {
+
+}
diff --git a/src/main/java/com/openeggbert/entity/common/ScreenType.java b/src/main/java/com/openeggbert/entity/common/ScreenType.java
new file mode 100644
index 0000000..06b16bb
--- /dev/null
+++ b/src/main/java/com/openeggbert/entity/common/ScreenType.java
@@ -0,0 +1,30 @@
+///////////////////////////////////////////////////////////////////////////////////////////////
+// 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.entity.common;
+
+/**
+ *
+ * @author robertvokac
+ */
+public class ScreenType {
+
+}
diff --git a/src/main/java/com/openeggbert/entity/common/SpriteAnimation.java b/src/main/java/com/openeggbert/entity/common/SpriteAnimation.java
new file mode 100644
index 0000000..591ed60
--- /dev/null
+++ b/src/main/java/com/openeggbert/entity/common/SpriteAnimation.java
@@ -0,0 +1,30 @@
+///////////////////////////////////////////////////////////////////////////////////////////////
+// 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.entity.common;
+
+/**
+ *
+ * @author robertvokac
+ */
+public class SpriteAnimation {
+
+}
diff --git a/src/main/java/com/openeggbert/entity/common/SpriteSheet.java b/src/main/java/com/openeggbert/entity/common/SpriteSheet.java
new file mode 100644
index 0000000..541663c
--- /dev/null
+++ b/src/main/java/com/openeggbert/entity/common/SpriteSheet.java
@@ -0,0 +1,30 @@
+///////////////////////////////////////////////////////////////////////////////////////////////
+// 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.entity.common;
+
+/**
+ *
+ * @author robertvokac
+ */
+public class SpriteSheet {
+
+}
diff --git a/src/main/java/com/openeggbert/entity/common/Utils.java b/src/main/java/com/openeggbert/entity/common/Utils.java
new file mode 100644
index 0000000..c939c97
--- /dev/null
+++ b/src/main/java/com/openeggbert/entity/common/Utils.java
@@ -0,0 +1,35 @@
+///////////////////////////////////////////////////////////////////////////////////////////////
+// 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.entity.common;
+
+import com.openeggbert.entity.common.compatibility.CompatibilityMode;
+
+/**
+ *
+ * @author robertvokac
+ */
+public class Utils {
+ private Utils() {
+ //Instantiate not needed.
+ }
+ public static final CompatibilityMode[] ALL__COMPATIBILITY_MODES = CompatibilityMode.values();
+}
diff --git a/src/main/java/com/openeggbert/entity/common/World.java b/src/main/java/com/openeggbert/entity/common/World.java
new file mode 100644
index 0000000..e4d2b4b
--- /dev/null
+++ b/src/main/java/com/openeggbert/entity/common/World.java
@@ -0,0 +1,30 @@
+///////////////////////////////////////////////////////////////////////////////////////////////
+// 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.entity.common;
+
+/**
+ *
+ * @author robertvokac
+ */
+public class World {
+
+}
diff --git a/src/main/java/com/openeggbert/entity/common/compatibility/CompatibilityMode.java b/src/main/java/com/openeggbert/entity/common/compatibility/CompatibilityMode.java
new file mode 100644
index 0000000..a33d329
--- /dev/null
+++ b/src/main/java/com/openeggbert/entity/common/compatibility/CompatibilityMode.java
@@ -0,0 +1,50 @@
+///////////////////////////////////////////////////////////////////////////////////////////////
+// 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.entity.common.compatibility;
+
+import lombok.Getter;
+
+/**
+ *
+ * @author robertvokac
+ */
+public enum CompatibilityMode {
+ SPEEDY_BLUPI_DEMO(ReleaseType.BLUPI, ReleaseVersion.DEMO),
+ SPEEDY_BLUPI_I(ReleaseType.BLUPI, ReleaseVersion.ONE),
+ SPEEDY_BLUPI_II(ReleaseType.BLUPI, ReleaseVersion.TWO),
+ SPEEDY_EGGBERT_DEMO(ReleaseType.EGGBERT, ReleaseVersion.DEMO),
+ SPEEDY_EGGBERT_1(ReleaseType.EGGBERT, ReleaseVersion.ONE),
+ SPEEDY_EGGBERT_2(ReleaseType.EGGBERT, ReleaseVersion.TWO),
+ OPEN_EGGBERT(ReleaseType.OPEN, ReleaseVersion.THREE);
+ @Getter
+ private final ReleaseType releaseType;
+ @Getter
+ private final ReleaseVersion releaseVersion;
+
+ private CompatibilityMode(ReleaseType releaseType, ReleaseVersion releaseVersion) {
+ this.releaseType = releaseType;
+ this.releaseVersion = releaseVersion;
+ }
+
+
+
+}
diff --git a/src/main/java/com/openeggbert/entity/common/compatibility/GraphicsMode.java b/src/main/java/com/openeggbert/entity/common/compatibility/GraphicsMode.java
new file mode 100644
index 0000000..c3d89f1
--- /dev/null
+++ b/src/main/java/com/openeggbert/entity/common/compatibility/GraphicsMode.java
@@ -0,0 +1,30 @@
+///////////////////////////////////////////////////////////////////////////////////////////////
+// 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.entity.common.compatibility;
+
+/**
+ *
+ * @author robertvokac
+ */
+public enum GraphicsMode {
+ ORIGINAL, NEW;
+}
diff --git a/src/main/java/com/openeggbert/entity/common/compatibility/ReleaseType.java b/src/main/java/com/openeggbert/entity/common/compatibility/ReleaseType.java
new file mode 100644
index 0000000..e17749f
--- /dev/null
+++ b/src/main/java/com/openeggbert/entity/common/compatibility/ReleaseType.java
@@ -0,0 +1,30 @@
+///////////////////////////////////////////////////////////////////////////////////////////////
+// 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.entity.common.compatibility;
+
+/**
+ *
+ * @author robertvokac
+ */
+public enum ReleaseType {
+ BLUPI, EGGBERT, OPEN;
+}
diff --git a/src/main/java/com/openeggbert/entity/common/compatibility/ReleaseVersion.java b/src/main/java/com/openeggbert/entity/common/compatibility/ReleaseVersion.java
new file mode 100644
index 0000000..724e92d
--- /dev/null
+++ b/src/main/java/com/openeggbert/entity/common/compatibility/ReleaseVersion.java
@@ -0,0 +1,30 @@
+///////////////////////////////////////////////////////////////////////////////////////////////
+// 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.entity.common.compatibility;
+
+/**
+ *
+ * @author robertvokac
+ */
+public enum ReleaseVersion {
+ DEMO, ONE, TWO, THREE
+}
diff --git a/src/main/java/com/openeggbert/entity/common/compatibility/ResolutionMode.java b/src/main/java/com/openeggbert/entity/common/compatibility/ResolutionMode.java
new file mode 100644
index 0000000..e79939d
--- /dev/null
+++ b/src/main/java/com/openeggbert/entity/common/compatibility/ResolutionMode.java
@@ -0,0 +1,32 @@
+///////////////////////////////////////////////////////////////////////////////////////////////
+// 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.entity.common.compatibility;
+
+/**
+ *
+ * @author robertvokac
+ */
+public enum ResolutionMode {
+ RESOLUTION_640_480,
+ RESOLUTION_1280_960,
+ RESOLUTION_SCALED;
+}
diff --git a/src/main/java/com/openeggbert/entity/gameplay/Buldozer.java b/src/main/java/com/openeggbert/entity/gameplay/Buldozer.java
new file mode 100644
index 0000000..4e1b931
--- /dev/null
+++ b/src/main/java/com/openeggbert/entity/gameplay/Buldozer.java
@@ -0,0 +1,30 @@
+///////////////////////////////////////////////////////////////////////////////////////////////
+// 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.entity.gameplay;
+
+/**
+ *
+ * @author robertvokac
+ */
+public class Buldozer {
+
+}
diff --git a/src/main/java/com/openeggbert/entity/gameplay/Eggbert.java b/src/main/java/com/openeggbert/entity/gameplay/Eggbert.java
new file mode 100644
index 0000000..5c7d772
--- /dev/null
+++ b/src/main/java/com/openeggbert/entity/gameplay/Eggbert.java
@@ -0,0 +1,30 @@
+///////////////////////////////////////////////////////////////////////////////////////////////
+// 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.entity.gameplay;
+
+/**
+ *
+ * @author robertvokac
+ */
+public class Eggbert {
+
+}
diff --git a/src/main/java/lombok.config b/src/main/java/lombok.config
new file mode 100644
index 0000000..2066d75
--- /dev/null
+++ b/src/main/java/lombok.config
@@ -0,0 +1 @@
+lombok.log.fieldName=LOG
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
new file mode 100755
index 0000000..c52db73
--- /dev/null
+++ b/src/main/java/module-info.java
@@ -0,0 +1,28 @@
+///////////////////////////////////////////////////////////////////////////////////////////////
+// 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.
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+module openeggbert.main {
+ requires lombok;
+ requires org.apache.logging.log4j;
+ requires com.almasb.fxgl.all;
+ exports com.openeggbert.core;
+ exports com.openeggbert.entity.common;
+ exports com.openeggbert.entity.gameplay;
+}
diff --git a/src/main/resources/.gitkeep b/src/main/resources/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/main/resources/META-INF/native-image/filter-file.json b/src/main/resources/META-INF/native-image/filter-file.json
new file mode 100644
index 0000000..d173ee0
--- /dev/null
+++ b/src/main/resources/META-INF/native-image/filter-file.json
@@ -0,0 +1,11 @@
+{ "rules": [
+ {"excludeClasses" : "com.sun.glass.ui.mac.*"},
+ {"excludeClasses" : "com.sun.glass.ui.gtk.*"},
+ {"excludeClasses" : "com.sun.glass.ui.win.*"},
+ {"excludeClasses" : "com.sun.prism.es2.*"},
+ {"excludeClasses" : "com.sun.prism.d3d.*"},
+ {"excludeClasses" : "com.sun.scenario.effect.impl.es2.*"},
+ {"excludeClasses" : "com.sun.scenario.effect.impl.hw.d3d.*"},
+ {"excludeClasses" : "com.gluonhq.attach.**"}
+ ]
+}
diff --git a/src/main/resources/META-INF/native-image/jni-config.json b/src/main/resources/META-INF/native-image/jni-config.json
new file mode 100644
index 0000000..1efffed
--- /dev/null
+++ b/src/main/resources/META-INF/native-image/jni-config.json
@@ -0,0 +1,104 @@
+[
+{
+ "name":"[Lcom.sun.glass.ui.Screen;"
+},
+{
+ "name":"[Lcom.sun.javafx.font.FontConfigManager$FontConfigFont;"
+},
+{
+ "name":"com.sun.glass.ui.Clipboard",
+ "methods":[{"name":"contentChanged","parameterTypes":[] }]
+},
+{
+ "name":"com.sun.glass.ui.Cursor",
+ "fields":[{"name":"ptr"}]
+},
+{
+ "name":"com.sun.glass.ui.Pixels",
+ "methods":[{"name":"attachData","parameterTypes":["long"] }]
+},
+{
+ "name":"com.sun.glass.ui.Screen",
+ "methods":[{"name":"","parameterTypes":["long","int","int","int","int","int","int","int","int","int","int","int","int","int","int","int","float","float","float","float"] }, {"name":"notifySettingsChanged","parameterTypes":[] }]
+},
+{
+ "name":"com.sun.glass.ui.Size",
+ "methods":[{"name":"","parameterTypes":["int","int"] }]
+},
+{
+ "name":"com.sun.glass.ui.View",
+ "fields":[{"name":"ptr"}],
+ "methods":[{"name":"notifyDragDrop","parameterTypes":["int","int","int","int","int"] }, {"name":"notifyDragEnter","parameterTypes":["int","int","int","int","int"] }, {"name":"notifyDragLeave","parameterTypes":[] }, {"name":"notifyDragOver","parameterTypes":["int","int","int","int","int"] }, {"name":"notifyInputMethod","parameterTypes":["java.lang.String","int[]","int[]","byte[]","int","int","int"] }, {"name":"notifyKey","parameterTypes":["int","int","char[]","int"] }, {"name":"notifyMenu","parameterTypes":["int","int","int","int","boolean"] }, {"name":"notifyMouse","parameterTypes":["int","int","int","int","int","int","int","boolean","boolean"] }, {"name":"notifyRepaint","parameterTypes":["int","int","int","int"] }, {"name":"notifyResize","parameterTypes":["int","int"] }, {"name":"notifyScroll","parameterTypes":["int","int","int","int","double","double","int","int","int","int","int","double","double"] }, {"name":"notifyView","parameterTypes":["int"] }]
+},
+{
+ "name":"com.sun.glass.ui.Window",
+ "fields":[{"name":"ptr"}],
+ "methods":[{"name":"isEnabled","parameterTypes":[] }, {"name":"notifyClose","parameterTypes":[] }, {"name":"notifyDelegatePtr","parameterTypes":["long"] }, {"name":"notifyDestroy","parameterTypes":[] }, {"name":"notifyFocus","parameterTypes":["int"] }, {"name":"notifyFocusDisabled","parameterTypes":[] }, {"name":"notifyFocusUngrab","parameterTypes":[] }, {"name":"notifyLevelChanged","parameterTypes":["int"] }, {"name":"notifyMove","parameterTypes":["int","int"] }, {"name":"notifyMoveToAnotherScreen","parameterTypes":["com.sun.glass.ui.Screen"] }, {"name":"notifyResize","parameterTypes":["int","int","int"] }]
+},
+{
+ "name":"com.sun.javafx.font.FontConfigManager$FcCompFont",
+ "fields":[{"name":"allFonts"}, {"name":"fcName"}, {"name":"firstFont"}]
+},
+{
+ "name":"com.sun.javafx.font.FontConfigManager$FontConfigFont",
+ "fields":[{"name":"familyName"}, {"name":"fontFile"}, {"name":"fullName"}, {"name":"styleStr"}],
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.sun.javafx.font.freetype.FT_Bitmap",
+ "fields":[{"name":"buffer"}, {"name":"num_grays"}, {"name":"palette"}, {"name":"palette_mode"}, {"name":"pitch"}, {"name":"pixel_mode"}, {"name":"rows"}, {"name":"width"}]
+},
+{
+ "name":"com.sun.javafx.font.freetype.FT_GlyphSlotRec",
+ "fields":[{"name":"advance_x"}, {"name":"advance_y"}, {"name":"bitmap"}, {"name":"bitmap_left"}, {"name":"bitmap_top"}, {"name":"format"}, {"name":"linearHoriAdvance"}, {"name":"linearVertAdvance"}, {"name":"metrics"}],
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.sun.javafx.font.freetype.FT_Glyph_Metrics",
+ "fields":[{"name":"height"}, {"name":"horiAdvance"}, {"name":"horiBearingX"}, {"name":"horiBearingY"}, {"name":"vertAdvance"}, {"name":"vertBearingX"}, {"name":"vertBearingY"}, {"name":"width"}]
+},
+{
+ "name":"com.sun.javafx.font.freetype.FT_Matrix",
+ "fields":[{"name":"xx"}, {"name":"xy"}, {"name":"yx"}, {"name":"yy"}]
+},
+{
+ "name":"java.lang.Iterable",
+ "methods":[{"name":"iterator","parameterTypes":[] }]
+},
+{
+ "name":"java.lang.Runnable",
+ "methods":[{"name":"run","parameterTypes":[] }]
+},
+{
+ "name":"java.lang.String",
+ "methods":[{"name":"toLowerCase","parameterTypes":["java.util.Locale"] }]
+},
+{
+ "name":"java.nio.ByteBuffer",
+ "methods":[{"name":"array","parameterTypes":[] }, {"name":"wrap","parameterTypes":["byte[]"] }]
+},
+{
+ "name":"java.util.ArrayList",
+ "methods":[{"name":"","parameterTypes":[] }, {"name":"","parameterTypes":["int"] }, {"name":"add","parameterTypes":["java.lang.Object"] }, {"name":"get","parameterTypes":["int"] }]
+},
+{
+ "name":"java.util.HashMap",
+ "methods":[{"name":"containsKey","parameterTypes":["java.lang.Object"] }, {"name":"get","parameterTypes":["java.lang.Object"] }, {"name":"put","parameterTypes":["java.lang.Object","java.lang.Object"] }]
+},
+{
+ "name":"java.util.HashSet",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"java.util.Iterator",
+ "methods":[{"name":"hasNext","parameterTypes":[] }, {"name":"next","parameterTypes":[] }]
+},
+{
+ "name":"java.util.Map",
+ "methods":[{"name":"containsKey","parameterTypes":["java.lang.Object"] }, {"name":"get","parameterTypes":["java.lang.Object"] }, {"name":"keySet","parameterTypes":[] }]
+},
+{
+ "name":"java.util.Set",
+ "methods":[{"name":"add","parameterTypes":["java.lang.Object"] }, {"name":"size","parameterTypes":[] }, {"name":"toArray","parameterTypes":["java.lang.Object[]"] }]
+}
+]
diff --git a/src/main/resources/META-INF/native-image/predefined-classes-config.json b/src/main/resources/META-INF/native-image/predefined-classes-config.json
new file mode 100644
index 0000000..0e79b2c
--- /dev/null
+++ b/src/main/resources/META-INF/native-image/predefined-classes-config.json
@@ -0,0 +1,8 @@
+[
+ {
+ "type":"agent-extracted",
+ "classes":[
+ ]
+ }
+]
+
diff --git a/src/main/resources/META-INF/native-image/proxy-config.json b/src/main/resources/META-INF/native-image/proxy-config.json
new file mode 100644
index 0000000..0d4f101
--- /dev/null
+++ b/src/main/resources/META-INF/native-image/proxy-config.json
@@ -0,0 +1,2 @@
+[
+]
diff --git a/src/main/resources/META-INF/native-image/reflect-config.json b/src/main/resources/META-INF/native-image/reflect-config.json
new file mode 100644
index 0000000..35ab635
--- /dev/null
+++ b/src/main/resources/META-INF/native-image/reflect-config.json
@@ -0,0 +1,524 @@
+[
+{
+ "name":"[B"
+},
+{
+ "name":"[Ljava.lang.String;"
+},
+{
+ "name":"[Lsun.security.pkcs.SignerInfo;"
+},
+{
+ "name":"com.almasb.fxgl.achievement.AchievementService",
+ "allDeclaredFields":true,
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.almasb.fxgl.app.FXGLApplication",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.almasb.fxgl.app.FXGLApplication$GameApplicationService",
+ "allDeclaredFields":true,
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.almasb.fxgl.app.ReadOnlyGameSettings",
+ "queryAllDeclaredMethods":true,
+ "methods":[{"name":"actualHeightProperty","parameterTypes":[] }, {"name":"actualWidthProperty","parameterTypes":[] }, {"name":"devBBoxColorProperty","parameterTypes":[] }, {"name":"devEnableDebugCameraProperty","parameterTypes":[] }, {"name":"devSensorColorProperty","parameterTypes":[] }, {"name":"devShowBBoxProperty","parameterTypes":[] }, {"name":"devShowPositionProperty","parameterTypes":[] }, {"name":"gameDifficultyProperty","parameterTypes":[] }, {"name":"getAchievements","parameterTypes":[] }, {"name":"getActualHeight","parameterTypes":[] }, {"name":"getActualWidth","parameterTypes":[] }, {"name":"getAppIcon","parameterTypes":[] }, {"name":"getApplicationMode","parameterTypes":[] }, {"name":"getCSSList","parameterTypes":[] }, {"name":"getCollisionDetectionStrategy","parameterTypes":[] }, {"name":"getConfigClass","parameterTypes":[] }, {"name":"getCredits","parameterTypes":[] }, {"name":"getDefaultCursor","parameterTypes":[] }, {"name":"getEnabledMenuItems","parameterTypes":[] }, {"name":"getEngineServices","parameterTypes":[] }, {"name":"getFontGame","parameterTypes":[] }, {"name":"getFontMono","parameterTypes":[] }, {"name":"getFontSizeScaleUI","parameterTypes":[] }, {"name":"getFontText","parameterTypes":[] }, {"name":"getFontUI","parameterTypes":[] }, {"name":"getFullScreen","parameterTypes":[] }, {"name":"getGameDifficulty","parameterTypes":[] }, {"name":"getGlobalMusicVolume","parameterTypes":[] }, {"name":"getGlobalSoundVolume","parameterTypes":[] }, {"name":"getHeight","parameterTypes":[] }, {"name":"getLanguage","parameterTypes":[] }, {"name":"getMenuKey","parameterTypes":[] }, {"name":"getMouseSensitivity","parameterTypes":[] }, {"name":"getNotificationViewClass","parameterTypes":[] }, {"name":"getPixelsPerMeter","parameterTypes":[] }, {"name":"getPlatform","parameterTypes":[] }, {"name":"getProfileDir","parameterTypes":[] }, {"name":"getProfileName","parameterTypes":[] }, {"name":"getRandomSeed","parameterTypes":[] }, {"name":"getRuntimeInfo","parameterTypes":[] }, {"name":"getSaveFileExt","parameterTypes":[] }, {"name":"getScaledHeightProp$fxgl","parameterTypes":[] }, {"name":"getScaledWidthProp$fxgl","parameterTypes":[] }, {"name":"getSceneFactory","parameterTypes":[] }, {"name":"getSecondsIn24h","parameterTypes":[] }, {"name":"getSoundMenuBack","parameterTypes":[] }, {"name":"getSoundMenuPress","parameterTypes":[] }, {"name":"getSoundMenuSelect","parameterTypes":[] }, {"name":"getSoundNotification","parameterTypes":[] }, {"name":"getStageStyle","parameterTypes":[] }, {"name":"getSupportedLanguages","parameterTypes":[] }, {"name":"getTicksPerSecond","parameterTypes":[] }, {"name":"getTitle","parameterTypes":[] }, {"name":"getUrlGithub","parameterTypes":[] }, {"name":"getUrlLeaderboard","parameterTypes":[] }, {"name":"getUrlPOM","parameterTypes":[] }, {"name":"getUserAppClass","parameterTypes":[] }, {"name":"getVersion","parameterTypes":[] }, {"name":"getVersionCheckDays","parameterTypes":[] }, {"name":"getWidth","parameterTypes":[] }, {"name":"globalMusicVolumeProperty","parameterTypes":[] }, {"name":"globalSoundVolumeProperty","parameterTypes":[] }, {"name":"is3D","parameterTypes":[] }, {"name":"isAndroid","parameterTypes":[] }, {"name":"isBrowser","parameterTypes":[] }, {"name":"isClickFeedbackEnabled","parameterTypes":[] }, {"name":"isCloseConfirmation","parameterTypes":[] }, {"name":"isDesktop","parameterTypes":[] }, {"name":"isDeveloperMenuEnabled","parameterTypes":[] }, {"name":"isEmbedded","parameterTypes":[] }, {"name":"isEntityPreloadEnabled","parameterTypes":[] }, {"name":"isExperimentalTiledLargeMap","parameterTypes":[] }, {"name":"isFileSystemWriteAllowed","parameterTypes":[] }, {"name":"isFullScreenAllowed","parameterTypes":[] }, {"name":"isFullScreenFromStart","parameterTypes":[] }, {"name":"isGameMenuEnabled","parameterTypes":[] }, {"name":"isIOS","parameterTypes":[] }, {"name":"isIntroEnabled","parameterTypes":[] }, {"name":"isLinux","parameterTypes":[] }, {"name":"isMac","parameterTypes":[] }, {"name":"isMainMenuEnabled","parameterTypes":[] }, {"name":"isManualResizeEnabled","parameterTypes":[] }, {"name":"isMobile","parameterTypes":[] }, {"name":"isNative","parameterTypes":[] }, {"name":"isPauseMusicWhenMinimized","parameterTypes":[] }, {"name":"isPreserveResizeRatio","parameterTypes":[] }, {"name":"isProfilingEnabled","parameterTypes":[] }, {"name":"isScaleAffectedOnResize","parameterTypes":[] }, {"name":"isSingleStep","parameterTypes":[] }, {"name":"isUserProfileEnabled","parameterTypes":[] }, {"name":"isWindows","parameterTypes":[] }, {"name":"prefHeightProperty","parameterTypes":[] }, {"name":"prefWidthProperty","parameterTypes":[] }]
+},
+{
+ "name":"com.almasb.fxgl.app.services.FXGLAssetLoaderService",
+ "allDeclaredFields":true,
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.almasb.fxgl.app.services.FXGLDialogService",
+ "allDeclaredFields":true,
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.almasb.fxgl.app.services.IOTaskExecutorService",
+ "allDeclaredFields":true,
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.almasb.fxgl.app.services.SystemBundleService",
+ "allDeclaredFields":true,
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.almasb.fxgl.app.services.UpdaterService",
+ "allDeclaredFields":true,
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.almasb.fxgl.audio.AudioPlayer",
+ "allDeclaredFields":true,
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.almasb.fxgl.core.EngineService",
+ "allDeclaredFields":true
+},
+{
+ "name":"com.almasb.fxgl.core.asset.AssetLoaderService",
+ "allDeclaredFields":true
+},
+{
+ "name":"com.almasb.fxgl.cutscene.CutsceneService",
+ "allDeclaredFields":true,
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.almasb.fxgl.dev.DevService",
+ "allDeclaredFields":true,
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.almasb.fxgl.io.FileSystemService",
+ "allDeclaredFields":true,
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.almasb.fxgl.localization.LocalizationService",
+ "allDeclaredFields":true,
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.almasb.fxgl.minigames.MiniGameService",
+ "allDeclaredFields":true,
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.almasb.fxgl.net.NetService",
+ "allDeclaredFields":true,
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.almasb.fxgl.notification.NotificationService",
+ "allDeclaredFields":true
+},
+{
+ "name":"com.almasb.fxgl.notification.impl.NotificationServiceProvider",
+ "allDeclaredFields":true,
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.almasb.fxgl.notification.view.XboxNotificationView",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.almasb.fxgl.profile.SaveLoadService",
+ "allDeclaredFields":true,
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.almasb.fxgl.scene.SceneService",
+ "allDeclaredFields":true
+},
+{
+ "name":"com.almasb.fxgl.ui.DialogFactoryService",
+ "allDeclaredFields":true
+},
+{
+ "name":"com.almasb.fxgl.ui.DialogService",
+ "allDeclaredFields":true
+},
+{
+ "name":"com.almasb.fxgl.ui.FXGLDialogFactoryServiceProvider",
+ "allDeclaredFields":true,
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.almasb.fxgl.ui.FXGLUIFactoryServiceProvider",
+ "allDeclaredFields":true,
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.almasb.fxgl.ui.UIFactoryService",
+ "allDeclaredFields":true
+},
+{
+ "name":"com.openeggbert.core.OpenEggbertApp",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.sun.crypto.provider.AESCipher$General",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.sun.crypto.provider.ARCFOURCipher",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.sun.crypto.provider.ChaCha20Cipher$ChaCha20Poly1305",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.sun.crypto.provider.DESCipher",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.sun.crypto.provider.DESedeCipher",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.sun.crypto.provider.DHParameters",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.sun.crypto.provider.GaloisCounterMode$AESGCM",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.sun.crypto.provider.HmacCore$HmacSHA256",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.sun.crypto.provider.TlsMasterSecretGenerator",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.sun.javafx.font.freetype.FTFactory",
+ "methods":[{"name":"getFactory","parameterTypes":[] }]
+},
+{
+ "name":"com.sun.javafx.logging.PrintLogger",
+ "methods":[{"name":"createInstance","parameterTypes":[] }]
+},
+{
+ "name":"com.sun.javafx.logging.jfr.JFRPulseLogger",
+ "methods":[{"name":"createInstance","parameterTypes":[] }]
+},
+{
+ "name":"com.sun.javafx.scene.control.skin.Utils",
+ "methods":[{"name":"getResource","parameterTypes":["java.lang.String"] }]
+},
+{
+ "name":"com.sun.javafx.tk.quantum.QuantumToolkit",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"com.sun.prism.GraphicsPipeline",
+ "methods":[{"name":"getFontFactory","parameterTypes":[] }, {"name":"getPipeline","parameterTypes":[] }]
+},
+{
+ "name":"com.sun.prism.shader.DrawEllipse_Color_Loader",
+ "methods":[{"name":"loadShader","parameterTypes":["com.sun.prism.ps.ShaderFactory","java.io.InputStream"] }]
+},
+{
+ "name":"com.sun.prism.shader.DrawPgram_Color_Loader",
+ "methods":[{"name":"loadShader","parameterTypes":["com.sun.prism.ps.ShaderFactory","java.io.InputStream"] }]
+},
+{
+ "name":"com.sun.prism.shader.FillEllipse_Color_Loader",
+ "methods":[{"name":"loadShader","parameterTypes":["com.sun.prism.ps.ShaderFactory","java.io.InputStream"] }]
+},
+{
+ "name":"com.sun.prism.shader.FillRoundRect_Color_Loader",
+ "methods":[{"name":"loadShader","parameterTypes":["com.sun.prism.ps.ShaderFactory","java.io.InputStream"] }]
+},
+{
+ "name":"com.sun.prism.shader.Solid_Color_Loader",
+ "methods":[{"name":"loadShader","parameterTypes":["com.sun.prism.ps.ShaderFactory","java.io.InputStream"] }]
+},
+{
+ "name":"com.sun.prism.shader.Solid_TextureRGB_Loader",
+ "methods":[{"name":"loadShader","parameterTypes":["com.sun.prism.ps.ShaderFactory","java.io.InputStream"] }]
+},
+{
+ "name":"com.sun.prism.shader.Texture_Color_Loader",
+ "methods":[{"name":"loadShader","parameterTypes":["com.sun.prism.ps.ShaderFactory","java.io.InputStream"] }]
+},
+{
+ "name":"com.sun.prism.shader.Texture_LinearGradient_PAD_Loader",
+ "methods":[{"name":"loadShader","parameterTypes":["com.sun.prism.ps.ShaderFactory","java.io.InputStream"] }]
+},
+{
+ "name":"com.sun.scenario.effect.impl.prism.PrRenderer",
+ "methods":[{"name":"createRenderer","parameterTypes":["com.sun.scenario.effect.FilterContext"] }]
+},
+{
+ "name":"com.sun.scenario.effect.impl.prism.ps.PPSBlend_SRC_INPeer",
+ "methods":[{"name":"","parameterTypes":["com.sun.scenario.effect.FilterContext","com.sun.scenario.effect.impl.Renderer","java.lang.String"] }]
+},
+{
+ "name":"com.sun.scenario.effect.impl.prism.ps.PPSRenderer",
+ "methods":[{"name":"createRenderer","parameterTypes":["com.sun.scenario.effect.FilterContext"] }]
+},
+{
+ "name":"java.lang.Character",
+ "methods":[{"name":"isIdeographic","parameterTypes":["int"] }]
+},
+{
+ "name":"java.lang.String"
+},
+{
+ "name":"java.lang.Thread",
+ "fields":[{"name":"threadLocalRandomProbe"}]
+},
+{
+ "name":"java.nio.ByteBuffer",
+ "methods":[{"name":"order","parameterTypes":["java.nio.ByteOrder"] }]
+},
+{
+ "name":"java.nio.ByteOrder",
+ "methods":[{"name":"nativeOrder","parameterTypes":[] }]
+},
+{
+ "name":"java.security.AlgorithmParametersSpi"
+},
+{
+ "name":"java.security.KeyStoreSpi"
+},
+{
+ "name":"java.security.SecureRandomParameters"
+},
+{
+ "name":"java.security.interfaces.RSAPrivateKey"
+},
+{
+ "name":"java.security.interfaces.RSAPublicKey"
+},
+{
+ "name":"java.util.Date"
+},
+{
+ "name":"java.util.concurrent.atomic.AtomicBoolean",
+ "fields":[{"name":"value"}]
+},
+{
+ "name":"java.util.concurrent.atomic.AtomicMarkableReference",
+ "fields":[{"name":"pair"}]
+},
+{
+ "name":"java.util.concurrent.atomic.AtomicReference",
+ "fields":[{"name":"value"}]
+},
+{
+ "name":"java.util.concurrent.atomic.Striped64",
+ "fields":[{"name":"base"}, {"name":"cellsBusy"}]
+},
+{
+ "name":"javafx.scene.Camera"
+},
+{
+ "name":"javafx.scene.Group"
+},
+{
+ "name":"javafx.scene.Node"
+},
+{
+ "name":"javafx.scene.ParallelCamera"
+},
+{
+ "name":"javafx.scene.Parent"
+},
+{
+ "name":"javafx.scene.Scene"
+},
+{
+ "name":"javafx.scene.control.Control"
+},
+{
+ "name":"javafx.scene.effect.Effect"
+},
+{
+ "name":"javafx.scene.image.Image"
+},
+{
+ "name":"javafx.scene.image.ImageView"
+},
+{
+ "name":"javafx.scene.layout.Pane"
+},
+{
+ "name":"javafx.scene.layout.Region"
+},
+{
+ "name":"javafx.scene.shape.Circle"
+},
+{
+ "name":"javafx.scene.shape.Line"
+},
+{
+ "name":"javafx.scene.shape.Polygon"
+},
+{
+ "name":"javafx.scene.shape.Rectangle"
+},
+{
+ "name":"javafx.scene.shape.Shape"
+},
+{
+ "name":"javafx.scene.text.Font"
+},
+{
+ "name":"javafx.scene.text.Text"
+},
+{
+ "name":"javafx.scene.transform.Transform"
+},
+{
+ "name":"javafx.stage.Stage"
+},
+{
+ "name":"javafx.stage.Window"
+},
+{
+ "name":"javax.security.auth.x500.X500Principal",
+ "fields":[{"name":"thisX500Name"}],
+ "methods":[{"name":"","parameterTypes":["sun.security.x509.X500Name"] }]
+},
+{
+ "name":"sun.misc.Unsafe",
+ "fields":[{"name":"theUnsafe"}]
+},
+{
+ "name":"sun.security.pkcs12.PKCS12KeyStore",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.pkcs12.PKCS12KeyStore$DualFormatPKCS12",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.provider.DSA$SHA224withDSA",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.provider.DSA$SHA256withDSA",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.provider.JavaKeyStore$DualFormatJKS",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.provider.JavaKeyStore$JKS",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.provider.MD5",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.provider.NativePRNG",
+ "methods":[{"name":"","parameterTypes":[] }, {"name":"","parameterTypes":["java.security.SecureRandomParameters"] }]
+},
+{
+ "name":"sun.security.provider.SHA",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.provider.SHA2$SHA224",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.provider.SHA2$SHA256",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.provider.SHA5$SHA384",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.provider.SHA5$SHA512",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.provider.X509Factory",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.provider.certpath.PKIXCertPathValidator",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.rsa.PSSParameters",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.rsa.RSAKeyFactory$Legacy",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.rsa.RSAPSSSignature",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.rsa.RSASignature$SHA224withRSA",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.rsa.RSASignature$SHA256withRSA",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.ssl.KeyManagerFactoryImpl$SunX509",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.ssl.SSLContextImpl$DefaultSSLContext",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.ssl.TrustManagerFactoryImpl$PKIXFactory",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.util.ObjectIdentifier"
+},
+{
+ "name":"sun.security.x509.AuthorityInfoAccessExtension",
+ "methods":[{"name":"","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
+},
+{
+ "name":"sun.security.x509.AuthorityKeyIdentifierExtension",
+ "methods":[{"name":"","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
+},
+{
+ "name":"sun.security.x509.BasicConstraintsExtension",
+ "methods":[{"name":"","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
+},
+{
+ "name":"sun.security.x509.CRLDistributionPointsExtension",
+ "methods":[{"name":"","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
+},
+{
+ "name":"sun.security.x509.CertificateExtensions"
+},
+{
+ "name":"sun.security.x509.CertificatePoliciesExtension",
+ "methods":[{"name":"","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
+},
+{
+ "name":"sun.security.x509.ExtendedKeyUsageExtension",
+ "methods":[{"name":"","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
+},
+{
+ "name":"sun.security.x509.IssuerAlternativeNameExtension",
+ "methods":[{"name":"","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
+},
+{
+ "name":"sun.security.x509.KeyUsageExtension",
+ "methods":[{"name":"","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
+},
+{
+ "name":"sun.security.x509.NetscapeCertTypeExtension",
+ "methods":[{"name":"","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
+},
+{
+ "name":"sun.security.x509.PrivateKeyUsageExtension",
+ "methods":[{"name":"","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
+},
+{
+ "name":"sun.security.x509.SubjectAlternativeNameExtension",
+ "methods":[{"name":"","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
+},
+{
+ "name":"sun.security.x509.SubjectKeyIdentifierExtension",
+ "methods":[{"name":"","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
+}
+]
diff --git a/src/main/resources/META-INF/native-image/resource-config.json b/src/main/resources/META-INF/native-image/resource-config.json
new file mode 100644
index 0000000..0a1d352
--- /dev/null
+++ b/src/main/resources/META-INF/native-image/resource-config.json
@@ -0,0 +1,130 @@
+{
+ "resources":{
+ "includes":[{
+ "pattern":"\\QMETA-INF/fonts.mf\\E"
+ }, {
+ "pattern":"\\QMETA-INF/services/java.lang.System$LoggerFinder\\E"
+ }, {
+ "pattern":"\\QMETA-INF/services/java.net.spi.InetAddressResolverProvider\\E"
+ }, {
+ "pattern":"\\QMETA-INF/services/java.net.spi.URLStreamHandlerProvider\\E"
+ }, {
+ "pattern":"\\QMETA-INF/services/java.time.zone.ZoneRulesProvider\\E"
+ }, {
+ "pattern":"\\Qcom/sun/javafx/scene/control/skin/resources/controls_en.properties\\E"
+ }, {
+ "pattern":"\\Qcom/sun/javafx/scene/control/skin/resources/controls_en_US.properties\\E"
+ }, {
+ "pattern":"\\Qcom/sun/javafx/tk/quantum/QuantumMessagesBundle_en.properties\\E"
+ }, {
+ "pattern":"\\Qcom/sun/javafx/tk/quantum/QuantumMessagesBundle_en_US.properties\\E"
+ }, {
+ "pattern":"com.almasb.fxgl.all:\\Qfxglassets/languages/english.lang\\E"
+ }, {
+ "pattern":"com.almasb.fxgl.all:\\Qfxglassets/textures/brick.png\\E"
+ }, {
+ "pattern":"com.almasb.fxgl.all:\\Qfxglassets/textures/fxgl_default_cursor.png\\E"
+ }, {
+ "pattern":"com.almasb.fxgl.all:\\Qfxglassets/textures/fxgl_icon.png\\E"
+ }, {
+ "pattern":"com.almasb.fxgl.all:\\Qfxglassets/textures/particles/smoke.png\\E"
+ }, {
+ "pattern":"com.almasb.fxgl.all:\\Qfxglassets/textures/particles/trace_horizontal.png\\E"
+ }, {
+ "pattern":"com.almasb.fxgl.all:\\Qfxglassets/ui/css/fxgl_dark.css\\E"
+ }, {
+ "pattern":"com.almasb.fxgl.all:\\Qfxglassets/ui/fonts/Abel-Regular.ttf\\E"
+ }, {
+ "pattern":"com.almasb.fxgl.all:\\Qfxglassets/ui/fonts/Courier-Prime.ttf\\E"
+ }, {
+ "pattern":"com.almasb.fxgl.all:\\Qfxglassets/ui/fonts/TerminalLandMono-Regular.otf\\E"
+ }, {
+ "pattern":"com.almasb.fxgl.all:\\Qfxglassets/ui/fonts/VarelaRound-Regular.ttf\\E"
+ }, {
+ "pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt74b/nfkc.nrm\\E"
+ }, {
+ "pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt74b/ubidi.icu\\E"
+ }, {
+ "pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt74b/uprops.icu\\E"
+ }, {
+ "pattern":"java.base:\\Qsun/net/idn/uidna.spp\\E"
+ }, {
+ "pattern":"javafx.controls:\\Qcom/sun/javafx/scene/control/skin/modena/modena.bss\\E"
+ }, {
+ "pattern":"javafx.controls:\\Qcom/sun/javafx/scene/control/skin/resources/controls.properties\\E"
+ }, {
+ "pattern":"javafx.controls:\\Qcom/sun/javafx/scene/control/skin/resources/controls_en.properties\\E"
+ }, {
+ "pattern":"javafx.controls:\\Qcom/sun/javafx/scene/control/skin/resources/controls_en_US.properties\\E"
+ }, {
+ "pattern":"javafx.graphics:\\Qcom/sun/glass/utils/NativeLibLoader.class\\E"
+ }, {
+ "pattern":"javafx.graphics:\\Qcom/sun/javafx/tk/quantum/QuantumMessagesBundle.properties\\E"
+ }, {
+ "pattern":"javafx.graphics:\\Qcom/sun/javafx/tk/quantum/QuantumMessagesBundle_en.properties\\E"
+ }, {
+ "pattern":"javafx.graphics:\\Qcom/sun/javafx/tk/quantum/QuantumMessagesBundle_en_US.properties\\E"
+ }, {
+ "pattern":"javafx.graphics:\\Qcom/sun/prism/es2/glsl/DrawEllipse_Color.frag\\E"
+ }, {
+ "pattern":"javafx.graphics:\\Qcom/sun/prism/es2/glsl/DrawPgram_Color.frag\\E"
+ }, {
+ "pattern":"javafx.graphics:\\Qcom/sun/prism/es2/glsl/FillEllipse_Color.frag\\E"
+ }, {
+ "pattern":"javafx.graphics:\\Qcom/sun/prism/es2/glsl/FillRoundRect_Color.frag\\E"
+ }, {
+ "pattern":"javafx.graphics:\\Qcom/sun/prism/es2/glsl/Solid_Color.frag\\E"
+ }, {
+ "pattern":"javafx.graphics:\\Qcom/sun/prism/es2/glsl/Solid_TextureRGB.frag\\E"
+ }, {
+ "pattern":"javafx.graphics:\\Qcom/sun/prism/es2/glsl/Texture_Color.frag\\E"
+ }, {
+ "pattern":"javafx.graphics:\\Qcom/sun/prism/es2/glsl/Texture_LinearGradient_PAD.frag\\E"
+ }, {
+ "pattern":"javafx.graphics:\\Qcom/sun/scenario/effect/impl/es2/glsl/Blend_SRC_IN.frag\\E"
+ }, {
+ "pattern":"javafx.graphics:\\Qlibglass.so\\E"
+ }, {
+ "pattern":"javafx.graphics:\\Qlibglassgtk3.so\\E"
+ }, {
+ "pattern":"javafx.graphics:\\Qlibjavafx_font.so\\E"
+ }, {
+ "pattern":"javafx.graphics:\\Qlibjavafx_font_freetype.so\\E"
+ }, {
+ "pattern":"javafx.graphics:\\Qlibjavafx_font_pango.so\\E"
+ }, {
+ "pattern":"javafx.graphics:\\Qlibprism_es2.so\\E"
+ }, {
+ "pattern":"openeggbert.main:\\Qassets/languages/english.lang\\E"
+ }, {
+ "pattern":"openeggbert.main:\\Qassets/textures/particles/smoke.png\\E"
+ }, {
+ "pattern":"openeggbert.main:\\Qassets/textures/particles/trace_horizontal.png\\E"
+ }, {
+ "pattern":"openeggbert.main:\\Qassets/ui/css/fxgl_dark.css\\E"
+ }, {
+ "pattern":"openeggbert.main:\\Qassets/ui/fonts/Abel-Regular.ttf\\E"
+ }, {
+ "pattern":"openeggbert.main:\\Qassets/ui/fonts/Courier-Prime.ttf\\E"
+ }, {
+ "pattern":"openeggbert.main:\\Qassets/ui/fonts/TerminalLandMono-Regular.otf\\E"
+ }, {
+ "pattern":"openeggbert.main:\\Qassets/ui/fonts/VarelaRound-Regular.ttf\\E"
+ }]},
+ "bundles":[{
+ "name":"com.sun.javafx.tk.quantum.QuantumMessagesBundle",
+ "locales":["en-US"]
+ }, {
+ "name":"com/sun/javafx/scene/control/skin/resources/controls",
+ "locales":["en-US"]
+ }, {
+ "name":"sun.text.resources.FormatData",
+ "locales":["en", "en-US", "und"]
+ }, {
+ "name":"sun.text.resources.JavaTimeSupplementary",
+ "locales":["en", "en-US", "und"]
+ }, {
+ "name":"sun.text.resources.cldr.FormatData",
+ "locales":["en", "en-US", "und"]
+ }]
+}
diff --git a/src/main/resources/META-INF/native-image/serialization-config.json b/src/main/resources/META-INF/native-image/serialization-config.json
new file mode 100644
index 0000000..7445cf0
--- /dev/null
+++ b/src/main/resources/META-INF/native-image/serialization-config.json
@@ -0,0 +1,17 @@
+{
+ "types":[
+ {
+ "name":"com.almasb.fxgl.core.serialization.Bundle"
+ },
+ {
+ "name":"java.lang.String"
+ },
+ {
+ "name":"java.util.HashMap"
+ }
+ ],
+ "lambdaCapturingTypes":[
+ ],
+ "proxies":[
+ ]
+}
diff --git a/src/main/resources/log4j2.properties b/src/main/resources/log4j2.properties
new file mode 100644
index 0000000..2939b9d
--- /dev/null
+++ b/src/main/resources/log4j2.properties
@@ -0,0 +1,5 @@
+appender.console.type = Console
+appender.console.name = STDOUT
+appender.console.layout.type = PatternLayout
+appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
+rootLogger=info, STDOUT
diff --git a/src/test/java/com/openeggbert/main/.gitkeep b/src/test/java/com/openeggbert/main/.gitkeep
new file mode 100644
index 0000000..e69de29