summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore114
-rw-r--r--android/AndroidManifest.xml29
-rw-r--r--android/build.gradle91
-rw-r--r--android/ic_launcher-web.pngbin0 -> 22195 bytes
-rw-r--r--android/proguard-rules.pro42
-rw-r--r--android/project.properties9
-rw-r--r--android/res/drawable-anydpi-v26/ic_launcher.xml6
-rw-r--r--android/res/drawable-anydpi-v26/ic_launcher_foreground.xml40
-rw-r--r--android/res/drawable-hdpi/ic_launcher.pngbin0 -> 16820 bytes
-rw-r--r--android/res/drawable-mdpi/ic_launcher.pngbin0 -> 16124 bytes
-rw-r--r--android/res/drawable-xhdpi/ic_launcher.pngbin0 -> 17915 bytes
-rw-r--r--android/res/drawable-xxhdpi/ic_launcher.pngbin0 -> 18746 bytes
-rw-r--r--android/res/drawable-xxxhdpi/ic_launcher.pngbin0 -> 19448 bytes
-rw-r--r--android/res/values/color.xml4
-rw-r--r--android/res/values/strings.xml6
-rw-r--r--android/src/com/ilotterytea/maxoning/AndroidLauncher.java16
-rw-r--r--assets/badlogic.jpgbin0 -> 68465 bytes
-rwxr-xr-xassets/dev.pngbin0 -> 18141 bytes
-rw-r--r--assets/fnt/MaxonBob.fnt168
-rw-r--r--assets/fnt/MaxonBob.pngbin0 -> 51991 bytes
-rw-r--r--assets/fnt/MaxonComic.fnt168
-rw-r--r--assets/fnt/MaxonComic.pngbin0 -> 57685 bytes
-rw-r--r--assets/fnt/MaxonPuff.fnt324
-rw-r--r--assets/fnt/MaxonPuff.pngbin0 -> 39326 bytes
-rw-r--r--assets/icon.pngbin0 -> 6890 bytes
-rw-r--r--assets/main.skin55
-rw-r--r--assets/mus/menu/mus_menu_intro.oggbin0 -> 187386 bytes
-rw-r--r--assets/mus/menu/mus_menu_loop.oggbin0 -> 865507 bytes
-rw-r--r--assets/sprites/SplashWall.pngbin0 -> 1752 bytes
-rw-r--r--assets/sprites/black.pngbin0 -> 568 bytes
-rw-r--r--assets/sprites/brand.pngbin0 -> 38807 bytes
-rw-r--r--assets/sprites/brandOnline.pngbin0 -> 28159 bytes
-rw-r--r--assets/sprites/ilotterytea.pngbin0 -> 1778 bytes
-rw-r--r--assets/sprites/sheet/TooManyM4x0nns.pngbin0 -> 960131 bytes
-rw-r--r--assets/sprites/sheet/loadingCircle.pngbin0 -> 867944 bytes
-rw-r--r--assets/sprites/white.pngbin0 -> 611 bytes
-rw-r--r--assets/texts/splashes.txt1
-rw-r--r--build.gradle79
-rw-r--r--core/build.gradle9
-rw-r--r--core/src/com/ilotterytea/maxoning/MaxonConstants.java7
-rw-r--r--core/src/com/ilotterytea/maxoning/MaxonGame.java45
-rw-r--r--core/src/com/ilotterytea/maxoning/anim/AnimatedImage.java38
-rw-r--r--core/src/com/ilotterytea/maxoning/anim/SpriteUtils.java34
-rw-r--r--core/src/com/ilotterytea/maxoning/screen/AssetLoadingScreen.java107
-rw-r--r--core/src/com/ilotterytea/maxoning/screen/MenuScreen.java233
-rw-r--r--core/src/com/ilotterytea/maxoning/screen/SplashScreen.java158
-rw-r--r--core/src/com/ilotterytea/maxoning/utils/colors/HexToARGB.java14
-rw-r--r--desktop/build.gradle47
-rw-r--r--desktop/src/com/ilotterytea/maxoning/DesktopLauncher.java35
-rw-r--r--gradle.properties3
-rw-r--r--gradle/wrapper/gradle-wrapper.jarbin0 -> 60756 bytes
-rw-r--r--gradle/wrapper/gradle-wrapper.properties5
-rwxr-xr-xgradlew240
-rw-r--r--gradlew.bat91
-rw-r--r--settings.gradle1
55 files changed, 2219 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..3d9d087
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,114 @@
+## Java
+
+*.class
+*.war
+*.ear
+hs_err_pid*
+
+## Robovm
+/ios/robovm-build/
+
+## GWT
+/html/war/
+/html/gwt-unitCache/
+.apt_generated/
+.gwt/
+gwt-unitCache/
+www-test/
+.gwt-tmp/
+
+## Android Studio and Intellij and Android in general
+/android/libs/armeabi-v7a/
+/android/libs/arm64-v8a/
+/android/libs/x86/
+/android/libs/x86_64/
+/android/gen/
+.idea/
+*.ipr
+*.iws
+*.iml
+/android/out/
+com_crashlytics_export_strings.xml
+
+## Eclipse
+
+.classpath
+.project
+.metadata/
+/android/bin/
+/core/bin/
+/desktop/bin/
+/html/bin/
+/ios/bin/
+*.tmp
+*.bak
+*.swp
+*~.nib
+.settings/
+.loadpath
+.externalToolBuilders/
+*.launch
+
+## NetBeans
+
+/nbproject/private/
+/android/nbproject/private/
+/core/nbproject/private/
+/desktop/nbproject/private/
+/html/nbproject/private/
+/ios/nbproject/private/
+
+/build/
+/android/build/
+/core/build/
+/desktop/build/
+/html/build/
+/ios/build/
+
+/nbbuild/
+/android/nbbuild/
+/core/nbbuild/
+/desktop/nbbuild/
+/html/nbbuild/
+/ios/nbbuild/
+
+/dist/
+/android/dist/
+/core/dist/
+/desktop/dist/
+/html/dist/
+/ios/dist/
+
+/nbdist/
+/android/nbdist/
+/core/nbdist/
+/desktop/nbdist/
+/html/nbdist/
+/ios/nbdist/
+
+nbactions.xml
+nb-configuration.xml
+
+## Gradle
+
+/local.properties
+.gradle/
+gradle-app.setting
+/build/
+/android/build/
+/core/build/
+/desktop/build/
+/html/build/
+/ios/build/
+
+## OS Specific
+.DS_Store
+Thumbs.db
+
+## iOS
+/ios/xcode/*.xcodeproj/*
+!/ios/xcode/*.xcodeproj/xcshareddata
+!/ios/xcode/*.xcodeproj/project.pbxproj
+/ios/xcode/native/
+/ios/IOSLauncher.app
+/ios/IOSLauncher.app.dSYM
diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml
new file mode 100644
index 0000000..28bee37
--- /dev/null
+++ b/android/AndroidManifest.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ package="com.ilotterytea.maxoning">
+
+ <uses-feature android:glEsVersion="0x00020000" android:required="true" />
+
+ <application
+ android:allowBackup="true"
+ android:fullBackupContent="true"
+ android:icon="@drawable/ic_launcher"
+ android:isGame="true"
+ android:appCategory="game"
+ android:label="@string/app_name"
+ tools:ignore="UnusedAttribute">
+ <activity
+ android:name="com.ilotterytea.maxoning.AndroidLauncher"
+ android:label="@string/app_name"
+ android:screenOrientation="portrait"
+ android:configChanges="keyboard|keyboardHidden|navigation|orientation|screenSize|screenLayout"
+ android:exported="true">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+
+</manifest>
diff --git a/android/build.gradle b/android/build.gradle
new file mode 100644
index 0000000..6dcd79a
--- /dev/null
+++ b/android/build.gradle
@@ -0,0 +1,91 @@
+/*android {
+ buildToolsVersion "31.0.0"
+ compileSdkVersion 31
+ sourceSets {
+ main {
+ manifest.srcFile 'AndroidManifest.xml'
+ java.srcDirs = ['src']
+ aidl.srcDirs = ['src']
+ renderscript.srcDirs = ['src']
+ res.srcDirs = ['res']
+ assets.srcDirs = ['../assets']
+ jniLibs.srcDirs = ['libs']
+ }
+
+ }
+ packagingOptions {
+ exclude 'META-INF/robovm/ios/robovm.xml'
+ }
+ defaultConfig {
+ applicationId "com.ilotterytea.maxoning"
+ minSdkVersion 14
+ targetSdkVersion 31
+ versionCode 1
+ versionName "1.0"
+ }
+ buildTypes {
+ release {
+ minifyEnabled true
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+}
+
+
+// called every time gradle gets executed, takes the native dependencies of
+// the natives configuration, and extracts them to the proper libs/ folders
+// so they get packed with the APK.
+task copyAndroidNatives {
+ doFirst {
+ file("libs/armeabi-v7a/").mkdirs()
+ file("libs/arm64-v8a/").mkdirs()
+ file("libs/x86_64/").mkdirs()
+ file("libs/x86/").mkdirs()
+
+ configurations.natives.copy().files.each { jar ->
+ def outputDir = null
+ if (jar.name.endsWith("natives-arm64-v8a.jar")) outputDir = file("libs/arm64-v8a")
+ if (jar.name.endsWith("natives-armeabi-v7a.jar")) outputDir = file("libs/armeabi-v7a")
+ if(jar.name.endsWith("natives-x86_64.jar")) outputDir = file("libs/x86_64")
+ if(jar.name.endsWith("natives-x86.jar")) outputDir = file("libs/x86")
+ if(outputDir != null) {
+ copy {
+ from zipTree(jar)
+ into outputDir
+ include "*.so"
+ }
+ }
+ }
+ }
+}
+
+tasks.whenTaskAdded { packageTask ->
+ if (packageTask.name.contains("merge") && packageTask.name.contains("JniLibFolders")) {
+ packageTask.dependsOn 'copyAndroidNatives'
+ }
+}
+
+task run(type: Exec) {
+ def path
+ def localProperties = project.file("../local.properties")
+ if (localProperties.exists()) {
+ Properties properties = new Properties()
+ localProperties.withInputStream { instr ->
+ properties.load(instr)
+ }
+ def sdkDir = properties.getProperty('sdk.dir')
+ if (sdkDir) {
+ path = sdkDir
+ } else {
+ path = "$System.env.ANDROID_HOME"
+ }
+ } else {
+ path = "$System.env.ANDROID_HOME"
+ }
+
+ def adb = path + "/platform-tools/adb"
+ commandLine "$adb", 'shell', 'am', 'start', '-n', 'com.ilotterytea.maxoning/com.ilotterytea.maxoning.AndroidLauncher'
+}
+
+eclipse.project.name = appName + "-android"
+*/ \ No newline at end of file
diff --git a/android/ic_launcher-web.png b/android/ic_launcher-web.png
new file mode 100644
index 0000000..8f0110d
--- /dev/null
+++ b/android/ic_launcher-web.png
Binary files differ
diff --git a/android/proguard-rules.pro b/android/proguard-rules.pro
new file mode 100644
index 0000000..6e0b079
--- /dev/null
+++ b/android/proguard-rules.pro
@@ -0,0 +1,42 @@
+# To enable ProGuard in your project, edit project.properties
+# to define the proguard.config property as described in that file.
+#
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in ${sdk.dir}/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the ProGuard
+# include property in project.properties.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+-verbose
+
+-dontwarn com.badlogic.gdx.backends.android.AndroidFragmentApplication
+-dontwarn com.badlogic.gdx.utils.GdxBuild
+-dontwarn com.badlogic.gdx.physics.box2d.utils.Box2DBuild
+-dontwarn com.badlogic.gdx.jnigen.BuildTarget*
+-dontwarn com.badlogic.gdx.graphics.g2d.freetype.FreetypeBuild
+
+# Required if using Gdx-Controllers extension
+-keep class com.badlogic.gdx.controllers.android.AndroidControllers
+
+# Required if using Box2D extension
+-keepclassmembers class com.badlogic.gdx.physics.box2d.World {
+ boolean contactFilter(long, long);
+ void beginContact(long);
+ void endContact(long);
+ void preSolve(long, long);
+ void postSolve(long, long);
+ boolean reportFixture(long);
+ float reportRayFixture(long, float, float, float, float, float);
+}
diff --git a/android/project.properties b/android/project.properties
new file mode 100644
index 0000000..3fefa92
--- /dev/null
+++ b/android/project.properties
@@ -0,0 +1,9 @@
+# This file is used by the Eclipse ADT plugin. It is unnecessary for IDEA and Android Studio projects, which
+# configure Proguard and the Android target via the build.gradle file.
+
+# To enable ProGuard to work with Eclipse ADT, uncomment this (available properties: sdk.dir, user.home)
+# and ensure proguard.jar in the Android SDK is up to date (or alternately reduce the android target to 23 or lower):
+# proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-rules.pro
+
+# Project target.
+target=android-19
diff --git a/android/res/drawable-anydpi-v26/ic_launcher.xml b/android/res/drawable-anydpi-v26/ic_launcher.xml
new file mode 100644
index 0000000..6c7313a
--- /dev/null
+++ b/android/res/drawable-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon
+ xmlns:android="http://schemas.android.com/apk/res/android">
+ <background android:drawable="@color/ic_background_color"/>
+ <foreground android:drawable="@drawable/ic_launcher_foreground"/>
+</adaptive-icon>
diff --git a/android/res/drawable-anydpi-v26/ic_launcher_foreground.xml b/android/res/drawable-anydpi-v26/ic_launcher_foreground.xml
new file mode 100644
index 0000000..5916ee8
--- /dev/null
+++ b/android/res/drawable-anydpi-v26/ic_launcher_foreground.xml
@@ -0,0 +1,40 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="108dp"
+ android:height="108dp"
+ android:viewportWidth="108"
+ android:viewportHeight="108">
+ <path
+ android:pathData="M22,48.667l2.987,0l0,10.667l-2.987,0z"
+ android:fillColor="#000000"
+ android:strokeColor="#00000000"
+ android:fillAlpha="1"/>
+ <path
+ android:pathData="M26.907,52.72l2.987,0l0,6.613l-2.987,0z"
+ android:fillColor="#000000"
+ android:strokeColor="#00000000"
+ android:fillAlpha="1"/>
+ <path
+ android:pathData="M26.907,48.667l2.987,0l0,2.56l-2.987,0z"
+ android:fillColor="#000000"
+ android:strokeColor="#00000000"
+ android:fillAlpha="1"/>
+ <path
+ android:pathData="M31.813,48.667L31.813,52.72 31.813,55.067 31.813,56.767 31.813,59.333l2.992,0 2.117,0c1.654,0 2.998,-1.481 2.998,-3.307 0,-1.826 -1.344,-3.307 -2.998,-3.307l-2.117,0L34.805,48.667ZM34.805,55.067l1.269,0c0.469,0 0.848,0.384 0.848,0.853 0,0.469 -0.379,0.847 -0.848,0.847l-1.269,0z"
+ android:fillColor="#000000"
+ android:strokeColor="#00000000"
+ android:fillAlpha="1"/>
+ <path
+ android:pathData="m44.192,48.667c-1.65,0 -2.992,1.481 -2.992,3.307 0,0.023 -0,0.044 0,0.067 0,0.004 -0,0.009 0,0.013l0,3.893c-0.001,0.027 0,0.053 0,0.08 0,1.826 1.341,3.307 2.992,3.307l2.112,0 0.247,0 2.739,0 0.247,0 2.112,0c1.651,0 2.992,-1.481 2.992,-3.307 0,-1.826 -1.341,-3.307 -2.992,-3.307l-1.199,0 -0.48,0 -2.372,0l0,2.347l2.372,0 0.48,0 0.353,0c0.468,0 0.846,0.384 0.846,0.853 0,0.469 -0.378,0.847 -0.846,0.847l-0.833,0 -0.433,0 -0.247,0 -2.739,0 -0.247,0 -0.433,0 -0.833,0c-0.459,0 -0.832,-0.363 -0.846,-0.82l0,-3.893 0,-0.013c0.021,-0.45 0.391,-0.807 0.846,-0.807l0.833,0 0.433,0 1.293,0l0,0.007L54.207,51.24L54.207,48.667l-4.917,0 -1.692,0 -1.293,0 -2.112,0z"
+ android:fillColor="#e74a45"
+ android:strokeColor="#00000000"
+ android:fillAlpha="1"/>
+ <path
+ android:pathData="M56.133,48.667L56.133,51.238l5.406,0 1.859,0 1.105,0 0.43,0 0.827,0c0.452,0 0.82,0.356 0.84,0.806l0,0.013 0,3.891c-0.014,0.456 -0.384,0.819 -0.84,0.819l-0.827,0 -0.43,0 -1.899,0 -1.065,0 -2.442,0L59.098,52.724L56.133,52.724l0,4.044 0,1.752 0,0.813l5.406,0 1.065,0 1.899,0 2.098,0c1.639,0 2.971,-1.48 2.971,-3.305 0,-0.027 0.001,-0.053 0,-0.08L69.573,52.058c0,-0.004 -0,-0.009 0,-0.013 0,-0.022 0,-0.044 0,-0.067 0,-1.825 -1.332,-3.305 -2.971,-3.305l-2.098,0 -1.105,0l0,-0.007L56.133,48.667Z"
+ android:fillColor="#e74a45"
+ android:strokeColor="#00000000"
+ android:fillAlpha="1"/>
+ <path
+ android:pathData="M69.572,48.667L73.72,48.667L77.787,52.733 81.853,48.667l4.147,0l-5.333,5.333 5.333,5.333L81.853,59.333L77.787,55.267 73.72,59.333l-4.147,0l5.333,-5.333z"
+ android:fillColor="#e74a45"
+ android:strokeColor="#00000000"/>
+</vector>
diff --git a/android/res/drawable-hdpi/ic_launcher.png b/android/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000..91f696b
--- /dev/null
+++ b/android/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/android/res/drawable-mdpi/ic_launcher.png b/android/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000..c1ab239
--- /dev/null
+++ b/android/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/android/res/drawable-xhdpi/ic_launcher.png b/android/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..2011cc0
--- /dev/null
+++ b/android/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/android/res/drawable-xxhdpi/ic_launcher.png b/android/res/drawable-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..25fcef0
--- /dev/null
+++ b/android/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/android/res/drawable-xxxhdpi/ic_launcher.png b/android/res/drawable-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..d109946
--- /dev/null
+++ b/android/res/drawable-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/android/res/values/color.xml b/android/res/values/color.xml
new file mode 100644
index 0000000..933353e
--- /dev/null
+++ b/android/res/values/color.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <color name="ic_background_color">#FFFFFFFF</color>
+</resources>
diff --git a/android/res/values/strings.xml b/android/res/values/strings.xml
new file mode 100644
index 0000000..cbe6c20
--- /dev/null
+++ b/android/res/values/strings.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+ <string name="app_name">Maxon Petting Simulator</string>
+
+</resources>
diff --git a/android/src/com/ilotterytea/maxoning/AndroidLauncher.java b/android/src/com/ilotterytea/maxoning/AndroidLauncher.java
new file mode 100644
index 0000000..f217cb9
--- /dev/null
+++ b/android/src/com/ilotterytea/maxoning/AndroidLauncher.java
@@ -0,0 +1,16 @@
+package com.ilotterytea.maxoning;
+
+import android.os.Bundle;
+
+import com.badlogic.gdx.backends.android.AndroidApplication;
+import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
+import com.ilotterytea.maxoning.MaxonGame;
+
+public class AndroidLauncher extends AndroidApplication {
+ @Override
+ protected void onCreate (Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
+ initialize(new MaxonGame(), config);
+ }
+}
diff --git a/assets/badlogic.jpg b/assets/badlogic.jpg
new file mode 100644
index 0000000..4390da6
--- /dev/null
+++ b/assets/badlogic.jpg
Binary files differ
diff --git a/assets/dev.png b/assets/dev.png
new file mode 100755
index 0000000..89c67cf
--- /dev/null
+++ b/assets/dev.png
Binary files differ
diff --git a/assets/fnt/MaxonBob.fnt b/assets/fnt/MaxonBob.fnt
new file mode 100644
index 0000000..7d81cf9
--- /dev/null
+++ b/assets/fnt/MaxonBob.fnt
@@ -0,0 +1,168 @@
+info face="Blob Spongey Lowercase" size=32 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=1,1,1,1 spacing=-2,-2
+common lineHeight=36 base=26 scaleW=512 scaleH=512 pages=1 packed=0
+page id=0 file="MaxonBob.png"
+chars count=163
+char id=0 x=348 y=132 width=25 height=35 xoffset=-1 yoffset=-3 xadvance=24 page=0 chnl=0
+char id=13 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=0 xadvance=0 page=0 chnl=0
+char id=32 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=0 xadvance=13 page=0 chnl=0
+char id=33 x=83 y=85 width=12 height=26 xoffset=0 yoffset=1 xadvance=12 page=0 chnl=0
+char id=34 x=226 y=132 width=16 height=13 xoffset=0 yoffset=0 xadvance=15 page=0 chnl=0
+char id=35 x=287 y=85 width=26 height=25 xoffset=-1 yoffset=2 xadvance=25 page=0 chnl=0
+char id=36 x=184 y=85 width=16 height=26 xoffset=-1 yoffset=1 xadvance=15 page=0 chnl=0
+char id=37 x=265 y=32 width=24 height=27 xoffset=0 yoffset=1 xadvance=24 page=0 chnl=0
+char id=38 x=289 y=32 width=26 height=27 xoffset=0 yoffset=0 xadvance=25 page=0 chnl=0
+char id=39 x=251 y=132 width=9 height=13 xoffset=0 yoffset=0 xadvance=8 page=0 chnl=0
+char id=40 x=95 y=85 width=14 height=26 xoffset=-1 yoffset=1 xadvance=12 page=0 chnl=0
+char id=41 x=109 y=85 width=14 height=26 xoffset=-1 yoffset=1 xadvance=12 page=0 chnl=0
+char id=42 x=380 y=85 width=23 height=24 xoffset=-1 yoffset=1 xadvance=21 page=0 chnl=0
+char id=43 x=193 y=132 width=17 height=17 xoffset=0 yoffset=5 xadvance=17 page=0 chnl=0
+char id=44 x=260 y=132 width=8 height=13 xoffset=0 yoffset=18 xadvance=8 page=0 chnl=0
+char id=45 x=302 y=132 width=16 height=10 xoffset=0 yoffset=9 xadvance=16 page=0 chnl=0
+char id=46 x=318 y=132 width=10 height=9 xoffset=0 yoffset=18 xadvance=11 page=0 chnl=0
+char id=47 x=494 y=0 width=16 height=27 xoffset=-1 yoffset=0 xadvance=15 page=0 chnl=0
+char id=48 x=195 y=0 width=19 height=28 xoffset=0 yoffset=0 xadvance=19 page=0 chnl=0
+char id=49 x=447 y=59 width=13 height=26 xoffset=0 yoffset=1 xadvance=14 page=0 chnl=0
+char id=50 x=460 y=59 width=23 height=26 xoffset=-1 yoffset=1 xadvance=21 page=0 chnl=0
+char id=51 x=208 y=32 width=20 height=27 xoffset=-1 yoffset=1 xadvance=19 page=0 chnl=0
+char id=52 x=483 y=59 width=24 height=26 xoffset=-2 yoffset=1 xadvance=21 page=0 chnl=0
+char id=53 x=0 y=85 width=20 height=26 xoffset=0 yoffset=1 xadvance=19 page=0 chnl=0
+char id=54 x=20 y=85 width=22 height=26 xoffset=-1 yoffset=2 xadvance=20 page=0 chnl=0
+char id=55 x=42 y=85 width=20 height=26 xoffset=0 yoffset=1 xadvance=20 page=0 chnl=0
+char id=56 x=62 y=85 width=21 height=26 xoffset=0 yoffset=1 xadvance=21 page=0 chnl=0
+char id=57 x=228 y=32 width=21 height=27 xoffset=0 yoffset=0 xadvance=19 page=0 chnl=0
+char id=58 x=184 y=132 width=9 height=17 xoffset=0 yoffset=10 xadvance=8 page=0 chnl=0
+char id=59 x=484 y=85 width=9 height=21 xoffset=0 yoffset=10 xadvance=8 page=0 chnl=0
+char id=60 x=142 y=132 width=14 height=19 xoffset=-1 yoffset=4 xadvance=12 page=0 chnl=0
+char id=61 x=210 y=132 width=16 height=15 xoffset=0 yoffset=6 xadvance=17 page=0 chnl=0
+char id=62 x=156 y=132 width=14 height=19 xoffset=-1 yoffset=4 xadvance=12 page=0 chnl=0
+char id=63 x=214 y=0 width=21 height=28 xoffset=0 yoffset=0 xadvance=21 page=0 chnl=0
+char id=64 x=235 y=0 width=25 height=28 xoffset=-1 yoffset=0 xadvance=23 page=0 chnl=0
+char id=65 x=315 y=32 width=22 height=26 xoffset=-1 yoffset=1 xadvance=21 page=0 chnl=0
+char id=66 x=337 y=32 width=21 height=26 xoffset=1 yoffset=1 xadvance=22 page=0 chnl=0
+char id=67 x=358 y=32 width=20 height=26 xoffset=-1 yoffset=1 xadvance=20 page=0 chnl=0
+char id=68 x=378 y=32 width=21 height=26 xoffset=0 yoffset=1 xadvance=21 page=0 chnl=0
+char id=69 x=200 y=85 width=17 height=25 xoffset=0 yoffset=2 xadvance=18 page=0 chnl=0
+char id=70 x=260 y=0 width=17 height=27 xoffset=0 yoffset=1 xadvance=17 page=0 chnl=0
+char id=71 x=277 y=0 width=18 height=27 xoffset=0 yoffset=1 xadvance=19 page=0 chnl=0
+char id=72 x=295 y=0 width=18 height=27 xoffset=1 yoffset=1 xadvance=20 page=0 chnl=0
+char id=73 x=399 y=32 width=12 height=26 xoffset=0 yoffset=1 xadvance=12 page=0 chnl=0
+char id=74 x=411 y=32 width=19 height=26 xoffset=0 yoffset=2 xadvance=19 page=0 chnl=0
+char id=75 x=430 y=32 width=23 height=26 xoffset=0 yoffset=1 xadvance=23 page=0 chnl=0
+char id=76 x=453 y=32 width=17 height=26 xoffset=0 yoffset=1 xadvance=17 page=0 chnl=0
+char id=77 x=470 y=32 width=26 height=26 xoffset=-1 yoffset=1 xadvance=25 page=0 chnl=0
+char id=78 x=0 y=59 width=23 height=26 xoffset=-1 yoffset=1 xadvance=22 page=0 chnl=0
+char id=79 x=81 y=0 width=20 height=28 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0
+char id=80 x=313 y=0 width=18 height=27 xoffset=-1 yoffset=0 xadvance=17 page=0 chnl=0
+char id=81 x=22 y=0 width=22 height=30 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0
+char id=82 x=23 y=59 width=20 height=26 xoffset=0 yoffset=1 xadvance=19 page=0 chnl=0
+char id=83 x=43 y=59 width=18 height=26 xoffset=0 yoffset=1 xadvance=18 page=0 chnl=0
+char id=84 x=61 y=59 width=21 height=26 xoffset=0 yoffset=1 xadvance=21 page=0 chnl=0
+char id=85 x=331 y=0 width=20 height=27 xoffset=0 yoffset=1 xadvance=20 page=0 chnl=0
+char id=86 x=82 y=59 width=23 height=26 xoffset=-1 yoffset=1 xadvance=21 page=0 chnl=0
+char id=87 x=351 y=0 width=31 height=27 xoffset=-1 yoffset=1 xadvance=30 page=0 chnl=0
+char id=88 x=105 y=59 width=23 height=26 xoffset=-1 yoffset=1 xadvance=21 page=0 chnl=0
+char id=89 x=128 y=59 width=20 height=26 xoffset=0 yoffset=1 xadvance=20 page=0 chnl=0
+char id=90 x=148 y=59 width=19 height=26 xoffset=0 yoffset=1 xadvance=19 page=0 chnl=0
+char id=91 x=123 y=85 width=12 height=26 xoffset=0 yoffset=1 xadvance=12 page=0 chnl=0
+char id=92 x=249 y=32 width=16 height=27 xoffset=-1 yoffset=0 xadvance=15 page=0 chnl=0
+char id=93 x=135 y=85 width=12 height=26 xoffset=0 yoffset=1 xadvance=12 page=0 chnl=0
+char id=94 x=268 y=132 width=16 height=13 xoffset=0 yoffset=1 xadvance=16 page=0 chnl=0
+char id=95 x=328 y=132 width=20 height=8 xoffset=0 yoffset=20 xadvance=20 page=0 chnl=0
+char id=96 x=242 y=132 width=9 height=13 xoffset=0 yoffset=0 xadvance=8 page=0 chnl=0
+char id=97 x=493 y=85 width=18 height=20 xoffset=-1 yoffset=8 xadvance=16 page=0 chnl=0
+char id=98 x=382 y=0 width=18 height=27 xoffset=0 yoffset=1 xadvance=18 page=0 chnl=0
+char id=99 x=16 y=132 width=18 height=19 xoffset=-1 yoffset=8 xadvance=17 page=0 chnl=0
+char id=100 x=101 y=0 width=16 height=28 xoffset=-1 yoffset=0 xadvance=15 page=0 chnl=0
+char id=101 x=28 y=111 width=18 height=20 xoffset=-1 yoffset=8 xadvance=16 page=0 chnl=0
+char id=102 x=496 y=32 width=15 height=26 xoffset=0 yoffset=1 xadvance=15 page=0 chnl=0
+char id=103 x=167 y=59 width=17 height=26 xoffset=0 yoffset=7 xadvance=16 page=0 chnl=0
+char id=104 x=313 y=85 width=16 height=24 xoffset=0 yoffset=3 xadvance=16 page=0 chnl=0
+char id=105 x=329 y=85 width=9 height=24 xoffset=0 yoffset=3 xadvance=9 page=0 chnl=0
+char id=106 x=117 y=0 width=17 height=28 xoffset=-1 yoffset=3 xadvance=16 page=0 chnl=0
+char id=107 x=217 y=85 width=16 height=25 xoffset=0 yoffset=2 xadvance=16 page=0 chnl=0
+char id=108 x=338 y=85 width=9 height=24 xoffset=-1 yoffset=3 xadvance=8 page=0 chnl=0
+char id=109 x=46 y=111 width=28 height=20 xoffset=0 yoffset=7 xadvance=28 page=0 chnl=0
+char id=110 x=74 y=111 width=20 height=20 xoffset=-1 yoffset=7 xadvance=19 page=0 chnl=0
+char id=111 x=94 y=111 width=19 height=20 xoffset=-1 yoffset=8 xadvance=17 page=0 chnl=0
+char id=112 x=184 y=59 width=18 height=26 xoffset=0 yoffset=8 xadvance=18 page=0 chnl=0
+char id=113 x=113 y=111 width=20 height=20 xoffset=-1 yoffset=8 xadvance=19 page=0 chnl=0
+char id=114 x=34 y=132 width=16 height=19 xoffset=0 yoffset=8 xadvance=15 page=0 chnl=0
+char id=115 x=447 y=85 width=17 height=21 xoffset=-1 yoffset=7 xadvance=15 page=0 chnl=0
+char id=116 x=347 y=85 width=15 height=24 xoffset=-1 yoffset=3 xadvance=14 page=0 chnl=0
+char id=117 x=133 y=111 width=18 height=20 xoffset=-1 yoffset=8 xadvance=17 page=0 chnl=0
+char id=118 x=151 y=111 width=20 height=20 xoffset=-1 yoffset=7 xadvance=19 page=0 chnl=0
+char id=119 x=171 y=111 width=25 height=20 xoffset=-1 yoffset=8 xadvance=23 page=0 chnl=0
+char id=120 x=196 y=111 width=23 height=20 xoffset=-1 yoffset=7 xadvance=21 page=0 chnl=0
+char id=121 x=464 y=85 width=20 height=21 xoffset=-1 yoffset=7 xadvance=18 page=0 chnl=0
+char id=122 x=219 y=111 width=17 height=20 xoffset=-1 yoffset=8 xadvance=16 page=0 chnl=0
+char id=123 x=147 y=85 width=14 height=26 xoffset=-1 yoffset=1 xadvance=13 page=0 chnl=0
+char id=124 x=176 y=85 width=8 height=26 xoffset=0 yoffset=1 xadvance=8 page=0 chnl=0
+char id=125 x=161 y=85 width=15 height=26 xoffset=0 yoffset=1 xadvance=14 page=0 chnl=0
+char id=126 x=284 y=132 width=18 height=11 xoffset=0 yoffset=8 xadvance=18 page=0 chnl=0
+char id=1025 x=44 y=0 width=17 height=29 xoffset=0 yoffset=-2 xadvance=18 page=0 chnl=0
+char id=1040 x=202 y=59 width=22 height=26 xoffset=-1 yoffset=1 xadvance=21 page=0 chnl=0
+char id=1041 x=400 y=0 width=18 height=27 xoffset=-1 yoffset=1 xadvance=17 page=0 chnl=0
+char id=1042 x=224 y=59 width=21 height=26 xoffset=1 yoffset=1 xadvance=22 page=0 chnl=0
+char id=1043 x=233 y=85 width=14 height=25 xoffset=0 yoffset=2 xadvance=14 page=0 chnl=0
+char id=1044 x=134 y=0 width=22 height=28 xoffset=-1 yoffset=2 xadvance=21 page=0 chnl=0
+char id=1045 x=200 y=85 width=17 height=25 xoffset=0 yoffset=2 xadvance=18 page=0 chnl=0
+char id=1046 x=418 y=0 width=32 height=27 xoffset=-1 yoffset=1 xadvance=30 page=0 chnl=0
+char id=1047 x=245 y=59 width=19 height=26 xoffset=-1 yoffset=1 xadvance=18 page=0 chnl=0
+char id=1048 x=450 y=0 width=22 height=27 xoffset=0 yoffset=1 xadvance=21 page=0 chnl=0
+char id=1049 x=0 y=0 width=22 height=32 xoffset=0 yoffset=-4 xadvance=21 page=0 chnl=0
+char id=1050 x=264 y=59 width=23 height=26 xoffset=0 yoffset=1 xadvance=23 page=0 chnl=0
+char id=1051 x=472 y=0 width=22 height=27 xoffset=-1 yoffset=1 xadvance=21 page=0 chnl=0
+char id=1052 x=470 y=32 width=26 height=26 xoffset=-1 yoffset=1 xadvance=25 page=0 chnl=0
+char id=1053 x=0 y=32 width=18 height=27 xoffset=1 yoffset=1 xadvance=20 page=0 chnl=0
+char id=1054 x=156 y=0 width=20 height=28 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0
+char id=1055 x=287 y=59 width=18 height=26 xoffset=0 yoffset=2 xadvance=19 page=0 chnl=0
+char id=1056 x=18 y=32 width=18 height=27 xoffset=-1 yoffset=0 xadvance=17 page=0 chnl=0
+char id=1057 x=305 y=59 width=20 height=26 xoffset=-1 yoffset=1 xadvance=20 page=0 chnl=0
+char id=1058 x=325 y=59 width=21 height=26 xoffset=0 yoffset=1 xadvance=21 page=0 chnl=0
+char id=1059 x=36 y=32 width=20 height=27 xoffset=0 yoffset=1 xadvance=20 page=0 chnl=0
+char id=1060 x=56 y=32 width=29 height=27 xoffset=-2 yoffset=0 xadvance=27 page=0 chnl=0
+char id=1061 x=105 y=59 width=23 height=26 xoffset=-1 yoffset=1 xadvance=21 page=0 chnl=0
+char id=1062 x=61 y=0 width=20 height=29 xoffset=0 yoffset=1 xadvance=20 page=0 chnl=0
+char id=1063 x=85 y=32 width=18 height=27 xoffset=-1 yoffset=0 xadvance=17 page=0 chnl=0
+char id=1064 x=247 y=85 width=22 height=25 xoffset=0 yoffset=2 xadvance=22 page=0 chnl=0
+char id=1065 x=103 y=32 width=24 height=27 xoffset=0 yoffset=2 xadvance=24 page=0 chnl=0
+char id=1066 x=127 y=32 width=21 height=27 xoffset=-1 yoffset=1 xadvance=20 page=0 chnl=0
+char id=1067 x=148 y=32 width=23 height=27 xoffset=-1 yoffset=1 xadvance=22 page=0 chnl=0
+char id=1068 x=171 y=32 width=18 height=27 xoffset=-1 yoffset=1 xadvance=17 page=0 chnl=0
+char id=1069 x=189 y=32 width=19 height=27 xoffset=0 yoffset=1 xadvance=19 page=0 chnl=0
+char id=1070 x=346 y=59 width=26 height=26 xoffset=-1 yoffset=2 xadvance=25 page=0 chnl=0
+char id=1071 x=372 y=59 width=20 height=26 xoffset=0 yoffset=1 xadvance=19 page=0 chnl=0
+char id=1072 x=236 y=111 width=18 height=20 xoffset=-1 yoffset=8 xadvance=16 page=0 chnl=0
+char id=1073 x=392 y=59 width=19 height=26 xoffset=-1 yoffset=2 xadvance=17 page=0 chnl=0
+char id=1074 x=254 y=111 width=17 height=20 xoffset=0 yoffset=8 xadvance=16 page=0 chnl=0
+char id=1075 x=170 y=132 width=14 height=18 xoffset=0 yoffset=9 xadvance=14 page=0 chnl=0
+char id=1076 x=403 y=85 width=20 height=22 xoffset=-1 yoffset=8 xadvance=19 page=0 chnl=0
+char id=1077 x=271 y=111 width=18 height=20 xoffset=-1 yoffset=8 xadvance=16 page=0 chnl=0
+char id=1078 x=50 y=132 width=27 height=19 xoffset=-1 yoffset=8 xadvance=25 page=0 chnl=0
+char id=1079 x=77 y=132 width=14 height=19 xoffset=-1 yoffset=8 xadvance=13 page=0 chnl=0
+char id=1080 x=289 y=111 width=18 height=20 xoffset=-1 yoffset=8 xadvance=16 page=0 chnl=0
+char id=1081 x=411 y=59 width=18 height=26 xoffset=-1 yoffset=2 xadvance=16 page=0 chnl=0
+char id=1082 x=307 y=111 width=19 height=20 xoffset=-1 yoffset=8 xadvance=17 page=0 chnl=0
+char id=1083 x=326 y=111 width=20 height=20 xoffset=-1 yoffset=8 xadvance=19 page=0 chnl=0
+char id=1084 x=91 y=132 width=17 height=19 xoffset=0 yoffset=8 xadvance=18 page=0 chnl=0
+char id=1085 x=346 y=111 width=17 height=20 xoffset=0 yoffset=8 xadvance=16 page=0 chnl=0
+char id=1086 x=363 y=111 width=19 height=20 xoffset=-1 yoffset=8 xadvance=17 page=0 chnl=0
+char id=1087 x=382 y=111 width=18 height=20 xoffset=0 yoffset=8 xadvance=18 page=0 chnl=0
+char id=1088 x=429 y=59 width=18 height=26 xoffset=0 yoffset=8 xadvance=18 page=0 chnl=0
+char id=1089 x=108 y=132 width=18 height=19 xoffset=-1 yoffset=8 xadvance=17 page=0 chnl=0
+char id=1090 x=400 y=111 width=18 height=20 xoffset=-1 yoffset=7 xadvance=17 page=0 chnl=0
+char id=1091 x=464 y=85 width=20 height=21 xoffset=-1 yoffset=7 xadvance=18 page=0 chnl=0
+char id=1092 x=176 y=0 width=19 height=28 xoffset=-1 yoffset=4 xadvance=17 page=0 chnl=0
+char id=1093 x=196 y=111 width=23 height=20 xoffset=-1 yoffset=7 xadvance=21 page=0 chnl=0
+char id=1094 x=362 y=85 width=18 height=24 xoffset=0 yoffset=7 xadvance=18 page=0 chnl=0
+char id=1095 x=418 y=111 width=18 height=20 xoffset=-1 yoffset=7 xadvance=17 page=0 chnl=0
+char id=1096 x=436 y=111 width=22 height=20 xoffset=0 yoffset=7 xadvance=22 page=0 chnl=0
+char id=1097 x=423 y=85 width=24 height=22 xoffset=0 yoffset=7 xadvance=24 page=0 chnl=0
+char id=1098 x=458 y=111 width=17 height=20 xoffset=-1 yoffset=8 xadvance=15 page=0 chnl=0
+char id=1099 x=475 y=111 width=19 height=20 xoffset=-1 yoffset=8 xadvance=18 page=0 chnl=0
+char id=1100 x=494 y=111 width=15 height=20 xoffset=-1 yoffset=8 xadvance=14 page=0 chnl=0
+char id=1101 x=0 y=132 width=16 height=20 xoffset=-1 yoffset=8 xadvance=14 page=0 chnl=0
+char id=1102 x=0 y=111 width=28 height=21 xoffset=0 yoffset=7 xadvance=27 page=0 chnl=0
+char id=1103 x=126 y=132 width=16 height=19 xoffset=-1 yoffset=8 xadvance=14 page=0 chnl=0
+char id=1105 x=269 y=85 width=18 height=25 xoffset=-1 yoffset=3 xadvance=16 page=0 chnl=0
+kernings count=0
diff --git a/assets/fnt/MaxonBob.png b/assets/fnt/MaxonBob.png
new file mode 100644
index 0000000..8f084d1
--- /dev/null
+++ b/assets/fnt/MaxonBob.png
Binary files differ
diff --git a/assets/fnt/MaxonComic.fnt b/assets/fnt/MaxonComic.fnt
new file mode 100644
index 0000000..29d665b
--- /dev/null
+++ b/assets/fnt/MaxonComic.fnt
@@ -0,0 +1,168 @@
+info face="Comic Relief" size=32 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=1,1,1,1 spacing=-2,-2
+common lineHeight=46 base=36 scaleW=512 scaleH=512 pages=1 packed=0
+page id=0 file="MaxonComic.png"
+chars count=163
+char id=0 x=24 y=168 width=11 height=24 xoffset=0 yoffset=13 xadvance=12 page=0 chnl=0
+char id=13 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=0 xadvance=0 page=0 chnl=0
+char id=32 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=0 xadvance=10 page=0 chnl=0
+char id=33 x=392 y=0 width=7 height=30 xoffset=0 yoffset=9 xadvance=8 page=0 chnl=0
+char id=34 x=421 y=148 width=12 height=13 xoffset=0 yoffset=10 xadvance=14 page=0 chnl=0
+char id=35 x=40 y=121 width=29 height=27 xoffset=-1 yoffset=10 xadvance=27 page=0 chnl=0
+char id=36 x=114 y=0 width=21 height=35 xoffset=0 yoffset=8 xadvance=22 page=0 chnl=0
+char id=37 x=435 y=0 width=26 height=30 xoffset=1 yoffset=9 xadvance=26 page=0 chnl=0
+char id=38 x=192 y=37 width=23 height=29 xoffset=-1 yoffset=10 xadvance=21 page=0 chnl=0
+char id=39 x=505 y=94 width=6 height=11 xoffset=3 yoffset=9 xadvance=12 page=0 chnl=0
+char id=40 x=38 y=0 width=13 height=36 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0
+char id=41 x=51 y=0 width=14 height=36 xoffset=-1 yoffset=9 xadvance=12 page=0 chnl=0
+char id=42 x=389 y=148 width=17 height=16 xoffset=-1 yoffset=10 xadvance=17 page=0 chnl=0
+char id=43 x=373 y=148 width=16 height=16 xoffset=-1 yoffset=18 xadvance=15 page=0 chnl=0
+char id=44 x=461 y=148 width=9 height=11 xoffset=1 yoffset=32 xadvance=9 page=0 chnl=0
+char id=45 x=496 y=148 width=13 height=5 xoffset=0 yoffset=25 xadvance=13 page=0 chnl=0
+char id=46 x=489 y=148 width=7 height=7 xoffset=1 yoffset=32 xadvance=8 page=0 chnl=0
+char id=47 x=399 y=0 width=18 height=30 xoffset=-1 yoffset=9 xadvance=16 page=0 chnl=0
+char id=48 x=19 y=121 width=21 height=27 xoffset=-1 yoffset=11 xadvance=20 page=0 chnl=0
+char id=49 x=453 y=94 width=13 height=27 xoffset=1 yoffset=11 xadvance=14 page=0 chnl=0
+char id=50 x=466 y=94 width=18 height=27 xoffset=1 yoffset=11 xadvance=20 page=0 chnl=0
+char id=51 x=183 y=66 width=18 height=28 xoffset=1 yoffset=11 xadvance=20 page=0 chnl=0
+char id=52 x=484 y=94 width=21 height=27 xoffset=-1 yoffset=11 xadvance=20 page=0 chnl=0
+char id=53 x=201 y=66 width=20 height=28 xoffset=0 yoffset=11 xadvance=20 page=0 chnl=0
+char id=54 x=221 y=66 width=19 height=28 xoffset=0 yoffset=10 xadvance=20 page=0 chnl=0
+char id=55 x=240 y=66 width=21 height=28 xoffset=0 yoffset=11 xadvance=20 page=0 chnl=0
+char id=56 x=0 y=121 width=19 height=27 xoffset=0 yoffset=11 xadvance=20 page=0 chnl=0
+char id=57 x=261 y=66 width=19 height=28 xoffset=0 yoffset=11 xadvance=20 page=0 chnl=0
+char id=58 x=183 y=121 width=8 height=22 xoffset=1 yoffset=17 xadvance=10 page=0 chnl=0
+char id=59 x=69 y=121 width=9 height=26 xoffset=-1 yoffset=17 xadvance=10 page=0 chnl=0
+char id=60 x=497 y=121 width=13 height=18 xoffset=-1 yoffset=17 xadvance=12 page=0 chnl=0
+char id=61 x=406 y=148 width=15 height=14 xoffset=0 yoffset=19 xadvance=16 page=0 chnl=0
+char id=62 x=360 y=148 width=13 height=18 xoffset=0 yoffset=17 xadvance=12 page=0 chnl=0
+char id=63 x=280 y=66 width=17 height=28 xoffset=-1 yoffset=11 xadvance=17 page=0 chnl=0
+char id=64 x=284 y=0 width=29 height=31 xoffset=0 yoffset=9 xadvance=30 page=0 chnl=0
+char id=65 x=215 y=37 width=23 height=28 xoffset=0 yoffset=11 xadvance=23 page=0 chnl=0
+char id=66 x=238 y=37 width=19 height=28 xoffset=2 yoffset=11 xadvance=20 page=0 chnl=0
+char id=67 x=257 y=37 width=20 height=28 xoffset=0 yoffset=10 xadvance=19 page=0 chnl=0
+char id=68 x=297 y=66 width=22 height=27 xoffset=1 yoffset=11 xadvance=23 page=0 chnl=0
+char id=69 x=319 y=66 width=19 height=27 xoffset=1 yoffset=11 xadvance=20 page=0 chnl=0
+char id=70 x=338 y=66 width=19 height=27 xoffset=1 yoffset=11 xadvance=19 page=0 chnl=0
+char id=71 x=277 y=37 width=22 height=28 xoffset=0 yoffset=10 xadvance=22 page=0 chnl=0
+char id=72 x=357 y=66 width=23 height=27 xoffset=1 yoffset=11 xadvance=25 page=0 chnl=0
+char id=73 x=380 y=66 width=18 height=27 xoffset=0 yoffset=11 xadvance=17 page=0 chnl=0
+char id=74 x=299 y=37 width=22 height=28 xoffset=0 yoffset=11 xadvance=21 page=0 chnl=0
+char id=75 x=321 y=37 width=19 height=28 xoffset=2 yoffset=10 xadvance=20 page=0 chnl=0
+char id=76 x=398 y=66 width=18 height=27 xoffset=0 yoffset=11 xadvance=18 page=0 chnl=0
+char id=77 x=340 y=37 width=29 height=28 xoffset=0 yoffset=11 xadvance=28 page=0 chnl=0
+char id=78 x=416 y=66 width=26 height=27 xoffset=0 yoffset=11 xadvance=26 page=0 chnl=0
+char id=79 x=442 y=66 width=26 height=27 xoffset=0 yoffset=11 xadvance=26 page=0 chnl=0
+char id=80 x=468 y=66 width=18 height=27 xoffset=0 yoffset=11 xadvance=17 page=0 chnl=0
+char id=81 x=313 y=0 width=25 height=30 xoffset=1 yoffset=11 xadvance=28 page=0 chnl=0
+char id=82 x=486 y=66 width=20 height=27 xoffset=1 yoffset=11 xadvance=20 page=0 chnl=0
+char id=83 x=0 y=94 width=21 height=27 xoffset=1 yoffset=11 xadvance=22 page=0 chnl=0
+char id=84 x=21 y=94 width=24 height=27 xoffset=0 yoffset=11 xadvance=22 page=0 chnl=0
+char id=85 x=65 y=0 width=43 height=35 xoffset=-11 yoffset=3 xadvance=24 page=0 chnl=0
+char id=86 x=45 y=94 width=20 height=27 xoffset=0 yoffset=11 xadvance=21 page=0 chnl=0
+char id=87 x=65 y=94 width=33 height=27 xoffset=0 yoffset=11 xadvance=33 page=0 chnl=0
+char id=88 x=461 y=0 width=25 height=29 xoffset=-1 yoffset=10 xadvance=23 page=0 chnl=0
+char id=89 x=486 y=0 width=23 height=29 xoffset=-2 yoffset=10 xadvance=20 page=0 chnl=0
+char id=90 x=98 y=94 width=23 height=27 xoffset=0 yoffset=11 xadvance=22 page=0 chnl=0
+char id=91 x=161 y=0 width=11 height=33 xoffset=1 yoffset=11 xadvance=12 page=0 chnl=0
+char id=92 x=417 y=0 width=18 height=30 xoffset=0 yoffset=9 xadvance=18 page=0 chnl=0
+char id=93 x=172 y=0 width=12 height=33 xoffset=1 yoffset=11 xadvance=12 page=0 chnl=0
+char id=94 x=433 y=148 width=17 height=12 xoffset=1 yoffset=9 xadvance=19 page=0 chnl=0
+char id=95 x=0 y=168 width=24 height=6 xoffset=-2 yoffset=37 xadvance=20 page=0 chnl=0
+char id=96 x=450 y=148 width=11 height=11 xoffset=0 yoffset=8 xadvance=18 page=0 chnl=0
+char id=97 x=164 y=121 width=19 height=22 xoffset=-1 yoffset=17 xadvance=16 page=0 chnl=0
+char id=98 x=0 y=37 width=18 height=29 xoffset=1 yoffset=9 xadvance=19 page=0 chnl=0
+char id=99 x=444 y=121 width=17 height=20 xoffset=0 yoffset=18 xadvance=16 page=0 chnl=0
+char id=100 x=18 y=37 width=19 height=29 xoffset=0 yoffset=9 xadvance=19 page=0 chnl=0
+char id=101 x=461 y=121 width=19 height=20 xoffset=0 yoffset=18 xadvance=18 page=0 chnl=0
+char id=102 x=37 y=37 width=17 height=29 xoffset=0 yoffset=9 xadvance=16 page=0 chnl=0
+char id=103 x=54 y=37 width=19 height=29 xoffset=-2 yoffset=18 xadvance=17 page=0 chnl=0
+char id=104 x=338 y=0 width=17 height=30 xoffset=1 yoffset=9 xadvance=18 page=0 chnl=0
+char id=105 x=121 y=94 width=8 height=27 xoffset=1 yoffset=11 xadvance=9 page=0 chnl=0
+char id=106 x=22 y=0 width=16 height=36 xoffset=-3 yoffset=11 xadvance=13 page=0 chnl=0
+char id=107 x=355 y=0 width=18 height=30 xoffset=1 yoffset=9 xadvance=17 page=0 chnl=0
+char id=108 x=73 y=37 width=7 height=29 xoffset=1 yoffset=9 xadvance=9 page=0 chnl=0
+char id=109 x=191 y=121 width=25 height=21 xoffset=0 yoffset=17 xadvance=25 page=0 chnl=0
+char id=110 x=216 y=121 width=16 height=21 xoffset=1 yoffset=17 xadvance=17 page=0 chnl=0
+char id=111 x=480 y=121 width=17 height=20 xoffset=0 yoffset=18 xadvance=17 page=0 chnl=0
+char id=112 x=369 y=37 width=17 height=28 xoffset=0 yoffset=18 xadvance=17 page=0 chnl=0
+char id=113 x=386 y=37 width=16 height=28 xoffset=0 yoffset=18 xadvance=17 page=0 chnl=0
+char id=114 x=232 y=121 width=15 height=21 xoffset=1 yoffset=17 xadvance=15 page=0 chnl=0
+char id=115 x=0 y=148 width=17 height=20 xoffset=-1 yoffset=18 xadvance=16 page=0 chnl=0
+char id=116 x=80 y=37 width=17 height=29 xoffset=-1 yoffset=9 xadvance=15 page=0 chnl=0
+char id=117 x=247 y=121 width=17 height=21 xoffset=0 yoffset=18 xadvance=17 page=0 chnl=0
+char id=118 x=17 y=148 width=18 height=20 xoffset=-1 yoffset=18 xadvance=16 page=0 chnl=0
+char id=119 x=35 y=148 width=24 height=20 xoffset=-1 yoffset=18 xadvance=22 page=0 chnl=0
+char id=120 x=264 y=121 width=20 height=21 xoffset=-1 yoffset=18 xadvance=19 page=0 chnl=0
+char id=121 x=97 y=37 width=20 height=29 xoffset=-2 yoffset=18 xadvance=17 page=0 chnl=0
+char id=122 x=59 y=148 width=18 height=20 xoffset=0 yoffset=18 xadvance=17 page=0 chnl=0
+char id=123 x=135 y=0 width=13 height=34 xoffset=-1 yoffset=9 xadvance=12 page=0 chnl=0
+char id=124 x=108 y=0 width=6 height=35 xoffset=4 yoffset=8 xadvance=13 page=0 chnl=0
+char id=125 x=148 y=0 width=13 height=34 xoffset=-1 yoffset=9 xadvance=12 page=0 chnl=0
+char id=126 x=470 y=148 width=19 height=10 xoffset=0 yoffset=20 xadvance=19 page=0 chnl=0
+char id=1025 x=209 y=0 width=19 height=32 xoffset=1 yoffset=6 xadvance=20 page=0 chnl=0
+char id=1040 x=402 y=37 width=23 height=28 xoffset=0 yoffset=11 xadvance=23 page=0 chnl=0
+char id=1041 x=129 y=94 width=20 height=27 xoffset=1 yoffset=11 xadvance=19 page=0 chnl=0
+char id=1042 x=425 y=37 width=19 height=28 xoffset=2 yoffset=11 xadvance=20 page=0 chnl=0
+char id=1043 x=149 y=94 width=19 height=27 xoffset=1 yoffset=11 xadvance=20 page=0 chnl=0
+char id=1044 x=184 y=0 width=25 height=32 xoffset=0 yoffset=11 xadvance=25 page=0 chnl=0
+char id=1045 x=168 y=94 width=19 height=27 xoffset=1 yoffset=11 xadvance=20 page=0 chnl=0
+char id=1046 x=187 y=94 width=31 height=27 xoffset=-2 yoffset=11 xadvance=28 page=0 chnl=0
+char id=1047 x=444 y=37 width=21 height=28 xoffset=-1 yoffset=11 xadvance=19 page=0 chnl=0
+char id=1048 x=465 y=37 width=22 height=28 xoffset=1 yoffset=10 xadvance=24 page=0 chnl=0
+char id=1049 x=0 y=0 width=22 height=37 xoffset=1 yoffset=1 xadvance=24 page=0 chnl=0
+char id=1050 x=218 y=94 width=20 height=27 xoffset=1 yoffset=11 xadvance=20 page=0 chnl=0
+char id=1051 x=238 y=94 width=23 height=27 xoffset=-1 yoffset=11 xadvance=24 page=0 chnl=0
+char id=1052 x=340 y=37 width=29 height=28 xoffset=0 yoffset=11 xadvance=28 page=0 chnl=0
+char id=1053 x=261 y=94 width=23 height=27 xoffset=1 yoffset=11 xadvance=25 page=0 chnl=0
+char id=1054 x=284 y=94 width=26 height=27 xoffset=0 yoffset=11 xadvance=26 page=0 chnl=0
+char id=1055 x=0 y=66 width=29 height=28 xoffset=0 yoffset=10 xadvance=29 page=0 chnl=0
+char id=1056 x=310 y=94 width=18 height=27 xoffset=0 yoffset=11 xadvance=17 page=0 chnl=0
+char id=1057 x=487 y=37 width=20 height=28 xoffset=0 yoffset=10 xadvance=19 page=0 chnl=0
+char id=1058 x=328 y=94 width=24 height=27 xoffset=0 yoffset=11 xadvance=22 page=0 chnl=0
+char id=1059 x=29 y=66 width=23 height=28 xoffset=-2 yoffset=10 xadvance=20 page=0 chnl=0
+char id=1060 x=352 y=94 width=21 height=27 xoffset=0 yoffset=11 xadvance=20 page=0 chnl=0
+char id=1061 x=461 y=0 width=25 height=29 xoffset=-1 yoffset=10 xadvance=23 page=0 chnl=0
+char id=1062 x=228 y=0 width=25 height=32 xoffset=0 yoffset=10 xadvance=25 page=0 chnl=0
+char id=1063 x=52 y=66 width=19 height=28 xoffset=0 yoffset=10 xadvance=20 page=0 chnl=0
+char id=1064 x=71 y=66 width=29 height=28 xoffset=0 yoffset=10 xadvance=29 page=0 chnl=0
+char id=1065 x=253 y=0 width=31 height=32 xoffset=0 yoffset=10 xadvance=31 page=0 chnl=0
+char id=1066 x=373 y=94 width=27 height=27 xoffset=-1 yoffset=11 xadvance=24 page=0 chnl=0
+char id=1067 x=400 y=94 width=33 height=27 xoffset=1 yoffset=11 xadvance=34 page=0 chnl=0
+char id=1068 x=433 y=94 width=20 height=27 xoffset=1 yoffset=11 xadvance=19 page=0 chnl=0
+char id=1069 x=100 y=66 width=20 height=28 xoffset=0 yoffset=10 xadvance=21 page=0 chnl=0
+char id=1070 x=117 y=37 width=35 height=29 xoffset=1 yoffset=10 xadvance=36 page=0 chnl=0
+char id=1071 x=152 y=37 width=20 height=29 xoffset=0 yoffset=10 xadvance=20 page=0 chnl=0
+char id=1072 x=164 y=121 width=19 height=22 xoffset=-1 yoffset=17 xadvance=16 page=0 chnl=0
+char id=1073 x=120 y=66 width=19 height=28 xoffset=-1 yoffset=10 xadvance=17 page=0 chnl=0
+char id=1074 x=77 y=148 width=16 height=20 xoffset=1 yoffset=18 xadvance=16 page=0 chnl=0
+char id=1075 x=93 y=148 width=15 height=20 xoffset=1 yoffset=18 xadvance=15 page=0 chnl=0
+char id=1076 x=124 y=121 width=21 height=24 xoffset=-1 yoffset=18 xadvance=19 page=0 chnl=0
+char id=1077 x=108 y=148 width=19 height=20 xoffset=0 yoffset=18 xadvance=18 page=0 chnl=0
+char id=1078 x=127 y=148 width=23 height=20 xoffset=-1 yoffset=18 xadvance=22 page=0 chnl=0
+char id=1079 x=284 y=121 width=15 height=21 xoffset=-1 yoffset=18 xadvance=14 page=0 chnl=0
+char id=1080 x=299 y=121 width=19 height=21 xoffset=0 yoffset=18 xadvance=20 page=0 chnl=0
+char id=1081 x=373 y=0 width=19 height=30 xoffset=0 yoffset=9 xadvance=20 page=0 chnl=0
+char id=1082 x=150 y=148 width=16 height=20 xoffset=1 yoffset=18 xadvance=16 page=0 chnl=0
+char id=1083 x=166 y=148 width=21 height=20 xoffset=-1 yoffset=18 xadvance=21 page=0 chnl=0
+char id=1084 x=318 y=121 width=25 height=21 xoffset=-1 yoffset=18 xadvance=24 page=0 chnl=0
+char id=1085 x=343 y=121 width=18 height=21 xoffset=0 yoffset=17 xadvance=18 page=0 chnl=0
+char id=1086 x=187 y=148 width=17 height=20 xoffset=0 yoffset=18 xadvance=19 page=0 chnl=0
+char id=1087 x=204 y=148 width=18 height=20 xoffset=2 yoffset=18 xadvance=21 page=0 chnl=0
+char id=1088 x=139 y=66 width=17 height=28 xoffset=0 yoffset=18 xadvance=17 page=0 chnl=0
+char id=1089 x=222 y=148 width=17 height=20 xoffset=0 yoffset=18 xadvance=16 page=0 chnl=0
+char id=1090 x=361 y=121 width=17 height=21 xoffset=-1 yoffset=18 xadvance=15 page=0 chnl=0
+char id=1091 x=172 y=37 width=20 height=29 xoffset=-2 yoffset=18 xadvance=17 page=0 chnl=0
+char id=1092 x=156 y=66 width=27 height=28 xoffset=0 yoffset=18 xadvance=26 page=0 chnl=0
+char id=1093 x=378 y=121 width=20 height=21 xoffset=-1 yoffset=18 xadvance=19 page=0 chnl=0
+char id=1094 x=145 y=121 width=19 height=23 xoffset=1 yoffset=18 xadvance=20 page=0 chnl=0
+char id=1095 x=398 y=121 width=17 height=21 xoffset=0 yoffset=17 xadvance=17 page=0 chnl=0
+char id=1096 x=239 y=148 width=24 height=20 xoffset=0 yoffset=18 xadvance=25 page=0 chnl=0
+char id=1097 x=97 y=121 width=27 height=25 xoffset=0 yoffset=18 xadvance=25 page=0 chnl=0
+char id=1098 x=263 y=148 width=22 height=20 xoffset=-1 yoffset=18 xadvance=20 page=0 chnl=0
+char id=1099 x=285 y=148 width=24 height=20 xoffset=1 yoffset=18 xadvance=25 page=0 chnl=0
+char id=1100 x=309 y=148 width=16 height=20 xoffset=1 yoffset=18 xadvance=16 page=0 chnl=0
+char id=1101 x=325 y=148 width=17 height=20 xoffset=0 yoffset=18 xadvance=16 page=0 chnl=0
+char id=1102 x=415 y=121 width=29 height=21 xoffset=0 yoffset=17 xadvance=29 page=0 chnl=0
+char id=1103 x=342 y=148 width=18 height=20 xoffset=-2 yoffset=18 xadvance=16 page=0 chnl=0
+char id=1105 x=78 y=121 width=19 height=25 xoffset=0 yoffset=13 xadvance=18 page=0 chnl=0
+kernings count=0
diff --git a/assets/fnt/MaxonComic.png b/assets/fnt/MaxonComic.png
new file mode 100644
index 0000000..2d3c164
--- /dev/null
+++ b/assets/fnt/MaxonComic.png
Binary files differ
diff --git a/assets/fnt/MaxonPuff.fnt b/assets/fnt/MaxonPuff.fnt
new file mode 100644
index 0000000..6fb8a18
--- /dev/null
+++ b/assets/fnt/MaxonPuff.fnt
@@ -0,0 +1,324 @@
+info face="DynaPuff Regular" size=32 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=1,1,1,1 spacing=-2,-2
+common lineHeight=39 base=31 scaleW=512 scaleH=512 pages=1 packed=0
+page id=0 file="MaxonPuff.png"
+chars count=97
+char id=0 x=186 y=88 width=21 height=36 xoffset=-1 yoffset=3 xadvance=19 page=0 chnl=0
+char id=13 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=0 xadvance=0 page=0 chnl=0
+char id=32 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=0 xadvance=6 page=0 chnl=0
+char id=33 x=245 y=35 width=8 height=27 xoffset=0 yoffset=6 xadvance=8 page=0 chnl=0
+char id=34 x=81 y=88 width=14 height=13 xoffset=-1 yoffset=6 xadvance=12 page=0 chnl=0
+char id=35 x=270 y=35 width=25 height=27 xoffset=-1 yoffset=6 xadvance=23 page=0 chnl=0
+char id=36 x=193 y=0 width=20 height=30 xoffset=-1 yoffset=5 xadvance=18 page=0 chnl=0
+char id=37 x=123 y=62 width=24 height=26 xoffset=-1 yoffset=7 xadvance=22 page=0 chnl=0
+char id=38 x=295 y=35 width=22 height=27 xoffset=0 yoffset=6 xadvance=22 page=0 chnl=0
+char id=39 x=95 y=88 width=8 height=13 xoffset=-1 yoffset=6 xadvance=6 page=0 chnl=0
+char id=40 x=21 y=0 width=13 height=32 xoffset=1 yoffset=4 xadvance=13 page=0 chnl=0
+char id=41 x=34 y=0 width=13 height=32 xoffset=-1 yoffset=4 xadvance=12 page=0 chnl=0
+char id=42 x=32 y=88 width=17 height=17 xoffset=-1 yoffset=6 xadvance=15 page=0 chnl=0
+char id=43 x=49 y=88 width=16 height=16 xoffset=-1 yoffset=12 xadvance=15 page=0 chnl=0
+char id=44 x=103 y=88 width=9 height=13 xoffset=-1 yoffset=23 xadvance=8 page=0 chnl=0
+char id=45 x=150 y=88 width=15 height=8 xoffset=-1 yoffset=16 xadvance=13 page=0 chnl=0
+char id=46 x=112 y=88 width=9 height=10 xoffset=-1 yoffset=23 xadvance=7 page=0 chnl=0
+char id=47 x=107 y=0 width=18 height=32 xoffset=-1 yoffset=4 xadvance=16 page=0 chnl=0
+char id=48 x=193 y=62 width=21 height=25 xoffset=0 yoffset=7 xadvance=21 page=0 chnl=0
+char id=49 x=481 y=35 width=12 height=26 xoffset=-1 yoffset=7 xadvance=12 page=0 chnl=0
+char id=50 x=174 y=62 width=19 height=25 xoffset=-1 yoffset=8 xadvance=17 page=0 chnl=0
+char id=51 x=493 y=35 width=17 height=26 xoffset=0 yoffset=7 xadvance=17 page=0 chnl=0
+char id=52 x=0 y=62 width=20 height=26 xoffset=-1 yoffset=7 xadvance=19 page=0 chnl=0
+char id=53 x=20 y=62 width=17 height=26 xoffset=0 yoffset=7 xadvance=17 page=0 chnl=0
+char id=54 x=37 y=62 width=20 height=26 xoffset=-1 yoffset=7 xadvance=19 page=0 chnl=0
+char id=55 x=57 y=62 width=17 height=26 xoffset=-1 yoffset=7 xadvance=15 page=0 chnl=0
+char id=56 x=74 y=62 width=20 height=26 xoffset=0 yoffset=7 xadvance=20 page=0 chnl=0
+char id=57 x=94 y=62 width=20 height=26 xoffset=-1 yoffset=7 xadvance=18 page=0 chnl=0
+char id=58 x=464 y=62 width=9 height=23 xoffset=-1 yoffset=10 xadvance=7 page=0 chnl=0
+char id=59 x=114 y=62 width=9 height=26 xoffset=-1 yoffset=10 xadvance=8 page=0 chnl=0
+char id=60 x=493 y=62 width=16 height=18 xoffset=-1 yoffset=11 xadvance=14 page=0 chnl=0
+char id=61 x=65 y=88 width=16 height=14 xoffset=-1 yoffset=13 xadvance=15 page=0 chnl=0
+char id=62 x=0 y=88 width=16 height=18 xoffset=-1 yoffset=11 xadvance=14 page=0 chnl=0
+char id=63 x=253 y=35 width=17 height=27 xoffset=-1 yoffset=6 xadvance=15 page=0 chnl=0
+char id=64 x=125 y=0 width=30 height=32 xoffset=0 yoffset=5 xadvance=30 page=0 chnl=0
+char id=65 x=431 y=0 width=22 height=27 xoffset=-1 yoffset=6 xadvance=20 page=0 chnl=0
+char id=66 x=317 y=35 width=19 height=26 xoffset=1 yoffset=7 xadvance=20 page=0 chnl=0
+char id=67 x=336 y=35 width=22 height=26 xoffset=0 yoffset=8 xadvance=21 page=0 chnl=0
+char id=68 x=453 y=0 width=23 height=27 xoffset=-1 yoffset=6 xadvance=22 page=0 chnl=0
+char id=69 x=358 y=35 width=18 height=26 xoffset=1 yoffset=7 xadvance=18 page=0 chnl=0
+char id=70 x=476 y=0 width=16 height=27 xoffset=1 yoffset=6 xadvance=16 page=0 chnl=0
+char id=71 x=0 y=35 width=23 height=27 xoffset=0 yoffset=6 xadvance=23 page=0 chnl=0
+char id=72 x=376 y=35 width=19 height=26 xoffset=1 yoffset=7 xadvance=21 page=0 chnl=0
+char id=73 x=147 y=62 width=8 height=25 xoffset=1 yoffset=6 xadvance=10 page=0 chnl=0
+char id=74 x=23 y=35 width=22 height=27 xoffset=-1 yoffset=6 xadvance=20 page=0 chnl=0
+char id=75 x=364 y=0 width=19 height=28 xoffset=1 yoffset=6 xadvance=19 page=0 chnl=0
+char id=76 x=492 y=0 width=17 height=27 xoffset=1 yoffset=7 xadvance=18 page=0 chnl=0
+char id=77 x=45 y=35 width=22 height=27 xoffset=1 yoffset=6 xadvance=24 page=0 chnl=0
+char id=78 x=395 y=35 width=20 height=26 xoffset=1 yoffset=7 xadvance=22 page=0 chnl=0
+char id=79 x=415 y=35 width=25 height=26 xoffset=0 yoffset=7 xadvance=25 page=0 chnl=0
+char id=80 x=67 y=35 width=19 height=27 xoffset=1 yoffset=6 xadvance=19 page=0 chnl=0
+char id=81 x=86 y=35 width=27 height=27 xoffset=0 yoffset=6 xadvance=25 page=0 chnl=0
+char id=82 x=113 y=35 width=20 height=27 xoffset=1 yoffset=6 xadvance=21 page=0 chnl=0
+char id=83 x=133 y=35 width=20 height=27 xoffset=-1 yoffset=6 xadvance=18 page=0 chnl=0
+char id=84 x=440 y=35 width=20 height=26 xoffset=-1 yoffset=7 xadvance=18 page=0 chnl=0
+char id=85 x=155 y=62 width=19 height=25 xoffset=1 yoffset=6 xadvance=21 page=0 chnl=0
+char id=86 x=153 y=35 width=22 height=27 xoffset=-1 yoffset=6 xadvance=20 page=0 chnl=0
+char id=87 x=175 y=35 width=24 height=27 xoffset=1 yoffset=6 xadvance=26 page=0 chnl=0
+char id=88 x=199 y=35 width=24 height=27 xoffset=-1 yoffset=5 xadvance=23 page=0 chnl=0
+char id=89 x=223 y=35 width=22 height=27 xoffset=-1 yoffset=6 xadvance=21 page=0 chnl=0
+char id=90 x=460 y=35 width=21 height=26 xoffset=-1 yoffset=6 xadvance=19 page=0 chnl=0
+char id=91 x=47 y=0 width=13 height=32 xoffset=1 yoffset=4 xadvance=13 page=0 chnl=0
+char id=92 x=155 y=0 width=18 height=32 xoffset=-1 yoffset=4 xadvance=16 page=0 chnl=0
+char id=93 x=60 y=0 width=13 height=32 xoffset=-1 yoffset=4 xadvance=13 page=0 chnl=0
+char id=94 x=16 y=88 width=16 height=17 xoffset=-1 yoffset=4 xadvance=14 page=0 chnl=0
+char id=95 x=165 y=88 width=21 height=6 xoffset=-1 yoffset=33 xadvance=19 page=0 chnl=0
+char id=96 x=138 y=88 width=12 height=8 xoffset=-1 yoffset=4 xadvance=10 page=0 chnl=0
+char id=97 x=214 y=62 width=21 height=24 xoffset=-1 yoffset=9 xadvance=20 page=0 chnl=0
+char id=98 x=383 y=0 width=20 height=28 xoffset=0 yoffset=5 xadvance=20 page=0 chnl=0
+char id=99 x=329 y=62 width=19 height=23 xoffset=0 yoffset=10 xadvance=18 page=0 chnl=0
+char id=100 x=213 y=0 width=20 height=29 xoffset=0 yoffset=4 xadvance=20 page=0 chnl=0
+char id=101 x=348 y=62 width=21 height=23 xoffset=0 yoffset=10 xadvance=20 page=0 chnl=0
+char id=102 x=233 y=0 width=19 height=29 xoffset=-1 yoffset=4 xadvance=17 page=0 chnl=0
+char id=103 x=173 y=0 width=20 height=30 xoffset=0 yoffset=9 xadvance=20 page=0 chnl=0
+char id=104 x=252 y=0 width=20 height=29 xoffset=0 yoffset=4 xadvance=21 page=0 chnl=0
+char id=105 x=403 y=0 width=9 height=28 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0
+char id=106 x=7 y=0 width=14 height=34 xoffset=-4 yoffset=5 xadvance=9 page=0 chnl=0
+char id=107 x=272 y=0 width=20 height=29 xoffset=0 yoffset=4 xadvance=19 page=0 chnl=0
+char id=108 x=292 y=0 width=11 height=29 xoffset=0 yoffset=4 xadvance=11 page=0 chnl=0
+char id=109 x=369 y=62 width=29 height=23 xoffset=0 yoffset=10 xadvance=29 page=0 chnl=0
+char id=110 x=398 y=62 width=20 height=23 xoffset=0 yoffset=9 xadvance=20 page=0 chnl=0
+char id=111 x=418 y=62 width=20 height=23 xoffset=0 yoffset=10 xadvance=20 page=0 chnl=0
+char id=112 x=303 y=0 width=20 height=29 xoffset=0 yoffset=10 xadvance=20 page=0 chnl=0
+char id=113 x=323 y=0 width=20 height=29 xoffset=0 yoffset=10 xadvance=20 page=0 chnl=0
+char id=114 x=235 y=62 width=16 height=24 xoffset=0 yoffset=9 xadvance=15 page=0 chnl=0
+char id=115 x=251 y=62 width=17 height=24 xoffset=0 yoffset=9 xadvance=17 page=0 chnl=0
+char id=116 x=412 y=0 width=19 height=28 xoffset=-1 yoffset=5 xadvance=17 page=0 chnl=0
+char id=117 x=473 y=62 width=20 height=22 xoffset=0 yoffset=10 xadvance=20 page=0 chnl=0
+char id=118 x=268 y=62 width=20 height=24 xoffset=-1 yoffset=9 xadvance=19 page=0 chnl=0
+char id=119 x=438 y=62 width=26 height=23 xoffset=-1 yoffset=10 xadvance=25 page=0 chnl=0
+char id=120 x=288 y=62 width=22 height=24 xoffset=-1 yoffset=9 xadvance=20 page=0 chnl=0
+char id=121 x=343 y=0 width=21 height=29 xoffset=-1 yoffset=10 xadvance=20 page=0 chnl=0
+char id=122 x=310 y=62 width=19 height=24 xoffset=0 yoffset=9 xadvance=18 page=0 chnl=0
+char id=123 x=73 y=0 width=17 height=32 xoffset=0 yoffset=4 xadvance=17 page=0 chnl=0
+char id=124 x=0 y=0 width=7 height=35 xoffset=1 yoffset=4 xadvance=9 page=0 chnl=0
+char id=125 x=90 y=0 width=17 height=32 xoffset=0 yoffset=4 xadvance=17 page=0 chnl=0
+char id=126 x=121 y=88 width=17 height=9 xoffset=-1 yoffset=16 xadvance=15 page=0 chnl=0
+kernings count=222
+kerning first=84 second=100 amount=-1
+kerning first=76 second=116 amount=-2
+kerning first=84 second=80 amount=-1
+kerning first=89 second=117 amount=-1
+kerning first=89 second=77 amount=-1
+kerning first=87 second=46 amount=-1
+kerning first=89 second=65 amount=-3
+kerning first=46 second=71 amount=-1
+kerning first=86 second=113 amount=-1
+kerning first=34 second=85 amount=-1
+kerning first=76 second=118 amount=-1
+kerning first=79 second=44 amount=-1
+kerning first=44 second=79 amount=-1
+kerning first=86 second=82 amount=-1
+kerning first=76 second=87 amount=-1
+kerning first=89 second=67 amount=-1
+kerning first=121 second=44 amount=-1
+kerning first=89 second=74 amount=-1
+kerning first=34 second=115 amount=-1
+kerning first=109 second=39 amount=-1
+kerning first=86 second=99 amount=-1
+kerning first=81 second=83 amount=1
+kerning first=84 second=109 amount=-1
+kerning first=79 second=84 amount=-1
+kerning first=104 second=39 amount=-1
+kerning first=118 second=46 amount=-1
+kerning first=70 second=88 amount=-1
+kerning first=84 second=78 amount=-1
+kerning first=68 second=44 amount=-1
+kerning first=39 second=65 amount=-2
+kerning first=81 second=46 amount=1
+kerning first=90 second=81 amount=-1
+kerning first=77 second=89 amount=-1
+kerning first=65 second=74 amount=1
+kerning first=46 second=89 amount=-2
+kerning first=76 second=39 amount=-3
+kerning first=39 second=67 amount=-1
+kerning first=86 second=44 amount=-2
+kerning first=89 second=103 amount=-2
+kerning first=39 second=74 amount=-1
+kerning first=114 second=46 amount=-3
+kerning first=90 second=71 amount=-1
+kerning first=80 second=46 amount=-3
+kerning first=89 second=70 amount=-1
+kerning first=86 second=100 amount=-1
+kerning first=68 second=84 amount=-1
+kerning first=86 second=80 amount=-1
+kerning first=119 second=44 amount=-1
+kerning first=97 second=121 amount=-1
+kerning first=85 second=88 amount=-1
+kerning first=44 second=121 amount=-1
+kerning first=65 second=116 amount=-1
+kerning first=89 second=110 amount=-1
+kerning first=75 second=79 amount=-1
+kerning first=97 second=102 amount=-1
+kerning first=84 second=81 amount=-1
+kerning first=44 second=102 amount=-2
+kerning first=44 second=84 amount=-2
+kerning first=81 second=90 amount=1
+kerning first=74 second=83 amount=-1
+kerning first=89 second=72 amount=-1
+kerning first=88 second=81 amount=-1
+kerning first=81 second=65 amount=1
+kerning first=46 second=67 amount=-1
+kerning first=84 second=71 amount=-1
+kerning first=74 second=46 amount=-1
+kerning first=44 second=86 amount=-1
+kerning first=89 second=88 amount=-1
+kerning first=102 second=46 amount=-2
+kerning first=86 second=78 amount=-1
+kerning first=70 second=44 amount=-2
+kerning first=75 second=85 amount=-1
+kerning first=88 second=71 amount=-1
+kerning first=80 second=65 amount=-2
+kerning first=84 second=83 amount=-1
+kerning first=89 second=79 amount=-1
+kerning first=89 second=113 amount=-2
+kerning first=84 second=46 amount=-2
+kerning first=76 second=121 amount=-2
+kerning first=97 second=34 amount=-1
+kerning first=89 second=82 amount=-1
+kerning first=65 second=39 amount=-1
+kerning first=80 second=74 amount=-1
+kerning first=34 second=81 amount=-1
+kerning first=46 second=116 amount=-2
+kerning first=89 second=97 amount=-1
+kerning first=76 second=102 amount=-2
+kerning first=39 second=88 amount=-1
+kerning first=79 second=83 amount=-1
+kerning first=76 second=84 amount=-2
+kerning first=89 second=85 amount=-1
+kerning first=46 second=118 amount=-1
+kerning first=89 second=99 amount=-2
+kerning first=34 second=71 amount=-1
+kerning first=79 second=46 amount=-1
+kerning first=90 second=67 amount=-1
+kerning first=84 second=111 amount=-1
+kerning first=46 second=87 amount=-1
+kerning first=76 second=86 amount=-1
+kerning first=89 second=66 amount=-1
+kerning first=121 second=46 amount=-1
+kerning first=39 second=79 amount=-1
+kerning first=74 second=65 amount=-1
+kerning first=87 second=88 amount=-1
+kerning first=89 second=115 amount=-1
+kerning first=44 second=81 amount=-1
+kerning first=84 second=114 amount=-1
+kerning first=79 second=89 amount=-1
+kerning first=109 second=34 amount=-1
+kerning first=84 second=101 amount=-1
+kerning first=68 second=83 amount=-1
+kerning first=83 second=83 amount=-1
+kerning first=89 second=44 amount=-3
+kerning first=104 second=34 amount=-1
+kerning first=44 second=71 amount=-1
+kerning first=84 second=77 amount=-1
+kerning first=68 second=46 amount=-1
+kerning first=89 second=73 amount=-1
+kerning first=39 second=85 amount=-1
+kerning first=84 second=65 amount=-2
+kerning first=89 second=100 amount=-2
+kerning first=86 second=83 amount=-1
+kerning first=89 second=80 amount=-1
+kerning first=76 second=34 amount=-3
+kerning first=86 second=46 amount=-2
+kerning first=84 second=67 amount=-1
+kerning first=116 second=44 amount=-2
+kerning first=68 second=89 amount=-1
+kerning first=39 second=115 amount=-1
+kerning first=81 second=88 amount=1
+kerning first=84 second=74 amount=-1
+kerning first=46 second=79 amount=-1
+kerning first=110 second=39 amount=-1
+kerning first=108 second=116 amount=-1
+kerning first=88 second=67 amount=-1
+kerning first=119 second=46 amount=-1
+kerning first=65 second=121 amount=-1
+kerning first=80 second=88 amount=-1
+kerning first=108 second=118 amount=-1
+kerning first=89 second=122 amount=-1
+kerning first=80 second=39 amount=1
+kerning first=86 second=111 amount=-1
+kerning first=89 second=109 amount=-1
+kerning first=89 second=69 amount=-1
+kerning first=44 second=89 amount=-2
+kerning first=65 second=102 amount=-1
+kerning first=65 second=84 amount=-1
+kerning first=89 second=78 amount=-1
+kerning first=87 second=44 amount=-1
+kerning first=34 second=65 amount=-2
+kerning first=75 second=81 amount=-1
+kerning first=84 second=103 amount=-1
+kerning first=86 second=101 amount=-1
+kerning first=83 second=65 amount=-1
+kerning first=70 second=83 amount=-1
+kerning first=34 second=67 amount=-1
+kerning first=86 second=77 amount=-1
+kerning first=70 second=46 amount=-2
+kerning first=89 second=75 amount=-1
+kerning first=86 second=65 amount=-1
+kerning first=34 second=74 amount=-1
+kerning first=75 second=71 amount=-1
+kerning first=79 second=68 amount=-1
+kerning first=90 second=79 amount=-1
+kerning first=74 second=88 amount=-1
+kerning first=84 second=110 amount=-1
+kerning first=118 second=44 amount=-1
+kerning first=86 second=74 amount=-1
+kerning first=46 second=121 amount=-1
+kerning first=81 second=44 amount=1
+kerning first=89 second=81 amount=-1
+kerning first=65 second=34 amount=-1
+kerning first=44 second=67 amount=-1
+kerning first=76 second=89 amount=-2
+kerning first=46 second=102 amount=-2
+kerning first=68 second=68 amount=-1
+kerning first=77 second=84 amount=-1
+kerning first=46 second=84 amount=-2
+kerning first=84 second=88 amount=-1
+kerning first=114 second=44 amount=-3
+kerning first=80 second=44 amount=-3
+kerning first=89 second=71 amount=-1
+kerning first=46 second=86 amount=-1
+kerning first=84 second=79 amount=-1
+kerning first=70 second=65 amount=-1
+kerning first=86 second=103 amount=-1
+kerning first=89 second=83 amount=-1
+kerning first=97 second=116 amount=-1
+kerning first=84 second=113 amount=-1
+kerning first=79 second=88 amount=-1
+kerning first=39 second=81 amount=-1
+kerning first=44 second=116 amount=-2
+kerning first=88 second=79 amount=-1
+kerning first=84 second=82 amount=-1
+kerning first=89 second=46 amount=-3
+kerning first=44 second=118 amount=-1
+kerning first=84 second=85 amount=-1
+kerning first=39 second=71 amount=-1
+kerning first=74 second=44 amount=-1
+kerning first=44 second=87 amount=-1
+kerning first=84 second=99 amount=-1
+kerning first=102 second=44 amount=-2
+kerning first=34 second=88 amount=-1
+kerning first=89 second=76 amount=-1
+kerning first=116 second=46 amount=-2
+kerning first=68 second=88 amount=-1
+kerning first=83 second=88 amount=-1
+kerning first=108 second=121 amount=-1
+kerning first=84 second=115 amount=-1
+kerning first=89 second=111 amount=-2
+kerning first=110 second=34 amount=-1
+kerning first=75 second=67 amount=-1
+kerning first=108 second=102 amount=-1
+kerning first=34 second=79 amount=-1
+kerning first=86 second=88 amount=-1
+kerning first=89 second=114 amount=-1
+kerning first=84 second=44 amount=-2
+kerning first=46 second=81 amount=-1
+kerning first=89 second=101 amount=-2
+kerning first=65 second=89 amount=-1
+kerning first=97 second=39 amount=-1
+kerning first=80 second=34 amount=1
diff --git a/assets/fnt/MaxonPuff.png b/assets/fnt/MaxonPuff.png
new file mode 100644
index 0000000..439a3ba
--- /dev/null
+++ b/assets/fnt/MaxonPuff.png
Binary files differ
diff --git a/assets/icon.png b/assets/icon.png
new file mode 100644
index 0000000..9ad8062
--- /dev/null
+++ b/assets/icon.png
Binary files differ
diff --git a/assets/main.skin b/assets/main.skin
new file mode 100644
index 0000000..e82f8d7
--- /dev/null
+++ b/assets/main.skin
@@ -0,0 +1,55 @@
+{
+ Color: {
+ blackSemitransparent: {hex: "#00000099"},
+ black: {hex: "#000000ff" },
+ darkblue: {hex: "#1d2b53ff" },
+ darkpurple: {hex: "#7e2553ff" },
+ darkgreen: {hex: "#008751ff" },
+ brown: {hex: "#ab5236ff" },
+ grey: {hex: "#5f574fff" },
+ lightgrey: {hex: "#c2c3c7ff" },
+ white: {hex: "#fff1e8ff" },
+ red: {hex: "#ff004dff" },
+ orange: {hex: "#ffa300ff" },
+ yellow: {hex: "#ffec27ff" },
+ green: {hex: "#00e436ff" },
+ blue: {hex: "#29adffff" },
+ lavender: {hex: "#83769cff" },
+ pink: {hex: "#ff77a8ff" },
+ lightpeach: {hex: "#ffccaaff" }
+ },
+ com.badlogic.gdx.graphics.g2d.BitmapFont: {
+ defaultsmaller: {
+ file: fnt/MaxonPuff.fnt,
+ scaledSize: 8
+ }
+ default: {
+ file: fnt/MaxonPuff.fnt,
+ scaledSize: 18
+ },
+ header: {
+ file: fnt/MaxonBob.fnt,
+ scaledSize: 32
+ }
+ },
+
+ com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle: {
+ default: {
+ font: default,
+ fontColor: white
+ },
+ press: {
+ font: header,
+ fontColor: white
+ },
+ credits: {
+ font: default,
+ fontColor: blackSemitransparent
+ }
+ },
+ com.badlogic.gdx.scenes.scene2d.ui.Window$WindowStyle: {
+ default: {
+ titleFont: default
+ }
+ }
+} \ No newline at end of file
diff --git a/assets/mus/menu/mus_menu_intro.ogg b/assets/mus/menu/mus_menu_intro.ogg
new file mode 100644
index 0000000..1661db9
--- /dev/null
+++ b/assets/mus/menu/mus_menu_intro.ogg
Binary files differ
diff --git a/assets/mus/menu/mus_menu_loop.ogg b/assets/mus/menu/mus_menu_loop.ogg
new file mode 100644
index 0000000..7a081aa
--- /dev/null
+++ b/assets/mus/menu/mus_menu_loop.ogg
Binary files differ
diff --git a/assets/sprites/SplashWall.png b/assets/sprites/SplashWall.png
new file mode 100644
index 0000000..c0f0b1c
--- /dev/null
+++ b/assets/sprites/SplashWall.png
Binary files differ
diff --git a/assets/sprites/black.png b/assets/sprites/black.png
new file mode 100644
index 0000000..a974fd0
--- /dev/null
+++ b/assets/sprites/black.png
Binary files differ
diff --git a/assets/sprites/brand.png b/assets/sprites/brand.png
new file mode 100644
index 0000000..f5a67dc
--- /dev/null
+++ b/assets/sprites/brand.png
Binary files differ
diff --git a/assets/sprites/brandOnline.png b/assets/sprites/brandOnline.png
new file mode 100644
index 0000000..1563779
--- /dev/null
+++ b/assets/sprites/brandOnline.png
Binary files differ
diff --git a/assets/sprites/ilotterytea.png b/assets/sprites/ilotterytea.png
new file mode 100644
index 0000000..075dc08
--- /dev/null
+++ b/assets/sprites/ilotterytea.png
Binary files differ
diff --git a/assets/sprites/sheet/TooManyM4x0nns.png b/assets/sprites/sheet/TooManyM4x0nns.png
new file mode 100644
index 0000000..53ded1e
--- /dev/null
+++ b/assets/sprites/sheet/TooManyM4x0nns.png
Binary files differ
diff --git a/assets/sprites/sheet/loadingCircle.png b/assets/sprites/sheet/loadingCircle.png
new file mode 100644
index 0000000..424744a
--- /dev/null
+++ b/assets/sprites/sheet/loadingCircle.png
Binary files differ
diff --git a/assets/sprites/white.png b/assets/sprites/white.png
new file mode 100644
index 0000000..04a434b
--- /dev/null
+++ b/assets/sprites/white.png
Binary files differ
diff --git a/assets/texts/splashes.txt b/assets/texts/splashes.txt
new file mode 100644
index 0000000..dc9ed2e
--- /dev/null
+++ b/assets/texts/splashes.txt
@@ -0,0 +1 @@
+Почесончик! \ No newline at end of file
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..bde0a96
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,79 @@
+buildscript {
+
+
+ repositories {
+ mavenLocal()
+ mavenCentral()
+ gradlePluginPortal()
+ maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
+ google()
+ }
+ dependencies {
+ //classpath 'com.android.tools.build:gradle:7.0.4'
+
+
+ }
+}
+
+allprojects {
+ apply plugin: "eclipse"
+
+ version = '1.0'
+ ext {
+ appName = "Maxon Petting Simulator"
+ gdxVersion = '1.11.0'
+ roboVMVersion = '2.3.16'
+ box2DLightsVersion = '1.5'
+ ashleyVersion = '1.7.4'
+ aiVersion = '1.8.2'
+ gdxControllersVersion = '2.2.1'
+ }
+
+ repositories {
+ mavenLocal()
+ mavenCentral()
+ google()
+ gradlePluginPortal()
+ maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
+ maven { url "https://oss.sonatype.org/content/repositories/releases/" }
+ maven { url "https://jitpack.io" }
+ }
+}
+
+project(":desktop") {
+ apply plugin: "java-library"
+
+
+ dependencies {
+ implementation project(":core")
+ api "com.badlogicgames.gdx:gdx-backend-lwjgl3:$gdxVersion"
+ api "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
+
+ }
+}
+
+/*project(":android") {
+ apply plugin: "com.android.application"
+
+ configurations { natives }
+
+ dependencies {
+ implementation project(":core")
+ api "com.badlogicgames.gdx:gdx-backend-android:$gdxVersion"
+ natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a"
+ natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-arm64-v8a"
+ natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86"
+ natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86_64"
+
+ }
+}*/
+
+project(":core") {
+ apply plugin: "java-library"
+
+
+ dependencies {
+ api "com.badlogicgames.gdx:gdx:$gdxVersion"
+
+ }
+}
diff --git a/core/build.gradle b/core/build.gradle
new file mode 100644
index 0000000..468d26e
--- /dev/null
+++ b/core/build.gradle
@@ -0,0 +1,9 @@
+sourceCompatibility = 1.7
+dependencies {
+ implementation 'org.jetbrains:annotations-java5:20.1.0'
+}
+[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
+
+sourceSets.main.java.srcDirs = [ "src/" ]
+
+eclipse.project.name = appName + "-core"
diff --git a/core/src/com/ilotterytea/maxoning/MaxonConstants.java b/core/src/com/ilotterytea/maxoning/MaxonConstants.java
new file mode 100644
index 0000000..ad771e4
--- /dev/null
+++ b/core/src/com/ilotterytea/maxoning/MaxonConstants.java
@@ -0,0 +1,7 @@
+package com.ilotterytea.maxoning;
+
+public class MaxonConstants {
+ public static final String GAME_NAME = "Maxon Petting Simulator";
+ public static final String GAME_VERSION = "Alpha 1.0.0";
+ public static final String GAME_PUBLISHER = "iLotterytea";
+}
diff --git a/core/src/com/ilotterytea/maxoning/MaxonGame.java b/core/src/com/ilotterytea/maxoning/MaxonGame.java
new file mode 100644
index 0000000..9a24256
--- /dev/null
+++ b/core/src/com/ilotterytea/maxoning/MaxonGame.java
@@ -0,0 +1,45 @@
+package com.ilotterytea.maxoning;
+
+import com.badlogic.gdx.Game;
+import com.badlogic.gdx.Gdx;
+import com.badlogic.gdx.assets.AssetManager;
+import com.badlogic.gdx.graphics.g2d.SpriteBatch;
+import com.ilotterytea.maxoning.screen.AssetLoadingScreen;
+import com.ilotterytea.maxoning.screen.SplashScreen;
+
+public class MaxonGame extends Game {
+ public SpriteBatch batch;
+ public AssetManager assetManager;
+
+ private static MaxonGame instance;
+
+ public static MaxonGame getInstance() {
+ if (instance == null) {
+ instance = new MaxonGame();
+ }
+ return instance;
+ }
+
+ @Override
+ public void create () {
+ batch = new SpriteBatch();
+
+ assetManager = new AssetManager();
+ this.setScreen(new AssetLoadingScreen(this));
+ }
+
+ @Override
+ public void render () {
+ super.render();
+ }
+
+ @Override
+ public void dispose () {
+ batch.dispose();
+ for (String name : assetManager.getAssetNames()) {
+ assetManager.unload(name);
+ }
+ assetManager.dispose();
+ instance.dispose();
+ }
+}
diff --git a/core/src/com/ilotterytea/maxoning/anim/AnimatedImage.java b/core/src/com/ilotterytea/maxoning/anim/AnimatedImage.java
new file mode 100644
index 0000000..8da1c19
--- /dev/null
+++ b/core/src/com/ilotterytea/maxoning/anim/AnimatedImage.java
@@ -0,0 +1,38 @@
+package com.ilotterytea.maxoning.anim;
+
+import com.badlogic.gdx.graphics.g2d.Animation;
+import com.badlogic.gdx.graphics.g2d.TextureRegion;
+import com.badlogic.gdx.scenes.scene2d.ui.Image;
+import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
+
+public class AnimatedImage extends Image {
+ private float stateTime = 0;
+ private final TextureRegion[] regions;
+ private int index = 0;
+
+ public AnimatedImage(TextureRegion[] regions) {
+ super(regions[0]);
+ this.regions = regions;
+ }
+
+ @Override public void act(float delta) {
+ if (index > regions.length - 1) {
+ index = 0;
+ }
+ if (regions[index + 1] == null) {
+ index = 0;
+ }
+ super.setDrawable(new TextureRegionDrawable(regions[index]));
+ index++;
+ super.act(delta);
+
+ }
+
+ public void dispose() {
+ for (TextureRegion reg : regions) {
+ if (reg != null) {
+ reg.getTexture().dispose();
+ }
+ }
+ }
+}
diff --git a/core/src/com/ilotterytea/maxoning/anim/SpriteUtils.java b/core/src/com/ilotterytea/maxoning/anim/SpriteUtils.java
new file mode 100644
index 0000000..63c4f0b
--- /dev/null
+++ b/core/src/com/ilotterytea/maxoning/anim/SpriteUtils.java
@@ -0,0 +1,34 @@
+package com.ilotterytea.maxoning.anim;
+
+import com.badlogic.gdx.graphics.Texture;
+import com.badlogic.gdx.graphics.g2d.TextureRegion;
+
+import java.util.Arrays;
+
+public class SpriteUtils {
+ public static TextureRegion[] splitToTextureRegions(
+ Texture texture,
+ int tileWidth,
+ int tileHeight,
+ int columns,
+ int rows
+ ) {
+ TextureRegion[][] tmp = TextureRegion.split(texture, tileWidth, tileHeight);
+ TextureRegion[] frames = new TextureRegion[(texture.getWidth() / columns) + (texture.getHeight() / rows)];
+
+ int index = 0;
+
+ for (TextureRegion[] regArray : tmp) {
+ for (TextureRegion reg : regArray) {
+ if (reg != null) {
+ frames[index++] = reg;
+ }
+ }
+ }
+
+ System.out.println(Arrays.deepToString(tmp));
+ System.out.println(frames.length);
+
+ return frames;
+ }
+}
diff --git a/core/src/com/ilotterytea/maxoning/screen/AssetLoadingScreen.java b/core/src/com/ilotterytea/maxoning/screen/AssetLoadingScreen.java
new file mode 100644
index 0000000..0db18e6
--- /dev/null
+++ b/core/src/com/ilotterytea/maxoning/screen/AssetLoadingScreen.java
@@ -0,0 +1,107 @@
+package com.ilotterytea.maxoning.screen;
+
+import com.badlogic.gdx.*;
+import com.badlogic.gdx.audio.Music;
+import com.badlogic.gdx.graphics.GL20;
+import com.badlogic.gdx.graphics.Texture;
+import com.badlogic.gdx.graphics.g2d.Animation;
+import com.badlogic.gdx.graphics.g2d.BitmapFont;
+import com.badlogic.gdx.graphics.g2d.TextureRegion;
+import com.badlogic.gdx.math.MathUtils;
+import com.badlogic.gdx.scenes.scene2d.Stage;
+import com.badlogic.gdx.scenes.scene2d.ui.Label;
+import com.badlogic.gdx.scenes.scene2d.ui.Skin;
+import com.badlogic.gdx.utils.Timer;
+import com.badlogic.gdx.utils.viewport.FillViewport;
+import com.ilotterytea.maxoning.MaxonGame;
+import com.ilotterytea.maxoning.anim.AnimatedImage;
+import com.ilotterytea.maxoning.anim.SpriteUtils;
+
+import java.util.Arrays;
+
+public class AssetLoadingScreen implements Screen {
+ final MaxonGame game;
+
+ final Stage stage;
+ final Skin skin;
+ final AnimatedImage animatedMaxon;
+ final Label loadingLabel;
+
+ final Texture M4x0nnes;
+
+ public AssetLoadingScreen(MaxonGame game) {
+ this.game = game;
+
+ this.M4x0nnes = new Texture("sprites/sheet/loadingCircle.png");
+
+ this.skin = new Skin(Gdx.files.internal("main.skin"));
+ this.stage = new Stage(new FillViewport(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()));
+
+ this.loadingLabel = new Label("Loading...", skin);
+
+ TextureRegion[] txrr = SpriteUtils.splitToTextureRegions(M4x0nnes, 112, 112, 10, 5);
+ this.animatedMaxon = new AnimatedImage(txrr);
+
+ animatedMaxon.setPosition(8, 8);
+ animatedMaxon.setScale(0.25f);
+
+ loadingLabel.setPosition(animatedMaxon.getWidth() * 0.25f + loadingLabel.getX() + 16, 8);
+
+ stage.addActor(animatedMaxon);
+ stage.addActor(loadingLabel);
+
+ queueAssets();
+ }
+
+ @Override public void show() { render(Gdx.graphics.getDeltaTime()); }
+
+ private void update(float delta) {
+ if (game.assetManager.update()) {
+ Timer.schedule(new Timer.Task() {
+ @Override
+ public void run() {
+ game.setScreen(new SplashScreen(game));
+ dispose();
+ }
+ }, 1f);
+ }
+ }
+
+ @Override
+ public void render(float delta) {
+ Gdx.gl.glClearColor(0, 0, 0, 1);
+ Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
+
+ loadingLabel.setText(String.format("%s%% (Loaded %s assets)", MathUtils.floor(game.assetManager.getProgress() * 100), game.assetManager.getLoadedAssets()));
+
+ stage.draw();
+ stage.act(delta);
+
+ update(delta);
+ }
+
+ @Override
+ public void resize(int width, int height) {
+ stage.getViewport().update(width, height, true);
+ }
+ @Override public void pause() {}
+ @Override public void resume() {}
+ @Override public void hide() { dispose(); }
+ @Override public void dispose() {}
+ private void queueAssets() {
+ // Textures:
+ game.assetManager.load("icon.png", Texture.class);
+ game.assetManager.load("dev.png", Texture.class);
+ game.assetManager.load("sprites/sheet/loadingCircle.png", Texture.class);
+ game.assetManager.load("sprites/black.png", Texture.class);
+ game.assetManager.load("sprites/white.png", Texture.class);
+ game.assetManager.load("sprites/brand.png", Texture.class);
+ game.assetManager.load("sprites/ilotterytea.png", Texture.class);
+ game.assetManager.load("sprites/SplashWall.png", Texture.class);
+
+ // Music:
+ game.assetManager.load("mus/menu/mus_menu_intro.ogg", Music.class);
+ game.assetManager.load("mus/menu/mus_menu_loop.ogg", Music.class);
+ // Sounds:
+ }
+}
diff --git a/core/src/com/ilotterytea/maxoning/screen/MenuScreen.java b/core/src/com/ilotterytea/maxoning/screen/MenuScreen.java
new file mode 100644
index 0000000..b07f3c1
--- /dev/null
+++ b/core/src/com/ilotterytea/maxoning/screen/MenuScreen.java
@@ -0,0 +1,233 @@
+package com.ilotterytea.maxoning.screen;
+
+import com.badlogic.gdx.*;
+import com.badlogic.gdx.audio.Music;
+import com.badlogic.gdx.graphics.GL20;
+import com.badlogic.gdx.graphics.Texture;
+import com.badlogic.gdx.graphics.g2d.Sprite;
+import com.badlogic.gdx.math.Interpolation;
+import com.badlogic.gdx.scenes.scene2d.Stage;
+import com.badlogic.gdx.scenes.scene2d.actions.Actions;
+import com.badlogic.gdx.scenes.scene2d.actions.RepeatAction;
+import com.badlogic.gdx.scenes.scene2d.ui.Image;
+import com.badlogic.gdx.scenes.scene2d.ui.Label;
+import com.badlogic.gdx.scenes.scene2d.ui.Skin;
+import com.badlogic.gdx.utils.viewport.FillViewport;
+import com.ilotterytea.maxoning.MaxonConstants;
+import com.ilotterytea.maxoning.MaxonGame;
+
+import java.util.ArrayList;
+
+public class MenuScreen implements Screen, InputProcessor {
+
+ final MaxonGame game;
+
+ final Stage stage;
+ final Skin skin;
+
+ final Image brandLogo, maxonLogo;
+ final Label startLabel, infoLabel;
+
+ final Texture wall, brandTxr, maxonTxr;
+
+ final Music menuMusic;
+
+ private ArrayList<ArrayList<Sprite>> wallTiles = new ArrayList<>();
+
+ private boolean anyKeyPressed = false;
+
+ public MenuScreen(MaxonGame game) {
+ this.game = game;
+
+ this.stage = new Stage(new FillViewport(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()));
+ this.skin = new Skin(Gdx.files.internal("main.skin"));
+
+ this.brandTxr = new Texture(Gdx.files.internal("sprites/brand.png"));
+ this.maxonTxr = new Texture(Gdx.files.internal("icon.png"));
+ this.wall = new Texture(Gdx.files.internal("sprites/SplashWall.png"));
+
+ this.menuMusic = game.assetManager.get("mus/menu/mus_menu_loop.ogg", Music.class);
+
+ for (int i = 0; i < (Gdx.graphics.getHeight() / wall.getHeight()) + 1; i++) {
+ wallTiles.add(new ArrayList<Sprite>());
+ for (int j = 0; j < (Gdx.graphics.getWidth() / wall.getWidth()); j++) {
+ Sprite spr = new Sprite(wall);
+ spr.setPosition(wall.getWidth() * j, wall.getHeight() * i);
+
+ wallTiles.get(i).add(spr);
+ }
+ }
+
+ this.maxonLogo = new Image(maxonTxr);
+ this.brandLogo = new Image(brandTxr);
+
+ this.startLabel = new Label("PRESS ANY KEY TO START", skin, "press");
+ this.infoLabel = new Label(String.format("%s %s", MaxonConstants.GAME_NAME, MaxonConstants.GAME_VERSION), skin, "credits");
+
+ brandLogo.setScale(0f);
+
+ brandLogo.setPosition(
+ (Gdx.graphics.getWidth() / 2.0f) - (brandLogo.getWidth() / 2.0f),
+ (Gdx.graphics.getHeight() / 2.0f) - (brandLogo.getHeight() / 2.0f)
+ );
+
+ brandLogo.setOrigin(
+ brandLogo.getWidth() / 2.0f,
+ brandLogo.getHeight() / 2.0f
+ );
+
+ brandLogo.addAction(
+ Actions.sequence(
+ Actions.scaleTo(50f, 50f, 0f),
+ Actions.scaleTo(1f, 1f, 5f, Interpolation.circleIn),
+ Actions.repeat(
+ RepeatAction.FOREVER,
+ Actions.sequence(
+ Actions.parallel(
+ Actions.rotateTo(-10, 10f, Interpolation.sine),
+ Actions.scaleTo(0.85f, 0.85f, 10f, Interpolation.sine)
+ ),
+ Actions.parallel(
+ Actions.rotateTo(10, 10f, Interpolation.sine),
+ Actions.scaleTo(1.25f, 1.25f, 10f, Interpolation.sine)
+ )
+ )
+ ))
+ );
+
+ startLabel.setPosition(
+ (Gdx.graphics.getWidth() / 2.0f) - (startLabel.getWidth() / 2.0f),
+ 32
+ );
+
+ startLabel.addAction(
+ Actions.repeat(
+ RepeatAction.FOREVER,
+ Actions.sequence(
+ Actions.alpha(0f),
+ Actions.fadeIn(1f),
+ Actions.delay(5f),
+ Actions.fadeOut(1f)
+ )
+ )
+ );
+
+ stage.addActor(infoLabel);
+ stage.addActor(brandLogo);
+ stage.addActor(startLabel);
+
+ Gdx.input.setInputProcessor(new InputMultiplexer(this, stage));
+ }
+
+ @Override public void show() {
+ render(Gdx.graphics.getDeltaTime());
+ menuMusic.setLooping(true);
+ menuMusic.play();
+ }
+
+ private final float wallVelocity = 1f;
+
+ @Override
+ public void render(float delta) {
+ Gdx.gl.glClearColor(0, 0, 0, 1);
+ Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
+
+ // Draw the sprites:
+ /*for (ArrayList<Sprite> sprArray : wallTiles) {
+ for (Sprite tile : sprArray) {
+ tile.setPosition(tile.getX() + wallVelocity, tile.getY());
+ tile.draw(game.batch);
+ }
+ }*/
+
+ /*
+ for (ArrayList<Sprite> sprArray : wallTiles) {
+ for (int i = 0; i < sprArray.size(); i++) {
+ Sprite spr = sprArray.get(i);
+
+ if (spr.getX() + spr.getWidth() > Gdx.graphics.getWidth()) {
+ spr.setPosition(sprArray.get(0).getX() - spr.getWidth(), spr.getY());
+ sprArray.remove(i);
+ sprArray.add(0, spr);
+ }
+ }
+ }*/
+
+ if (anyKeyPressed) {
+ startLabel.clearActions();
+ startLabel.addAction(
+ Actions.sequence(
+ Actions.moveTo(startLabel.getX(), -192, 1f, Interpolation.smoother)
+ )
+ );
+ }
+
+ stage.draw();
+ stage.act(delta);
+ }
+
+ @Override
+ public void resize(int width, int height) {
+ stage.getViewport().update(width, height, true);
+ }
+
+ @Override public void pause() {}
+ @Override public void resume() {}
+ @Override public void hide() { dispose(); }
+ @Override
+ public void dispose() {
+ stage.dispose();
+ skin.dispose();
+ }
+
+ @Override
+ public boolean keyDown(int keycode) {
+ if (Gdx.input.isKeyPressed(Input.Keys.ESCAPE)) {
+ Gdx.app.exit();
+ }
+
+ if (Gdx.input.isKeyPressed(Input.Keys.ANY_KEY)) {
+ anyKeyPressed = true;
+ }
+
+ return false;
+ }
+
+ @Override
+ public boolean keyUp(int keycode) {
+ return false;
+ }
+
+ @Override
+ public boolean keyTyped(char character) {
+ return false;
+ }
+
+ @Override
+ public boolean touchDown(int screenX, int screenY, int pointer, int button) {
+ if (Gdx.input.isTouched()) {
+ anyKeyPressed = true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean touchUp(int screenX, int screenY, int pointer, int button) {
+ return false;
+ }
+
+ @Override
+ public boolean touchDragged(int screenX, int screenY, int pointer) {
+ return false;
+ }
+
+ @Override
+ public boolean mouseMoved(int screenX, int screenY) {
+ return false;
+ }
+
+ @Override
+ public boolean scrolled(float amountX, float amountY) {
+ return false;
+ }
+}
diff --git a/core/src/com/ilotterytea/maxoning/screen/SplashScreen.java b/core/src/com/ilotterytea/maxoning/screen/SplashScreen.java
new file mode 100644
index 0000000..82dc76a
--- /dev/null
+++ b/core/src/com/ilotterytea/maxoning/screen/SplashScreen.java
@@ -0,0 +1,158 @@
+package com.ilotterytea.maxoning.screen;
+
+import com.badlogic.gdx.*;
+import com.badlogic.gdx.audio.Music;
+import com.badlogic.gdx.graphics.GL20;
+import com.badlogic.gdx.graphics.Texture;
+import com.badlogic.gdx.scenes.scene2d.Stage;
+import com.badlogic.gdx.scenes.scene2d.actions.Actions;
+import com.badlogic.gdx.scenes.scene2d.ui.Image;
+import com.badlogic.gdx.scenes.scene2d.ui.Label;
+import com.badlogic.gdx.scenes.scene2d.ui.Skin;
+import com.badlogic.gdx.utils.Timer;
+import com.badlogic.gdx.utils.viewport.FillViewport;
+import com.ilotterytea.maxoning.MaxonConstants;
+import com.ilotterytea.maxoning.MaxonGame;
+
+public class SplashScreen implements InputProcessor, Screen {
+
+ final MaxonGame game;
+
+ final Stage stage;
+ final Skin skin;
+
+ final Image whiteSquare, dev;
+ final Label infoLabel;
+
+ final Music introMusic;
+
+ public SplashScreen(MaxonGame game) {
+ this.game = game;
+
+ this.introMusic = game.assetManager.get("mus/menu/mus_menu_intro.ogg", Music.class);
+
+
+ this.stage = new Stage(new FillViewport(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()));
+ this.skin = game.assetManager.get("main.skin", Skin.class);
+
+ this.infoLabel = new Label(
+ String.format("%s %s", MaxonConstants.GAME_NAME, MaxonConstants.GAME_VERSION),
+ skin, "credits"
+ );
+
+ this.dev = new Image(game.assetManager.get("dev.png", Texture.class));
+ this.whiteSquare = new Image(game.assetManager.get("sprites/white.png", Texture.class));
+
+ infoLabel.setPosition(
+ 8,
+ (Gdx.graphics.getHeight() - infoLabel.getHeight()) - 8
+ );
+
+ dev.setScale(5f);
+
+ dev.setPosition(
+ (Gdx.graphics.getWidth() / 2.0f) - (dev.getWidth() * 5f / 2.0f),
+ (Gdx.graphics.getHeight() / 2.0f) - (dev.getHeight() * 5f / 2.0f)
+ );
+
+ whiteSquare.setPosition(0, 0);
+ whiteSquare.setSize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
+
+ dev.addAction(Actions.sequence(
+ Actions.alpha(0),
+ Actions.fadeIn(1f),
+ Actions.delay(5f),
+ Actions.fadeOut(0.25f)
+ ));
+
+ whiteSquare.addAction(Actions.sequence(
+ Actions.alpha(0),
+ Actions.fadeIn(0.5f),
+ Actions.delay(25f),
+ Actions.fadeOut(0.5f)
+ ));
+
+ stage.addActor(whiteSquare);
+ stage.addActor(infoLabel);
+ stage.addActor(dev);
+
+ Gdx.input.setInputProcessor(new InputMultiplexer(this, stage));
+ }
+
+ @Override public void show() {
+ introMusic.play();
+ render(Gdx.graphics.getDeltaTime());
+ }
+
+ private final float wallVelocity = 1f;
+
+ @Override
+ public void render(float delta) {
+ Gdx.gl.glClearColor(0, 0, 0, 1);
+ Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
+
+ stage.draw();
+ stage.act(delta);
+
+ if (!introMusic.isPlaying()) {
+ game.setScreen(new MenuScreen(game));
+ }
+ }
+
+ @Override
+ public void resize(int width, int height) {
+ stage.getViewport().update(width, height, true);
+ }
+
+ @Override public void pause() {}
+ @Override public void resume() {}
+ @Override public void hide() { dispose(); }
+ @Override public void dispose() {}
+
+ @Override
+ public boolean keyDown(int keycode) {
+ if (Gdx.input.isKeyPressed(Input.Keys.ESCAPE)) {
+ Gdx.app.exit();
+ }
+ if (Gdx.input.isKeyPressed(Input.Keys.ANY_KEY)) {
+ game.setScreen(new MenuScreen(game));
+ dispose();
+ }
+ return false;
+ }
+
+ @Override
+ public boolean keyUp(int keycode) {
+ return false;
+ }
+
+ @Override
+ public boolean keyTyped(char character) {
+ return false;
+ }
+
+ @Override
+ public boolean touchDown(int screenX, int screenY, int pointer, int button) {
+ return false;
+ }
+
+ @Override
+ public boolean touchUp(int screenX, int screenY, int pointer, int button) {
+ return false;
+ }
+
+ @Override
+ public boolean touchDragged(int screenX, int screenY, int pointer) {
+ return false;
+ }
+
+ @Override
+ public boolean mouseMoved(int screenX, int screenY) {
+ return false;
+ }
+
+ @Override
+ public boolean scrolled(float amountX, float amountY) {
+ return false;
+ }
+}
diff --git a/core/src/com/ilotterytea/maxoning/utils/colors/HexToARGB.java b/core/src/com/ilotterytea/maxoning/utils/colors/HexToARGB.java
new file mode 100644
index 0000000..5db8f1d
--- /dev/null
+++ b/core/src/com/ilotterytea/maxoning/utils/colors/HexToARGB.java
@@ -0,0 +1,14 @@
+package com.ilotterytea.maxoning.utils.colors;
+
+import com.badlogic.gdx.graphics.Color;
+
+public final class HexToARGB {
+ public static Color convert(String hex) {
+ hex = hex.charAt(0) == '#' ? hex.substring(1) : hex;
+ int r = Integer.valueOf(hex.substring(0, 2), 16);
+ int g = Integer.valueOf(hex.substring(2, 4), 16);
+ int b = Integer.valueOf(hex.substring(4, 6), 16);
+ int a = hex.length() != 8 ? 255 : Integer.valueOf(hex.substring(6, 8), 16);
+ return new Color(r / 255f, g / 255f, b / 255f, a / 255f);
+ }
+}
diff --git a/desktop/build.gradle b/desktop/build.gradle
new file mode 100644
index 0000000..9e8a4a8
--- /dev/null
+++ b/desktop/build.gradle
@@ -0,0 +1,47 @@
+sourceCompatibility = 1.8
+sourceSets.main.java.srcDirs = [ "src/" ]
+sourceSets.main.resources.srcDirs = ["../assets"]
+
+project.ext.mainClassName = "com.ilotterytea.maxoning.DesktopLauncher"
+project.ext.assetsDir = new File("../assets")
+
+import org.gradle.internal.os.OperatingSystem
+
+task run(dependsOn: classes, type: JavaExec) {
+ main = project.mainClassName
+ classpath = sourceSets.main.runtimeClasspath
+ standardInput = System.in
+ workingDir = project.assetsDir
+ ignoreExitValue = true
+
+ if (OperatingSystem.current() == OperatingSystem.MAC_OS) {
+ // Required to run on macOS
+ jvmArgs += "-XstartOnFirstThread"
+ }
+}
+
+task debug(dependsOn: classes, type: JavaExec) {
+ main = project.mainClassName
+ classpath = sourceSets.main.runtimeClasspath
+ standardInput = System.in
+ workingDir = project.assetsDir
+ ignoreExitValue = true
+ debug = true
+}
+
+task dist(type: Jar) {
+ duplicatesStrategy(DuplicatesStrategy.EXCLUDE)
+ manifest {
+ attributes 'Main-Class': project.mainClassName
+ }
+ dependsOn configurations.runtimeClasspath
+ from {
+ configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
+ }
+ with jar
+}
+
+
+dist.dependsOn classes
+
+eclipse.project.name = appName + "-desktop"
diff --git a/desktop/src/com/ilotterytea/maxoning/DesktopLauncher.java b/desktop/src/com/ilotterytea/maxoning/DesktopLauncher.java
new file mode 100644
index 0000000..c543213
--- /dev/null
+++ b/desktop/src/com/ilotterytea/maxoning/DesktopLauncher.java
@@ -0,0 +1,35 @@
+package com.ilotterytea.maxoning;
+
+import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application;
+import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.util.ArrayList;
+import java.util.Scanner;
+
+// Please note that on macOS your application needs to be started with the -XstartOnFirstThread JVM argument
+public class DesktopLauncher {
+ public static void main (String[] arg) throws FileNotFoundException {
+ Lwjgl3ApplicationConfiguration config = new Lwjgl3ApplicationConfiguration();
+ config.setForegroundFPS(60);
+ config.setTitle(String.format("Maxon Petting Simulator - %s", getRandomLine()));
+ config.setWindowIcon("icon.png");
+ config.setWindowedMode(1280, 720);
+ //config.setFullscreenMode(Lwjgl3ApplicationConfiguration.getDisplayMode());
+
+ new Lwjgl3Application(new MaxonGame(), config);
+ }
+
+ private static String getRandomLine() throws FileNotFoundException {
+ Scanner scan = new Scanner(new File("texts/splashes.txt"));
+ ArrayList<String> strings = new ArrayList<>();
+
+ while (scan.hasNext()) {
+ strings.add(scan.next());
+ }
+
+ return strings.get((int) Math.floor(Math.random() * strings.size()));
+ }
+
+}
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..ff329ac
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,3 @@
+org.gradle.daemon=true
+org.gradle.jvmargs=-Xms128m -Xmx1500m
+org.gradle.configureondemand=false
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..249e583
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..8049c68
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
new file mode 100755
index 0000000..a69d9cb
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,240 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+#
+# Gradle start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh Gradle
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (3) This script is generated from the Groovy template
+# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
+done
+
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
+
+APP_NAME="Gradle"
+APP_BASE_NAME=${0##*/}
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+ echo "$*"
+} >&2
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD=$JAVA_HOME/jre/sh/java
+ else
+ JAVACMD=$JAVA_HOME/bin/java
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD=java
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
+ fi
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
+ done
+fi
+
+# Collect all arguments for the java command;
+# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
+# shell script including quotes and variable substitutions, so put them in
+# double quotes to make sure that they get re-expanded; and
+# * put everything else in single quotes, so that it's not re-expanded.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ org.gradle.wrapper.GradleWrapperMain \
+ "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+ die "xargs is not available"
+fi
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..f127cfd
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,91 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%"=="" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%"=="" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if %ERRORLEVEL% equ 0 goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if %ERRORLEVEL% equ 0 goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..77ae463
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1 @@
+include 'desktop', 'android', 'core' \ No newline at end of file