Compare commits

...

No commits in common. "fxgl" and "develop" have entirely different histories.

162 changed files with 13398 additions and 1642 deletions

18
.editorconfig Normal file
View File

@ -0,0 +1,18 @@
# https://editorconfig.org
root = true
[*]
indent_style = space
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.{java,scala,groovy,kt,kts}]
indent_size = 4
[*.gradle]
indent_size = 2
[*.md]
trim_trailing_whitespace = false

2
.gitattributes vendored Normal file
View File

@ -0,0 +1,2 @@
* text=auto eol=lf
*.bat text=auto eol=crlf

174
.gitignore vendored Executable file → Normal file
View File

@ -1,14 +1,166 @@
#files to ignore
*.metadata/**
*.recommenders/**
*/target/**
target
*/build/**
*.idea/**
## Gradle:
.gradle/
gradle-app.setting
/build/
/android/build/
/core/build/
/lwjgl2/build/
/lwjgl3/build/
/html/build/
/teavm/build/
/ios/build/
/ios-moe/build/
/headless/build/
/server/build/
/shared/build/
## Java:
*.class
logs/*
dist/*
system/*
*.war
*.ear
hs_err_pid*
.attach_pid*
## Android:
/android/libs/armeabi-v7a/
/android/libs/arm64-v8a/
/android/libs/x86/
/android/libs/x86_64/
/android/gen/
/android/out/
local.properties
com_crashlytics_export_strings.xml
## Robovm:
/ios/robovm-build/
## iOS:
/ios/xcode/*.xcodeproj/*
!/ios/xcode/*.xcodeproj/xcshareddata
!/ios/xcode/*.xcodeproj/project.pbxproj
/ios/xcode/native/
/ios/IOSLauncher.app
/ios/IOSLauncher.app.dSYM
## GWT:
/html/war/
/html/gwt-unitCache/
.apt_generated/
/html/war/WEB-INF/deploy/
/html/war/WEB-INF/classes/
.gwt/
gwt-unitCache/
www-test/
.gwt-tmp/
## TeaVM:
# Not sure yet...
## IntelliJ, Android Studio:
.idea/
*.ipr
*.iws
*.iml
## Eclipse:
.classpath
.project
.metadata/
/android/bin/
/core/bin/
/lwjgl2/bin/
/lwjgl3/bin/
/html/bin/
/teavm/bin/
/ios/bin/
/ios-moe/bin/
/headless/bin/
/server/bin/
/shared/bin/
*.tmp
*.bak
*.swp
*~.nib
.settings/
.loadpath
.externalToolBuilders/
*.launch
## NetBeans:
/nbproject/private/
/android/nbproject/private/
/core/nbproject/private/
/lwjgl2/nbproject/private/
/lwjgl3/nbproject/private/
/html/nbproject/private/
/teavm/nbproject/private/
/ios/nbproject/private/
/ios-moe/nbproject/private/
/headless/nbproject/private/
/server/nbproject/private/
/shared/nbproject/private/
/nbbuild/
/android/nbbuild/
/core/nbbuild/
/lwjgl2/nbbuild/
/lwjgl3/nbbuild/
/html/nbbuild/
/teavm/nbbuild/
/ios/nbbuild/
/ios-moe/nbbuild/
/headless/nbbuild/
/server/nbbuild/
/shared/nbbuild/
/dist/
/android/dist/
/core/dist/
/lwjgl2/dist/
/lwjgl3/dist/
/html/dist/
/teavm/dist/
/ios/dist/
/ios-moe/dist/
/headless/dist/
/server/dist/
/shared/dist/
/nbdist/
/android/nbdist/
/core/nbdist/
/lwjgl2/nbdist/
/lwjgl3/nbdist/
/html/nbdist/
/teavm/nbdist/
/ios/nbdist/
/ios-moe/nbdist/
/headless/nbdist/
/server/nbdist/
/shared/nbdist/
nbactions.xml
nb-configuration.xml
## OS-Specific:
.DS_Store
Thumbs.db
## Miscellaneous:
*~
*.*#
*#*#
/assets/assets.txt
/assets/assets_.txt
## Special cases:
## There is a resource-config.json file generated by nativeimage.gradle if you use Graal Native Image.
## Some usage may need extra resource configuration in a different file with the same name.
## You could also add that configuration to the text in nativeimage.gradle .
## You should delete or comment out the next line if you have configuration in a different resource-config.json .
**/resource-config.json
**pixel-app*

4
.gitmodules vendored Normal file
View File

@ -0,0 +1,4 @@
[submodule "assets/embedded_mods/speedy-blupi-I-legacy-mods"]
path = assets/embedded_mods/speedy-blupi-I-legacy-mods
url = https://github.com/openeggbert/speedy-blupi-I-legacy-mods
branch = develop

View File

@ -1,2 +1,61 @@
# Open Eggbert
Free recreation of the computer game Speedy Eggbert.
## Development
A [libGDX](https://libgdx.com/) project generated with [gdx-liftoff](https://github.com/libgdx/gdx-liftoff).
This project was generated with a template including simple application launchers and an `ApplicationAdapter` extension that draws libGDX logo.
## Requirements
- Java 17 is installed
## Platforms
- `core`: Main module with the application logic shared by all platforms.
- `lwjgl3`: Primary desktop platform using LWJGL3.
- `android`: Android mobile platform. Needs Android SDK.
- `html`: Web platform using GWT and WebGL. Supports only Java projects.
- `teavm`: Experimental web platform using TeaVM and WebGL.
## Gradle
This project uses [Gradle](https://gradle.org/) to manage dependencies.
The Gradle wrapper was included, so you can run Gradle tasks using `gradlew.bat` or `./gradlew` commands.
Useful Gradle tasks and flags:
- `--continue`: when using this flag, errors will not stop the tasks from running.
- `--daemon`: thanks to this flag, Gradle daemon will be used to run chosen tasks.
- `--offline`: when using this flag, cached dependency archives will be used.
- `--refresh-dependencies`: this flag forces validation of all dependencies. Useful for snapshot versions.
- `android:lint`: performs Android project validation.
- `build`: builds sources and archives of every project.
- `cleanEclipse`: removes Eclipse project data.
- `cleanIdea`: removes IntelliJ project data.
- `clean`: removes `build` folders, which store compiled classes and built archives.
- `eclipse`: generates Eclipse project data.
- `html:dist`: compiles GWT sources. The compiled application can be found at `html/build/dist`: you can use any HTTP server to deploy it.
- `html:superDev`: compiles GWT sources and runs the application in SuperDev mode. It will be available at [localhost:8080/html](http://localhost:8080/html). Use only during development.
- `idea`: generates IntelliJ project data.
- `lwjgl3:jar`: builds application's runnable jar, which can be found at `lwjgl3/build/lib`.
- `lwjgl3:run`: starts the application.
- `teavm:build`: builds the JavaScript application into the build/dist/webapp folder.
- `teavm:run`: serves the JavaScript application at http://localhost:8080 via a local Jetty server.
- `test`: runs unit tests (if any).
Note that most tasks that are not specific to a single project can be run with `name:` prefix, where the `name` should be replaced with the ID of a specific project.
For example, `core:clean` removes `build` folder only from the `core` project.
## FAQ
### How to clean Gradle cache
`./gradlew clean build --refresh-dependencies`
### Deploy HTML to localhost
Change directory to html/build/dist and run:
`python3 -m http.server 8000`

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<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"
android:theme="@style/GdxTheme">
<activity
android:name="com.openeggbert.android.AndroidLauncher"
android:label="@string/app_name"
android:screenOrientation="landscape"
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>
<uses-permission android:name="android.permission.INTERNET" />
</manifest>

131
android/build.gradle Normal file
View File

@ -0,0 +1,131 @@
apply plugin: 'com.android.application'
android {
namespace "com.openeggbert"
compileSdk 34
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.setSrcDirs(['src/main/java'])
aidl.setSrcDirs(['src/main/java'])
renderscript.setSrcDirs(['src/main/java'])
res.setSrcDirs(['res'])
assets.setSrcDirs(['../assets'])
jniLibs.setSrcDirs(['libs'])
}
}
packagingOptions {
resources {
excludes += ['META-INF/robovm/ios/robovm.xml', 'META-INF/DEPENDENCIES.txt', 'META-INF/DEPENDENCIES',
'META-INF/dependencies.txt', '**/*.gwt.xml']
pickFirsts += ['META-INF/LICENSE.txt', 'META-INF/LICENSE', 'META-INF/license.txt', 'META-INF/LGPL2.1',
'META-INF/NOTICE.txt', 'META-INF/NOTICE', 'META-INF/notice.txt']
}
}
defaultConfig {
applicationId 'com.openeggbert'
minSdkVersion 19
targetSdkVersion 34
versionCode 1
versionName "1.0"
multiDexEnabled true
}
compileOptions {
sourceCompatibility "11"
targetCompatibility "11"
coreLibraryDesugaringEnabled true
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
repositories {
// needed for AAPT2, may be needed for other tools
google()
}
configurations { natives }
dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
implementation "com.badlogicgames.gdx-controllers:gdx-controllers-android:$gdxControllersVersion"
implementation "com.badlogicgames.gdx:gdx-backend-android:$gdxVersion"
implementation "com.github.MrStahlfelge.gdx-websockets:common:$websocketVersion"
implementation project(':core')
implementation "com.pixelgamelibrary:pixel:$pixelVersion"
implementation "com.pixelgamelibrary:pixel-backend-libgdx:$pixelVersion"
natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-arm64-v8a"
natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-armeabi-v7a"
natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-x86"
natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-x86_64"
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-arm64-v8a"
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a"
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86"
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86_64"
natives "games.rednblack.miniaudio:miniaudio:$miniaudioVersion:natives-arm64-v8a"
natives "games.rednblack.miniaudio:miniaudio:$miniaudioVersion:natives-armeabi-v7a"
natives "games.rednblack.miniaudio:miniaudio:$miniaudioVersion:natives-x86"
natives "games.rednblack.miniaudio:miniaudio:$miniaudioVersion:natives-x86_64"
}
// 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.
tasks.register('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-armeabi-v7a.jar")) outputDir = file("libs/armeabi-v7a")
if(jar.name.endsWith("natives-arm64-v8a.jar")) outputDir = file("libs/arm64-v8a")
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.matching { it.name.contains("merge") && it.name.contains("JniLibFolders") }.configureEach { packageTask ->
packageTask.dependsOn 'copyAndroidNatives'
}
tasks.register('run', 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_SDK_ROOT"
}
} else {
path = "$System.env.ANDROID_SDK_ROOT"
}
def adb = path + "/platform-tools/adb"
commandLine "$adb", 'shell', 'am', 'start', '-n', 'com.openeggbert/com.openeggbert.android.AndroidLauncher'
}
eclipse.project.name = appName + "-android"

BIN
android/ic_launcher-web.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

54
android/proguard-rules.pro vendored Normal file
View File

@ -0,0 +1,54 @@
# 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
# https://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 android.support.**
-dontwarn com.badlogic.gdx.backends.android.AndroidFragmentApplication
# Needed by the gdx-controllers official extension.
-keep class com.badlogic.gdx.controllers.android.AndroidControllers
# Needed by the Box2D official 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);
}
# You will need the next three lines if you use scene2d for UI or gameplay.
# If you don't use scene2d at all, you can remove or comment out the next line:
-keep public class com.badlogic.gdx.scenes.scene2d.** { *; }
# You will need the next two lines if you use BitmapFont or any scene2d.ui text:
-keep public class com.badlogic.gdx.graphics.g2d.BitmapFont { *; }
# You will probably need this line in most cases:
-keep public class com.badlogic.gdx.graphics.Color { *; }
# These two lines are used with mapping files; see https://developer.android.com/build/shrink-code#retracing
-keepattributes LineNumberTable,SourceFile
-renamesourcefileattribute SourceFile
#Lombok
-dontwarn lombok.Generated

View File

@ -0,0 +1,14 @@
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-rules.pro
# Project target.
target=android-19

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_background_color">#F5A623FF</color>
</resources>

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">open-eggbert</string>
</resources>

View File

@ -0,0 +1,10 @@
<resources>
<style name="GdxTheme" parent="android:Theme">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowFullscreen">true</item>
</style>
</resources>

View File

@ -0,0 +1,22 @@
package com.openeggbert.android;
import android.os.Bundle;
import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
import com.openeggbert.core.main.OpenEggbertApplication;
import com.pixelgamelibrary.api.Pixel;
import com.pixelgamelibrary.backend.libgdx.interfaces.PixelBackendLibGDX;
import com.pixelgamelibrary.backend.libgdx.game.LibGdxGame;
/** Launches the Android application. */
public class AndroidLauncher extends AndroidApplication {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AndroidApplicationConfiguration configuration = new AndroidApplicationConfiguration();
configuration.useImmersiveMode = true; // Recommended, but not required.
Pixel.initBackend(new PixelBackendLibGDX());
initialize(new LibGdxGame(new OpenEggbertApplication().createGame()), configuration);
}
}

BIN
assets/BASIC/BASIC.PNG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

View File

@ -0,0 +1,246 @@
info face="LSans" size=15 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=1,1,1,1 spacing=-2,-2
common lineHeight=18 base=14 scaleW=256 scaleH=128 pages=1 packed=0
page id=0 file="lsans-15.png"
chars count=168
char id=0 x=83 y=85 width=11 height=13 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=0
char id=32 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=0 xadvance=4 page=0 chnl=0
char id=33 x=184 y=17 width=5 height=13 xoffset=0 yoffset=2 xadvance=5 page=0 chnl=0
char id=34 x=27 y=85 width=7 height=5 xoffset=-1 yoffset=2 xadvance=5 page=0 chnl=0
char id=35 x=189 y=17 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=36 x=125 y=17 width=10 height=15 xoffset=-1 yoffset=1 xadvance=8 page=0 chnl=0
char id=37 x=199 y=17 width=15 height=13 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=0
char id=38 x=10 y=72 width=12 height=12 xoffset=-1 yoffset=3 xadvance=10 page=0 chnl=0
char id=39 x=34 y=85 width=5 height=5 xoffset=-1 yoffset=2 xadvance=3 page=0 chnl=0
char id=40 x=24 y=0 width=7 height=16 xoffset=-1 yoffset=2 xadvance=5 page=0 chnl=0
char id=41 x=31 y=0 width=7 height=16 xoffset=-1 yoffset=2 xadvance=5 page=0 chnl=0
char id=42 x=0 y=85 width=8 height=7 xoffset=-1 yoffset=2 xadvance=6 page=0 chnl=0
char id=43 x=57 y=72 width=11 height=11 xoffset=-1 yoffset=3 xadvance=9 page=0 chnl=0
char id=44 x=251 y=72 width=4 height=6 xoffset=0 yoffset=11 xadvance=4 page=0 chnl=0
char id=45 x=50 y=85 width=7 height=4 xoffset=-1 yoffset=8 xadvance=5 page=0 chnl=0
char id=46 x=57 y=85 width=4 height=4 xoffset=0 yoffset=11 xadvance=4 page=0 chnl=0
char id=47 x=214 y=17 width=6 height=13 xoffset=-1 yoffset=2 xadvance=4 page=0 chnl=0
char id=48 x=220 y=17 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=49 x=230 y=17 width=9 height=13 xoffset=0 yoffset=2 xadvance=8 page=0 chnl=0
char id=50 x=239 y=17 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=51 x=0 y=33 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=52 x=10 y=33 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=53 x=20 y=33 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=54 x=30 y=33 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=55 x=40 y=33 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=56 x=50 y=33 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=57 x=60 y=33 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=58 x=68 y=72 width=4 height=10 xoffset=0 yoffset=5 xadvance=4 page=0 chnl=0
char id=59 x=22 y=72 width=4 height=12 xoffset=0 yoffset=5 xadvance=4 page=0 chnl=0
char id=60 x=229 y=72 width=11 height=9 xoffset=-1 yoffset=4 xadvance=9 page=0 chnl=0
char id=61 x=8 y=85 width=11 height=7 xoffset=-1 yoffset=6 xadvance=9 page=0 chnl=0
char id=62 x=240 y=72 width=11 height=9 xoffset=-1 yoffset=4 xadvance=9 page=0 chnl=0
char id=63 x=70 y=33 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=64 x=135 y=17 width=15 height=15 xoffset=0 yoffset=2 xadvance=15 page=0 chnl=0
char id=65 x=80 y=33 width=11 height=13 xoffset=-1 yoffset=2 xadvance=9 page=0 chnl=0
char id=66 x=91 y=33 width=11 height=13 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=0
char id=67 x=102 y=33 width=13 height=13 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=0
char id=68 x=115 y=33 width=12 height=13 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=0
char id=69 x=127 y=33 width=11 height=13 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=0
char id=70 x=138 y=33 width=10 height=13 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=0
char id=71 x=148 y=33 width=12 height=13 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=0
char id=72 x=160 y=33 width=10 height=13 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=0
char id=73 x=249 y=17 width=4 height=13 xoffset=0 yoffset=2 xadvance=3 page=0 chnl=0
char id=74 x=170 y=33 width=8 height=13 xoffset=-1 yoffset=2 xadvance=7 page=0 chnl=0
char id=75 x=178 y=33 width=11 height=13 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=0
char id=76 x=189 y=33 width=9 height=13 xoffset=0 yoffset=2 xadvance=8 page=0 chnl=0
char id=77 x=198 y=33 width=11 height=13 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=0
char id=78 x=209 y=33 width=10 height=13 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=0
char id=79 x=219 y=33 width=14 height=13 xoffset=-1 yoffset=2 xadvance=12 page=0 chnl=0
char id=80 x=233 y=33 width=11 height=13 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=0
char id=81 x=38 y=0 width=14 height=16 xoffset=-1 yoffset=2 xadvance=12 page=0 chnl=0
char id=82 x=0 y=46 width=12 height=13 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=0
char id=83 x=12 y=46 width=12 height=13 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=0
char id=84 x=244 y=33 width=11 height=13 xoffset=-1 yoffset=2 xadvance=9 page=0 chnl=0
char id=85 x=24 y=46 width=10 height=13 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=0
char id=86 x=34 y=46 width=11 height=13 xoffset=-1 yoffset=2 xadvance=9 page=0 chnl=0
char id=87 x=45 y=46 width=17 height=13 xoffset=-1 yoffset=2 xadvance=15 page=0 chnl=0
char id=88 x=62 y=46 width=11 height=13 xoffset=-1 yoffset=2 xadvance=9 page=0 chnl=0
char id=89 x=73 y=46 width=11 height=13 xoffset=-1 yoffset=2 xadvance=9 page=0 chnl=0
char id=90 x=84 y=46 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=91 x=52 y=0 width=5 height=16 xoffset=0 yoffset=2 xadvance=4 page=0 chnl=0
char id=92 x=94 y=46 width=6 height=13 xoffset=-1 yoffset=2 xadvance=4 page=0 chnl=0
char id=93 x=57 y=0 width=5 height=16 xoffset=-1 yoffset=2 xadvance=4 page=0 chnl=0
char id=94 x=19 y=85 width=8 height=7 xoffset=-1 yoffset=2 xadvance=5 page=0 chnl=0
char id=95 x=71 y=85 width=12 height=3 xoffset=-2 yoffset=15 xadvance=8 page=0 chnl=0
char id=96 x=61 y=85 width=6 height=4 xoffset=-1 yoffset=2 xadvance=5 page=0 chnl=0
char id=97 x=72 y=72 width=10 height=10 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=0
char id=98 x=100 y=46 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=99 x=82 y=72 width=10 height=10 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=0
char id=100 x=110 y=46 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=101 x=92 y=72 width=10 height=10 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=0
char id=102 x=120 y=46 width=7 height=13 xoffset=-1 yoffset=2 xadvance=4 page=0 chnl=0
char id=103 x=127 y=46 width=10 height=13 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=0
char id=104 x=137 y=46 width=9 height=13 xoffset=0 yoffset=2 xadvance=8 page=0 chnl=0
char id=105 x=146 y=46 width=5 height=13 xoffset=-1 yoffset=2 xadvance=3 page=0 chnl=0
char id=106 x=62 y=0 width=6 height=16 xoffset=-2 yoffset=2 xadvance=3 page=0 chnl=0
char id=107 x=151 y=46 width=10 height=13 xoffset=-1 yoffset=2 xadvance=7 page=0 chnl=0
char id=108 x=161 y=46 width=5 height=13 xoffset=-1 yoffset=2 xadvance=3 page=0 chnl=0
char id=109 x=102 y=72 width=13 height=10 xoffset=0 yoffset=5 xadvance=13 page=0 chnl=0
char id=110 x=115 y=72 width=10 height=10 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=0
char id=111 x=125 y=72 width=10 height=10 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=0
char id=112 x=166 y=46 width=10 height=13 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=0
char id=113 x=176 y=46 width=10 height=13 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=0
char id=114 x=135 y=72 width=6 height=10 xoffset=0 yoffset=5 xadvance=5 page=0 chnl=0
char id=115 x=141 y=72 width=10 height=10 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=0
char id=116 x=26 y=72 width=6 height=12 xoffset=-1 yoffset=3 xadvance=4 page=0 chnl=0
char id=117 x=151 y=72 width=10 height=10 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=0
char id=118 x=161 y=72 width=9 height=10 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=0
char id=119 x=170 y=72 width=15 height=10 xoffset=-2 yoffset=5 xadvance=11 page=0 chnl=0
char id=120 x=185 y=72 width=9 height=10 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=0
char id=121 x=186 y=46 width=9 height=13 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=0
char id=122 x=194 y=72 width=10 height=10 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=0
char id=123 x=68 y=0 width=7 height=16 xoffset=-1 yoffset=2 xadvance=5 page=0 chnl=0
char id=124 x=75 y=0 width=4 height=16 xoffset=0 yoffset=2 xadvance=3 page=0 chnl=0
char id=125 x=79 y=0 width=7 height=16 xoffset=-1 yoffset=2 xadvance=5 page=0 chnl=0
char id=126 x=39 y=85 width=11 height=5 xoffset=-1 yoffset=6 xadvance=9 page=0 chnl=0
char id=160 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=0 xadvance=4 page=0 chnl=0
char id=161 x=32 y=72 width=5 height=12 xoffset=0 yoffset=5 xadvance=5 page=0 chnl=0
char id=162 x=195 y=46 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=163 x=205 y=46 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=164 x=204 y=72 width=10 height=10 xoffset=-1 yoffset=4 xadvance=8 page=0 chnl=0
char id=165 x=215 y=46 width=12 height=13 xoffset=-2 yoffset=2 xadvance=8 page=0 chnl=0
char id=166 x=86 y=0 width=4 height=16 xoffset=0 yoffset=2 xadvance=3 page=0 chnl=0
char id=181 x=227 y=46 width=10 height=13 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=0
char id=183 x=67 y=85 width=4 height=4 xoffset=1 yoffset=7 xadvance=5 page=0 chnl=0
char id=191 x=37 y=72 width=10 height=12 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=0
char id=192 x=90 y=0 width=11 height=16 xoffset=-1 yoffset=-1 xadvance=9 page=0 chnl=0
char id=193 x=101 y=0 width=11 height=16 xoffset=-1 yoffset=-1 xadvance=9 page=0 chnl=0
char id=194 x=112 y=0 width=11 height=16 xoffset=-1 yoffset=-1 xadvance=9 page=0 chnl=0
char id=195 x=123 y=0 width=11 height=16 xoffset=-1 yoffset=-1 xadvance=9 page=0 chnl=0
char id=196 x=134 y=0 width=11 height=16 xoffset=-1 yoffset=-1 xadvance=9 page=0 chnl=0
char id=197 x=0 y=0 width=11 height=17 xoffset=-1 yoffset=-2 xadvance=9 page=0 chnl=0
char id=198 x=237 y=46 width=17 height=13 xoffset=-1 yoffset=2 xadvance=15 page=0 chnl=0
char id=199 x=11 y=0 width=13 height=17 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=0
char id=200 x=145 y=0 width=11 height=16 xoffset=0 yoffset=-1 xadvance=10 page=0 chnl=0
char id=201 x=156 y=0 width=11 height=16 xoffset=0 yoffset=-1 xadvance=10 page=0 chnl=0
char id=202 x=167 y=0 width=11 height=16 xoffset=0 yoffset=-1 xadvance=10 page=0 chnl=0
char id=203 x=178 y=0 width=11 height=16 xoffset=0 yoffset=-1 xadvance=10 page=0 chnl=0
char id=204 x=189 y=0 width=6 height=16 xoffset=-2 yoffset=-1 xadvance=3 page=0 chnl=0
char id=205 x=195 y=0 width=7 height=16 xoffset=0 yoffset=-1 xadvance=3 page=0 chnl=0
char id=206 x=202 y=0 width=8 height=16 xoffset=-2 yoffset=-1 xadvance=3 page=0 chnl=0
char id=207 x=210 y=0 width=8 height=16 xoffset=-2 yoffset=-1 xadvance=3 page=0 chnl=0
char id=208 x=0 y=59 width=13 height=13 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=0
char id=209 x=218 y=0 width=10 height=16 xoffset=0 yoffset=-1 xadvance=10 page=0 chnl=0
char id=210 x=228 y=0 width=14 height=16 xoffset=-1 yoffset=-1 xadvance=12 page=0 chnl=0
char id=211 x=0 y=17 width=14 height=16 xoffset=-1 yoffset=-1 xadvance=12 page=0 chnl=0
char id=212 x=14 y=17 width=14 height=16 xoffset=-1 yoffset=-1 xadvance=12 page=0 chnl=0
char id=213 x=28 y=17 width=14 height=16 xoffset=-1 yoffset=-1 xadvance=12 page=0 chnl=0
char id=214 x=42 y=17 width=14 height=16 xoffset=-1 yoffset=-1 xadvance=12 page=0 chnl=0
char id=216 x=150 y=17 width=14 height=15 xoffset=-1 yoffset=1 xadvance=12 page=0 chnl=0
char id=217 x=242 y=0 width=10 height=16 xoffset=0 yoffset=-1 xadvance=10 page=0 chnl=0
char id=218 x=56 y=17 width=10 height=16 xoffset=0 yoffset=-1 xadvance=10 page=0 chnl=0
char id=219 x=66 y=17 width=10 height=16 xoffset=0 yoffset=-1 xadvance=10 page=0 chnl=0
char id=220 x=76 y=17 width=10 height=16 xoffset=0 yoffset=-1 xadvance=10 page=0 chnl=0
char id=221 x=86 y=17 width=11 height=16 xoffset=-1 yoffset=-1 xadvance=9 page=0 chnl=0
char id=222 x=13 y=59 width=11 height=13 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=0
char id=223 x=24 y=59 width=10 height=13 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=0
char id=224 x=34 y=59 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=225 x=44 y=59 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=226 x=54 y=59 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=227 x=64 y=59 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=228 x=74 y=59 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=229 x=164 y=17 width=10 height=15 xoffset=-1 yoffset=0 xadvance=8 page=0 chnl=0
char id=230 x=214 y=72 width=15 height=10 xoffset=-1 yoffset=5 xadvance=13 page=0 chnl=0
char id=231 x=174 y=17 width=10 height=14 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=0
char id=232 x=84 y=59 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=233 x=94 y=59 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=234 x=104 y=59 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=235 x=114 y=59 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=236 x=124 y=59 width=6 height=13 xoffset=-2 yoffset=2 xadvance=3 page=0 chnl=0
char id=237 x=130 y=59 width=7 height=13 xoffset=-1 yoffset=2 xadvance=3 page=0 chnl=0
char id=238 x=137 y=59 width=8 height=13 xoffset=-2 yoffset=2 xadvance=3 page=0 chnl=0
char id=239 x=145 y=59 width=8 height=13 xoffset=-1 yoffset=2 xadvance=3 page=0 chnl=0
char id=240 x=153 y=59 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=241 x=163 y=59 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=242 x=173 y=59 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=243 x=183 y=59 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=244 x=193 y=59 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=245 x=203 y=59 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=246 x=213 y=59 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=248 x=47 y=72 width=10 height=12 xoffset=-1 yoffset=4 xadvance=8 page=0 chnl=0
char id=249 x=223 y=59 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=250 x=233 y=59 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=251 x=243 y=59 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=252 x=0 y=72 width=10 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=253 x=97 y=17 width=9 height=16 xoffset=-1 yoffset=2 xadvance=7 page=0 chnl=0
char id=254 x=106 y=17 width=10 height=16 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=255 x=116 y=17 width=9 height=16 xoffset=-1 yoffset=2 xadvance=7 page=0 chnl=0
kernings count=73
kerning first=70 second=46 amount=-2
kerning first=84 second=121 amount=-1
kerning first=121 second=44 amount=-1
kerning first=86 second=58 amount=-1
kerning first=89 second=101 amount=-1
kerning first=89 second=46 amount=-2
kerning first=84 second=45 amount=-1
kerning first=119 second=44 amount=-1
kerning first=89 second=59 amount=-1
kerning first=84 second=58 amount=-2
kerning first=87 second=46 amount=-1
kerning first=65 second=84 amount=-1
kerning first=84 second=105 amount=-1
kerning first=86 second=97 amount=-1
kerning first=84 second=97 amount=-2
kerning first=76 second=87 amount=-1
kerning first=65 second=89 amount=-1
kerning first=76 second=32 amount=-1
kerning first=76 second=121 amount=-1
kerning first=89 second=111 amount=-1
kerning first=121 second=46 amount=-1
kerning first=119 second=46 amount=-1
kerning first=84 second=115 amount=-2
kerning first=76 second=84 amount=-1
kerning first=65 second=86 amount=-1
kerning first=86 second=65 amount=-1
kerning first=86 second=44 amount=-1
kerning first=84 second=65 amount=-1
kerning first=84 second=99 amount=-2
kerning first=89 second=45 amount=-1
kerning first=84 second=44 amount=-2
kerning first=76 second=89 amount=-1
kerning first=89 second=113 amount=-1
kerning first=89 second=58 amount=-1
kerning first=86 second=117 amount=-1
kerning first=80 second=65 amount=-1
kerning first=89 second=105 amount=-1
kerning first=80 second=44 amount=-2
kerning first=89 second=118 amount=-1
kerning first=84 second=117 amount=-1
kerning first=89 second=97 amount=-1
kerning first=76 second=86 amount=-1
kerning first=118 second=44 amount=-1
kerning first=86 second=101 amount=-1
kerning first=87 second=97 amount=-1
kerning first=86 second=46 amount=-1
kerning first=86 second=114 amount=-1
kerning first=86 second=59 amount=-1
kerning first=84 second=101 amount=-2
kerning first=84 second=46 amount=-2
kerning first=32 second=65 amount=-1
kerning first=84 second=114 amount=-1
kerning first=114 second=44 amount=-1
kerning first=84 second=59 amount=-2
kerning first=70 second=65 amount=-1
kerning first=80 second=46 amount=-2
kerning first=70 second=44 amount=-2
kerning first=84 second=119 amount=-1
kerning first=89 second=65 amount=-1
kerning first=86 second=111 amount=-1
kerning first=89 second=44 amount=-2
kerning first=89 second=112 amount=-1
kerning first=87 second=65 amount=-1
kerning first=118 second=46 amount=-1
kerning first=84 second=111 amount=-2
kerning first=87 second=44 amount=-1
kerning first=49 second=49 amount=-1
kerning first=89 second=117 amount=-1
kerning first=114 second=46 amount=-1
kerning first=86 second=121 amount=-1
kerning first=65 second=87 amount=-1
kerning first=65 second=32 amount=-1
kerning first=86 second=45 amount=-1

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

102
assets/data/default.fnt Normal file
View File

@ -0,0 +1,102 @@
info face="Droid Sans" size=17 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=1,1
common lineHeight=20 base=18 scaleW=256 scaleH=128 pages=1 packed=0
page id=0 file="default.png"
chars count=96
char id=32 x=0 y=0 width=0 height=0 xoffset=0 yoffset=16 xadvance=4 page=0 chnl=0
char id=124 x=0 y=0 width=6 height=20 xoffset=1 yoffset=3 xadvance=9 page=0 chnl=0
char id=106 x=6 y=0 width=9 height=20 xoffset=-4 yoffset=3 xadvance=4 page=0 chnl=0
char id=81 x=15 y=0 width=15 height=19 xoffset=-2 yoffset=3 xadvance=12 page=0 chnl=0
char id=74 x=30 y=0 width=11 height=19 xoffset=-5 yoffset=3 xadvance=4 page=0 chnl=0
char id=125 x=41 y=0 width=10 height=18 xoffset=-3 yoffset=3 xadvance=6 page=0 chnl=0
char id=123 x=51 y=0 width=10 height=18 xoffset=-3 yoffset=3 xadvance=6 page=0 chnl=0
char id=93 x=61 y=0 width=8 height=18 xoffset=-3 yoffset=3 xadvance=5 page=0 chnl=0
char id=91 x=69 y=0 width=8 height=18 xoffset=-2 yoffset=3 xadvance=5 page=0 chnl=0
char id=41 x=77 y=0 width=9 height=18 xoffset=-3 yoffset=3 xadvance=5 page=0 chnl=0
char id=40 x=86 y=0 width=9 height=18 xoffset=-3 yoffset=3 xadvance=5 page=0 chnl=0
char id=64 x=95 y=0 width=18 height=17 xoffset=-3 yoffset=3 xadvance=14 page=0 chnl=0
char id=121 x=113 y=0 width=13 height=17 xoffset=-3 yoffset=6 xadvance=8 page=0 chnl=0
char id=113 x=126 y=0 width=13 height=17 xoffset=-3 yoffset=6 xadvance=9 page=0 chnl=0
char id=112 x=139 y=0 width=13 height=17 xoffset=-2 yoffset=6 xadvance=9 page=0 chnl=0
char id=103 x=152 y=0 width=13 height=17 xoffset=-3 yoffset=6 xadvance=8 page=0 chnl=0
char id=38 x=165 y=0 width=16 height=16 xoffset=-3 yoffset=3 xadvance=11 page=0 chnl=0
char id=37 x=181 y=0 width=18 height=16 xoffset=-3 yoffset=3 xadvance=14 page=0 chnl=0
char id=36 x=199 y=0 width=12 height=16 xoffset=-2 yoffset=3 xadvance=9 page=0 chnl=0
char id=63 x=211 y=0 width=11 height=16 xoffset=-3 yoffset=3 xadvance=7 page=0 chnl=0
char id=33 x=222 y=0 width=7 height=16 xoffset=-2 yoffset=3 xadvance=4 page=0 chnl=0
char id=48 x=229 y=0 width=13 height=16 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=57 x=242 y=0 width=13 height=16 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=56 x=0 y=20 width=13 height=16 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=54 x=13 y=20 width=13 height=16 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=53 x=26 y=20 width=12 height=16 xoffset=-2 yoffset=3 xadvance=9 page=0 chnl=0
char id=51 x=38 y=20 width=13 height=16 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=100 x=51 y=20 width=13 height=16 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=98 x=64 y=20 width=13 height=16 xoffset=-2 yoffset=3 xadvance=9 page=0 chnl=0
char id=85 x=77 y=20 width=14 height=16 xoffset=-2 yoffset=3 xadvance=11 page=0 chnl=0
char id=83 x=91 y=20 width=13 height=16 xoffset=-3 yoffset=3 xadvance=8 page=0 chnl=0
char id=79 x=104 y=20 width=15 height=16 xoffset=-2 yoffset=3 xadvance=12 page=0 chnl=0
char id=71 x=119 y=20 width=14 height=16 xoffset=-2 yoffset=3 xadvance=11 page=0 chnl=0
char id=67 x=133 y=20 width=13 height=16 xoffset=-2 yoffset=3 xadvance=10 page=0 chnl=0
char id=127 x=146 y=20 width=12 height=15 xoffset=-2 yoffset=3 xadvance=10 page=0 chnl=0
char id=35 x=158 y=20 width=15 height=15 xoffset=-3 yoffset=3 xadvance=10 page=0 chnl=0
char id=92 x=173 y=20 width=11 height=15 xoffset=-3 yoffset=3 xadvance=6 page=0 chnl=0
char id=47 x=184 y=20 width=11 height=15 xoffset=-3 yoffset=3 xadvance=6 page=0 chnl=0
char id=59 x=195 y=20 width=8 height=15 xoffset=-3 yoffset=6 xadvance=4 page=0 chnl=0
char id=55 x=203 y=20 width=13 height=15 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=52 x=216 y=20 width=14 height=15 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=50 x=230 y=20 width=13 height=15 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=49 x=243 y=20 width=9 height=15 xoffset=-2 yoffset=3 xadvance=9 page=0 chnl=0
char id=116 x=0 y=36 width=10 height=15 xoffset=-3 yoffset=4 xadvance=5 page=0 chnl=0
char id=108 x=10 y=36 width=6 height=15 xoffset=-2 yoffset=3 xadvance=4 page=0 chnl=0
char id=107 x=16 y=36 width=12 height=15 xoffset=-2 yoffset=3 xadvance=8 page=0 chnl=0
char id=105 x=28 y=36 width=7 height=15 xoffset=-2 yoffset=3 xadvance=4 page=0 chnl=0
char id=104 x=35 y=36 width=12 height=15 xoffset=-2 yoffset=3 xadvance=10 page=0 chnl=0
char id=102 x=47 y=36 width=11 height=15 xoffset=-3 yoffset=3 xadvance=5 page=0 chnl=0
char id=90 x=58 y=36 width=13 height=15 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=89 x=71 y=36 width=13 height=15 xoffset=-3 yoffset=3 xadvance=8 page=0 chnl=0
char id=88 x=84 y=36 width=14 height=15 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=87 x=98 y=36 width=19 height=15 xoffset=-3 yoffset=3 xadvance=15 page=0 chnl=0
char id=86 x=117 y=36 width=14 height=15 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=84 x=131 y=36 width=13 height=15 xoffset=-3 yoffset=3 xadvance=8 page=0 chnl=0
char id=82 x=144 y=36 width=13 height=15 xoffset=-2 yoffset=3 xadvance=10 page=0 chnl=0
char id=80 x=157 y=36 width=12 height=15 xoffset=-2 yoffset=3 xadvance=9 page=0 chnl=0
char id=78 x=169 y=36 width=14 height=15 xoffset=-2 yoffset=3 xadvance=12 page=0 chnl=0
char id=77 x=183 y=36 width=17 height=15 xoffset=-2 yoffset=3 xadvance=14 page=0 chnl=0
char id=76 x=200 y=36 width=11 height=15 xoffset=-2 yoffset=3 xadvance=8 page=0 chnl=0
char id=75 x=211 y=36 width=13 height=15 xoffset=-2 yoffset=3 xadvance=9 page=0 chnl=0
char id=73 x=224 y=36 width=10 height=15 xoffset=-3 yoffset=3 xadvance=5 page=0 chnl=0
char id=72 x=234 y=36 width=14 height=15 xoffset=-2 yoffset=3 xadvance=11 page=0 chnl=0
char id=70 x=0 y=51 width=11 height=15 xoffset=-2 yoffset=3 xadvance=8 page=0 chnl=0
char id=69 x=11 y=51 width=11 height=15 xoffset=-2 yoffset=3 xadvance=8 page=0 chnl=0
char id=68 x=22 y=51 width=14 height=15 xoffset=-2 yoffset=3 xadvance=11 page=0 chnl=0
char id=66 x=36 y=51 width=13 height=15 xoffset=-2 yoffset=3 xadvance=10 page=0 chnl=0
char id=65 x=49 y=51 width=15 height=15 xoffset=-3 yoffset=3 xadvance=10 page=0 chnl=0
char id=58 x=64 y=51 width=7 height=13 xoffset=-2 yoffset=6 xadvance=4 page=0 chnl=0
char id=117 x=71 y=51 width=12 height=13 xoffset=-2 yoffset=6 xadvance=10 page=0 chnl=0
char id=115 x=83 y=51 width=11 height=13 xoffset=-3 yoffset=6 xadvance=7 page=0 chnl=0
char id=111 x=94 y=51 width=13 height=13 xoffset=-3 yoffset=6 xadvance=9 page=0 chnl=0
char id=101 x=107 y=51 width=13 height=13 xoffset=-3 yoffset=6 xadvance=9 page=0 chnl=0
char id=99 x=120 y=51 width=12 height=13 xoffset=-3 yoffset=6 xadvance=7 page=0 chnl=0
char id=97 x=132 y=51 width=12 height=13 xoffset=-3 yoffset=6 xadvance=9 page=0 chnl=0
char id=60 x=144 y=51 width=13 height=12 xoffset=-3 yoffset=5 xadvance=9 page=0 chnl=0
char id=122 x=157 y=51 width=11 height=12 xoffset=-3 yoffset=6 xadvance=7 page=0 chnl=0
char id=120 x=168 y=51 width=13 height=12 xoffset=-3 yoffset=6 xadvance=8 page=0 chnl=0
char id=119 x=181 y=51 width=17 height=12 xoffset=-3 yoffset=6 xadvance=12 page=0 chnl=0
char id=118 x=198 y=51 width=13 height=12 xoffset=-3 yoffset=6 xadvance=8 page=0 chnl=0
char id=114 x=211 y=51 width=10 height=12 xoffset=-2 yoffset=6 xadvance=6 page=0 chnl=0
char id=110 x=221 y=51 width=12 height=12 xoffset=-2 yoffset=6 xadvance=10 page=0 chnl=0
char id=109 x=233 y=51 width=17 height=12 xoffset=-2 yoffset=6 xadvance=15 page=0 chnl=0
char id=94 x=0 y=66 width=13 height=11 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=62 x=13 y=66 width=13 height=11 xoffset=-3 yoffset=5 xadvance=9 page=0 chnl=0
char id=42 x=26 y=66 width=13 height=10 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=43 x=39 y=66 width=13 height=10 xoffset=-3 yoffset=6 xadvance=9 page=0 chnl=0
char id=61 x=52 y=66 width=13 height=8 xoffset=-3 yoffset=7 xadvance=9 page=0 chnl=0
char id=39 x=65 y=66 width=6 height=8 xoffset=-2 yoffset=3 xadvance=3 page=0 chnl=0
char id=34 x=71 y=66 width=9 height=8 xoffset=-2 yoffset=3 xadvance=6 page=0 chnl=0
char id=44 x=80 y=66 width=8 height=7 xoffset=-3 yoffset=14 xadvance=4 page=0 chnl=0
char id=126 x=88 y=66 width=13 height=6 xoffset=-3 yoffset=8 xadvance=9 page=0 chnl=0
char id=46 x=101 y=66 width=7 height=6 xoffset=-2 yoffset=13 xadvance=4 page=0 chnl=0
char id=96 x=108 y=66 width=8 height=6 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=0
char id=45 x=116 y=66 width=9 height=5 xoffset=-3 yoffset=10 xadvance=5 page=0 chnl=0
char id=95 x=125 y=66 width=13 height=4 xoffset=-4 yoffset=17 xadvance=6 page=0 chnl=0
kernings count=-1

BIN
assets/data/default.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

200
assets/data/uiskin.atlas Normal file
View File

@ -0,0 +1,200 @@
uiskin.png
size: 256,128
format: RGBA8888
filter: Linear,Linear
repeat: none
check-off
rotate: false
xy: 11, 5
size: 14, 14
orig: 14, 14
offset: 0, 0
index: -1
textfield
rotate: false
xy: 11, 5
size: 14, 14
split: 3, 3, 3, 3
orig: 14, 14
offset: 0, 0
index: -1
check-on
rotate: false
xy: 125, 35
size: 14, 14
orig: 14, 14
offset: 0, 0
index: -1
cursor
rotate: false
xy: 23, 1
size: 3, 3
split: 1, 1, 1, 1
orig: 3, 3
offset: 0, 0
index: -1
default
rotate: false
xy: 1, 50
size: 254, 77
orig: 254, 77
offset: 0, 0
index: -1
default-pane
rotate: false
xy: 11, 1
size: 5, 3
split: 1, 1, 1, 1
orig: 5, 3
offset: 0, 0
index: -1
default-rect-pad
rotate: false
xy: 11, 1
size: 5, 3
split: 1, 1, 1, 1
orig: 5, 3
offset: 0, 0
index: -1
default-pane-noborder
rotate: false
xy: 170, 44
size: 1, 1
split: 0, 0, 0, 0
orig: 1, 1
offset: 0, 0
index: -1
default-rect
rotate: false
xy: 38, 25
size: 3, 3
split: 1, 1, 1, 1
orig: 3, 3
offset: 0, 0
index: -1
default-rect-down
rotate: false
xy: 170, 46
size: 3, 3
split: 1, 1, 1, 1
orig: 3, 3
offset: 0, 0
index: -1
default-round
rotate: false
xy: 112, 29
size: 12, 20
split: 5, 5, 5, 4
pad: 4, 4, 1, 1
orig: 12, 20
offset: 0, 0
index: -1
default-round-down
rotate: false
xy: 99, 29
size: 12, 20
split: 5, 5, 5, 4
pad: 4, 4, 1, 1
orig: 12, 20
offset: 0, 0
index: -1
default-round-large
rotate: false
xy: 57, 29
size: 20, 20
split: 5, 5, 5, 4
orig: 20, 20
offset: 0, 0
index: -1
default-scroll
rotate: false
xy: 78, 29
size: 20, 20
split: 2, 2, 2, 2
orig: 20, 20
offset: 0, 0
index: -1
default-select
rotate: false
xy: 29, 29
size: 27, 20
split: 4, 14, 4, 4
orig: 27, 20
offset: 0, 0
index: -1
default-select-selection
rotate: false
xy: 26, 16
size: 3, 3
split: 1, 1, 1, 1
orig: 3, 3
offset: 0, 0
index: -1
default-slider
rotate: false
xy: 29, 20
size: 8, 8
split: 2, 2, 2, 2
orig: 8, 8
offset: 0, 0
index: -1
default-slider-knob
rotate: false
xy: 1, 1
size: 9, 18
orig: 9, 18
offset: 0, 0
index: -1
default-splitpane
rotate: false
xy: 17, 1
size: 5, 3
split: 0, 5, 0, 0
orig: 5, 3
offset: 0, 0
index: -1
default-splitpane-vertical
rotate: false
xy: 125, 29
size: 3, 5
split: 0, 0, 0, 5
orig: 3, 5
offset: 0, 0
index: -1
default-window
rotate: false
xy: 1, 20
size: 27, 29
split: 4, 3, 20, 3
orig: 27, 29
offset: 0, 0
index: -1
selection
rotate: false
xy: 174, 48
size: 1, 1
orig: 1, 1
offset: 0, 0
index: -1
tree-minus
rotate: false
xy: 140, 35
size: 14, 14
orig: 14, 14
offset: 0, 0
index: -1
tree-plus
rotate: false
xy: 155, 35
size: 14, 14
orig: 14, 14
offset: 0, 0
index: -1
white
rotate: false
xy: 129, 31
size: 3, 3
orig: 3, 3
offset: 0, 0
index: -1

71
assets/data/uiskin.json Normal file
View File

@ -0,0 +1,71 @@
{
BitmapFont: { default-font: { file: default.fnt } },
Color: {
green: { a: 1, b: 0, g: 1, r: 0 },
white: { a: 1, b: 1, g: 1, r: 1 },
red: { a: 1, b: 0, g: 0, r: 1 },
black: { a: 1, b: 0, g: 0, r: 0 },
gray: { a: 1, b: 0.8, g: 0.8, r: 0.8 },
},
TintedDrawable: {
dialogDim: { name: white, color: { r: 0, g: 0, b: 0, a: 0.45 } },
},
ButtonStyle: {
default: { down: default-round-down, up: default-round, disabled: default-round },
toggle: { parent: default, checked: default-round-down }
},
TextButtonStyle: {
default: { parent: default, font: default-font, fontColor: white, disabledFontColor: gray },
toggle: { parent: default, checked: default-round-down, downFontColor: red }
},
ScrollPaneStyle: {
default: { vScroll: default-scroll, hScrollKnob: default-round-large, background: default-rect, hScroll: default-scroll, vScrollKnob: default-round-large }
},
SelectBoxStyle: {
default: {
font: default-font, fontColor: white, background: default-select,
scrollStyle: default,
listStyle: { font: default-font, selection: default-select-selection }
}
},
SplitPaneStyle: {
default-vertical: { handle: default-splitpane-vertical },
default-horizontal: { handle: default-splitpane }
},
WindowStyle: {
default: { titleFont: default-font, background: default-window, titleFontColor: white },
dialog: { parent: default, stageBackground: dialogDim }
},
ProgressBarStyle: {
default-horizontal: { background: default-slider, knob: default-slider-knob },
default-vertical: { background: default-slider, knob: default-round-large }
},
SliderStyle: {
default-horizontal: { parent: default-horizontal },
default-vertical: { parent: default-vertical }
},
LabelStyle: {
default: { font: default-font, fontColor: white }
},
TextFieldStyle: {
default: { selection: selection, background: textfield, font: default-font, fontColor: white, cursor: cursor }
},
CheckBoxStyle: {
default: { checkboxOn: check-on, checkboxOff: check-off, font: default-font, fontColor: white }
},
ListStyle: {
default: { fontColorUnselected: white, selection: selection, fontColorSelected: white, font: default-font }
},
TouchpadStyle: {
default: { background: default-pane, knob: default-round-large }
},
TreeStyle: {
default: { minus: tree-minus, plus: tree-plus, selection: default-select-selection }
},
TextTooltipStyle: {
default: {
label: { font: default-font, fontColor: white },
background: default-pane, wrapWidth: 150
}
},
}

BIN
assets/data/uiskin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1 @@
Subproject commit 257e5ee2f8dd8c1c68c7366f76bb3eb01b0de976

BIN
assets/libgdx.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

198
assets/ui/font-list.fnt Normal file
View File

@ -0,0 +1,198 @@
info face="font-list" size=12 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=1 aa=2 padding=1,1,1,1 spacing=0,0
common lineHeight=15 base=11 scaleW=505 scaleH=30 pages=1 packed=0 alphaChnl=0 redChnl=0 greenChnl=0 blueChnl=0
page id=0 file="font-list.png"
chars count=193
char id=0 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=11 xadvance=3 page=0 chnl=0
char id=32 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=-1 xadvance=3 page=0 chnl=0
char id=33 x=391 y=14 width=2 height=7 xoffset=-1 yoffset=4 xadvance=3 page=0 chnl=0
char id=34 x=248 y=23 width=3 height=3 xoffset=-1 yoffset=4 xadvance=5 page=0 chnl=0
char id=35 x=466 y=14 width=6 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=36 x=9 y=2 width=5 height=10 xoffset=-1 yoffset=3 xadvance=7 page=0 chnl=0
char id=37 x=490 y=14 width=6 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=38 x=450 y=14 width=7 height=7 xoffset=-1 yoffset=4 xadvance=8 page=0 chnl=0
char id=39 x=267 y=23 width=2 height=3 xoffset=-1 yoffset=4 xadvance=3 page=0 chnl=0
char id=40 x=126 y=2 width=3 height=9 xoffset=-1 yoffset=3 xadvance=4 page=0 chnl=0
char id=41 x=131 y=2 width=2 height=9 xoffset=-1 yoffset=3 xadvance=4 page=0 chnl=0
char id=42 x=46 y=23 width=4 height=5 xoffset=-1 yoffset=3 xadvance=5 page=0 chnl=0
char id=43 x=73 y=23 width=6 height=5 xoffset=-1 yoffset=6 xadvance=7 page=0 chnl=0
char id=44 x=263 y=23 width=2 height=3 xoffset=-1 yoffset=9 xadvance=3 page=0 chnl=0
char id=45 x=306 y=23 width=4 height=1 xoffset=-1 yoffset=8 xadvance=5 page=0 chnl=0
char id=46 x=296 y=23 width=2 height=1 xoffset=-1 yoffset=10 xadvance=3 page=0 chnl=0
char id=47 x=354 y=2 width=4 height=8 xoffset=-1 yoffset=4 xadvance=5 page=0 chnl=0
char id=48 x=383 y=14 width=6 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=49 x=317 y=14 width=3 height=7 xoffset=0 yoffset=4 xadvance=7 page=0 chnl=0
char id=50 x=322 y=14 width=5 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=51 x=329 y=14 width=5 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=52 x=336 y=14 width=6 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=53 x=344 y=14 width=6 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=54 x=352 y=14 width=6 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=55 x=360 y=14 width=5 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=56 x=367 y=14 width=6 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=57 x=375 y=14 width=6 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=58 x=201 y=23 width=2 height=4 xoffset=-1 yoffset=7 xadvance=3 page=0 chnl=0
char id=59 x=118 y=23 width=2 height=5 xoffset=-1 yoffset=7 xadvance=3 page=0 chnl=0
char id=60 x=59 y=23 width=5 height=5 xoffset=-1 yoffset=6 xadvance=7 page=0 chnl=0
char id=61 x=271 y=23 width=5 height=3 xoffset=-1 yoffset=7 xadvance=7 page=0 chnl=0
char id=62 x=52 y=23 width=5 height=5 xoffset=-1 yoffset=6 xadvance=7 page=0 chnl=0
char id=63 x=395 y=14 width=5 height=7 xoffset=-1 yoffset=4 xadvance=5 page=0 chnl=0
char id=64 x=161 y=2 width=10 height=9 xoffset=-1 yoffset=4 xadvance=11 page=0 chnl=0
char id=65 x=443 y=2 width=6 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=66 x=494 y=2 width=6 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=67 x=0 y=14 width=6 height=7 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=68 x=8 y=14 width=6 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=69 x=16 y=14 width=6 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=70 x=24 y=14 width=5 height=7 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=71 x=31 y=14 width=6 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=72 x=54 y=14 width=6 height=7 xoffset=-1 yoffset=4 xadvance=8 page=0 chnl=0
char id=73 x=502 y=2 width=2 height=7 xoffset=-1 yoffset=4 xadvance=3 page=0 chnl=0
char id=74 x=332 y=2 width=3 height=8 xoffset=-1 yoffset=4 xadvance=4 page=0 chnl=0
char id=75 x=69 y=14 width=6 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=76 x=77 y=14 width=5 height=7 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=77 x=84 y=14 width=8 height=7 xoffset=-1 yoffset=4 xadvance=9 page=0 chnl=0
char id=78 x=94 y=14 width=6 height=7 xoffset=-1 yoffset=4 xadvance=8 page=0 chnl=0
char id=79 x=102 y=14 width=7 height=7 xoffset=-1 yoffset=4 xadvance=8 page=0 chnl=0
char id=80 x=111 y=14 width=6 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=81 x=117 y=2 width=7 height=9 xoffset=-1 yoffset=4 xadvance=8 page=0 chnl=0
char id=82 x=126 y=14 width=6 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=83 x=134 y=14 width=5 height=7 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=84 x=141 y=14 width=6 height=7 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=85 x=174 y=14 width=6 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=86 x=199 y=14 width=6 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=87 x=207 y=14 width=9 height=7 xoffset=-1 yoffset=4 xadvance=10 page=0 chnl=0
char id=88 x=218 y=14 width=6 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=89 x=226 y=14 width=6 height=7 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=90 x=234 y=14 width=5 height=7 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=91 x=135 y=2 width=3 height=9 xoffset=-1 yoffset=3 xadvance=4 page=0 chnl=0
char id=92 x=367 y=2 width=4 height=8 xoffset=-1 yoffset=4 xadvance=5 page=0 chnl=0
char id=93 x=140 y=2 width=3 height=9 xoffset=-1 yoffset=3 xadvance=4 page=0 chnl=0
char id=94 x=187 y=23 width=5 height=4 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=95 x=285 y=23 width=5 height=1 xoffset=0 yoffset=12 xadvance=7 page=0 chnl=0
char id=96 x=258 y=23 width=3 height=3 xoffset=-1 yoffset=3 xadvance=3 page=0 chnl=0
char id=97 x=88 y=23 width=5 height=5 xoffset=-1 yoffset=6 xadvance=6 page=0 chnl=0
char id=98 x=241 y=14 width=5 height=7 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=99 x=95 y=23 width=4 height=5 xoffset=-1 yoffset=6 xadvance=5 page=0 chnl=0
char id=100 x=248 y=14 width=5 height=7 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=101 x=101 y=23 width=5 height=5 xoffset=-1 yoffset=6 xadvance=6 page=0 chnl=0
char id=102 x=255 y=14 width=4 height=7 xoffset=-1 yoffset=4 xadvance=4 page=0 chnl=0
char id=103 x=261 y=14 width=5 height=7 xoffset=-1 yoffset=6 xadvance=6 page=0 chnl=0
char id=104 x=268 y=14 width=5 height=7 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=105 x=275 y=14 width=2 height=7 xoffset=-1 yoffset=4 xadvance=3 page=0 chnl=0
char id=106 x=4 y=2 width=3 height=10 xoffset=-2 yoffset=4 xadvance=3 page=0 chnl=0
char id=107 x=279 y=14 width=5 height=7 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=108 x=286 y=14 width=2 height=7 xoffset=-1 yoffset=4 xadvance=3 page=0 chnl=0
char id=109 x=108 y=23 width=8 height=5 xoffset=-1 yoffset=6 xadvance=9 page=0 chnl=0
char id=110 x=122 y=23 width=5 height=5 xoffset=-1 yoffset=6 xadvance=6 page=0 chnl=0
char id=111 x=129 y=23 width=5 height=5 xoffset=-1 yoffset=6 xadvance=6 page=0 chnl=0
char id=112 x=290 y=14 width=5 height=7 xoffset=-1 yoffset=6 xadvance=6 page=0 chnl=0
char id=113 x=297 y=14 width=5 height=7 xoffset=-1 yoffset=6 xadvance=6 page=0 chnl=0
char id=114 x=15 y=23 width=4 height=6 xoffset=-1 yoffset=5 xadvance=4 page=0 chnl=0
char id=115 x=136 y=23 width=5 height=5 xoffset=-1 yoffset=6 xadvance=6 page=0 chnl=0
char id=116 x=304 y=14 width=4 height=7 xoffset=-1 yoffset=4 xadvance=4 page=0 chnl=0
char id=117 x=143 y=23 width=5 height=5 xoffset=-1 yoffset=6 xadvance=6 page=0 chnl=0
char id=118 x=150 y=23 width=5 height=5 xoffset=-1 yoffset=6 xadvance=6 page=0 chnl=0
char id=119 x=157 y=23 width=8 height=5 xoffset=-1 yoffset=6 xadvance=9 page=0 chnl=0
char id=120 x=167 y=23 width=5 height=5 xoffset=-1 yoffset=6 xadvance=5 page=0 chnl=0
char id=121 x=310 y=14 width=5 height=7 xoffset=-1 yoffset=6 xadvance=6 page=0 chnl=0
char id=122 x=174 y=23 width=5 height=5 xoffset=-1 yoffset=6 xadvance=6 page=0 chnl=0
char id=123 x=145 y=2 width=4 height=9 xoffset=-1 yoffset=3 xadvance=5 page=0 chnl=0
char id=124 x=157 y=2 width=2 height=9 xoffset=-1 yoffset=4 xadvance=3 page=0 chnl=0
char id=125 x=151 y=2 width=4 height=9 xoffset=-1 yoffset=3 xadvance=5 page=0 chnl=0
char id=126 x=278 y=23 width=5 height=2 xoffset=-1 yoffset=7 xadvance=7 page=0 chnl=0
char id=160 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=11 xadvance=3 page=0 chnl=0
char id=161 x=195 y=14 width=2 height=7 xoffset=-1 yoffset=6 xadvance=3 page=0 chnl=0
char id=162 x=189 y=14 width=4 height=7 xoffset=0 yoffset=5 xadvance=7 page=0 chnl=0
char id=163 x=182 y=14 width=5 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=164 x=8 y=23 width=5 height=6 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=0
char id=165 x=166 y=14 width=6 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=166 x=180 y=2 width=2 height=9 xoffset=-1 yoffset=4 xadvance=3 page=0 chnl=0
char id=167 x=415 y=2 width=5 height=8 xoffset=-1 yoffset=5 xadvance=6 page=0 chnl=0
char id=168 x=312 y=23 width=4 height=1 xoffset=-2 yoffset=4 xadvance=3 page=0 chnl=0
char id=169 x=0 y=23 width=6 height=6 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=170 x=181 y=23 width=4 height=4 xoffset=-1 yoffset=4 xadvance=5 page=0 chnl=0
char id=171 x=66 y=23 width=5 height=5 xoffset=-1 yoffset=6 xadvance=6 page=0 chnl=0
char id=172 x=241 y=23 width=5 height=3 xoffset=-1 yoffset=7 xadvance=7 page=0 chnl=0
char id=174 x=498 y=14 width=6 height=6 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=175 x=300 y=23 width=4 height=1 xoffset=-2 yoffset=4 xadvance=3 page=0 chnl=0
char id=176 x=235 y=23 width=4 height=3 xoffset=0 yoffset=4 xadvance=7 page=0 chnl=0
char id=177 x=38 y=23 width=6 height=5 xoffset=-1 yoffset=6 xadvance=7 page=0 chnl=0
char id=178 x=230 y=23 width=3 height=3 xoffset=-1 yoffset=3 xadvance=4 page=0 chnl=0
char id=179 x=225 y=23 width=3 height=3 xoffset=-1 yoffset=3 xadvance=4 page=0 chnl=0
char id=180 x=220 y=23 width=3 height=3 xoffset=-1 yoffset=3 xadvance=4 page=0 chnl=0
char id=181 x=47 y=14 width=5 height=7 xoffset=-1 yoffset=6 xadvance=7 page=0 chnl=0
char id=182 x=39 y=14 width=6 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=183 x=292 y=23 width=2 height=1 xoffset=-1 yoffset=8 xadvance=3 page=0 chnl=0
char id=184 x=215 y=23 width=3 height=3 xoffset=-1 yoffset=10 xadvance=4 page=0 chnl=0
char id=185 x=211 y=23 width=2 height=3 xoffset=-1 yoffset=3 xadvance=4 page=0 chnl=0
char id=186 x=205 y=23 width=4 height=3 xoffset=-1 yoffset=5 xadvance=5 page=0 chnl=0
char id=187 x=31 y=23 width=5 height=5 xoffset=-1 yoffset=6 xadvance=6 page=0 chnl=0
char id=188 x=184 y=2 width=5 height=9 xoffset=-1 yoffset=3 xadvance=6 page=0 chnl=0
char id=189 x=191 y=2 width=5 height=9 xoffset=-1 yoffset=3 xadvance=6 page=0 chnl=0
char id=190 x=198 y=2 width=6 height=9 xoffset=-1 yoffset=3 xadvance=6 page=0 chnl=0
char id=191 x=472 y=2 width=5 height=7 xoffset=-1 yoffset=6 xadvance=5 page=0 chnl=0
char id=192 x=16 y=2 width=6 height=10 xoffset=-1 yoffset=1 xadvance=7 page=0 chnl=0
char id=193 x=24 y=2 width=6 height=10 xoffset=-1 yoffset=1 xadvance=7 page=0 chnl=0
char id=194 x=213 y=2 width=6 height=9 xoffset=-1 yoffset=2 xadvance=7 page=0 chnl=0
char id=195 x=221 y=2 width=6 height=9 xoffset=-1 yoffset=2 xadvance=7 page=0 chnl=0
char id=196 x=229 y=2 width=6 height=9 xoffset=-1 yoffset=2 xadvance=7 page=0 chnl=0
char id=197 x=237 y=2 width=6 height=9 xoffset=-1 yoffset=2 xadvance=7 page=0 chnl=0
char id=198 x=149 y=14 width=9 height=7 xoffset=-1 yoffset=4 xadvance=10 page=0 chnl=0
char id=199 x=245 y=2 width=6 height=9 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=200 x=39 y=2 width=6 height=10 xoffset=-1 yoffset=1 xadvance=7 page=0 chnl=0
char id=201 x=47 y=2 width=6 height=10 xoffset=-1 yoffset=1 xadvance=7 page=0 chnl=0
char id=202 x=253 y=2 width=6 height=9 xoffset=-1 yoffset=2 xadvance=7 page=0 chnl=0
char id=203 x=261 y=2 width=6 height=9 xoffset=-1 yoffset=2 xadvance=7 page=0 chnl=0
char id=204 x=55 y=2 width=4 height=10 xoffset=-2 yoffset=1 xadvance=3 page=0 chnl=0
char id=205 x=61 y=2 width=3 height=10 xoffset=-1 yoffset=1 xadvance=3 page=0 chnl=0
char id=206 x=285 y=2 width=4 height=9 xoffset=-2 yoffset=2 xadvance=3 page=0 chnl=0
char id=207 x=291 y=2 width=4 height=9 xoffset=-2 yoffset=2 xadvance=3 page=0 chnl=0
char id=208 x=414 y=14 width=6 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=209 x=297 y=2 width=6 height=9 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=210 x=66 y=2 width=7 height=10 xoffset=-1 yoffset=1 xadvance=8 page=0 chnl=0
char id=211 x=75 y=2 width=7 height=10 xoffset=-1 yoffset=1 xadvance=8 page=0 chnl=0
char id=212 x=305 y=2 width=7 height=9 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=213 x=323 y=2 width=7 height=9 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=214 x=314 y=2 width=7 height=9 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=215 x=81 y=23 width=5 height=5 xoffset=-1 yoffset=6 xadvance=7 page=0 chnl=0
char id=216 x=84 y=2 width=7 height=10 xoffset=-1 yoffset=3 xadvance=8 page=0 chnl=0
char id=217 x=93 y=2 width=6 height=10 xoffset=-1 yoffset=1 xadvance=7 page=0 chnl=0
char id=218 x=101 y=2 width=6 height=10 xoffset=-1 yoffset=1 xadvance=7 page=0 chnl=0
char id=219 x=277 y=2 width=6 height=9 xoffset=-1 yoffset=2 xadvance=7 page=0 chnl=0
char id=220 x=269 y=2 width=6 height=9 xoffset=-1 yoffset=2 xadvance=7 page=0 chnl=0
char id=221 x=109 y=2 width=6 height=10 xoffset=-1 yoffset=1 xadvance=6 page=0 chnl=0
char id=222 x=474 y=14 width=6 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=223 x=486 y=2 width=6 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=224 x=436 y=2 width=5 height=8 xoffset=-1 yoffset=3 xadvance=6 page=0 chnl=0
char id=225 x=429 y=2 width=5 height=8 xoffset=-1 yoffset=3 xadvance=6 page=0 chnl=0
char id=226 x=451 y=2 width=5 height=7 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=227 x=465 y=2 width=5 height=7 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=228 x=479 y=2 width=5 height=7 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=229 x=422 y=2 width=5 height=8 xoffset=-1 yoffset=3 xadvance=6 page=0 chnl=0
char id=230 x=21 y=23 width=8 height=5 xoffset=-1 yoffset=6 xadvance=9 page=0 chnl=0
char id=231 x=160 y=14 width=4 height=7 xoffset=-1 yoffset=6 xadvance=5 page=0 chnl=0
char id=232 x=408 y=2 width=5 height=8 xoffset=-1 yoffset=3 xadvance=6 page=0 chnl=0
char id=233 x=360 y=2 width=5 height=8 xoffset=-1 yoffset=3 xadvance=6 page=0 chnl=0
char id=234 x=429 y=14 width=5 height=7 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=235 x=422 y=14 width=5 height=7 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=236 x=349 y=2 width=3 height=8 xoffset=-2 yoffset=3 xadvance=3 page=0 chnl=0
char id=237 x=344 y=2 width=3 height=8 xoffset=-1 yoffset=3 xadvance=3 page=0 chnl=0
char id=238 x=408 y=14 width=4 height=7 xoffset=-2 yoffset=4 xadvance=3 page=0 chnl=0
char id=239 x=402 y=14 width=4 height=7 xoffset=-2 yoffset=4 xadvance=3 page=0 chnl=0
char id=240 x=337 y=2 width=5 height=8 xoffset=-1 yoffset=3 xadvance=6 page=0 chnl=0
char id=241 x=119 y=14 width=5 height=7 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=242 x=394 y=2 width=5 height=8 xoffset=-1 yoffset=3 xadvance=6 page=0 chnl=0
char id=243 x=387 y=2 width=5 height=8 xoffset=-1 yoffset=3 xadvance=6 page=0 chnl=0
char id=244 x=443 y=14 width=5 height=7 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=245 x=436 y=14 width=5 height=7 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=246 x=62 y=14 width=5 height=7 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=247 x=194 y=23 width=5 height=4 xoffset=-1 yoffset=7 xadvance=7 page=0 chnl=0
char id=248 x=373 y=2 width=5 height=8 xoffset=-1 yoffset=5 xadvance=6 page=0 chnl=0
char id=249 x=380 y=2 width=5 height=8 xoffset=-1 yoffset=3 xadvance=6 page=0 chnl=0
char id=250 x=401 y=2 width=5 height=8 xoffset=-1 yoffset=3 xadvance=6 page=0 chnl=0
char id=251 x=459 y=14 width=5 height=7 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=252 x=458 y=2 width=5 height=7 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=253 x=32 y=2 width=5 height=10 xoffset=-1 yoffset=3 xadvance=6 page=0 chnl=0
char id=254 x=206 y=2 width=5 height=9 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=255 x=173 y=2 width=5 height=9 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=8226 x=253 y=23 width=3 height=3 xoffset=0 yoffset=7 xadvance=6 page=0 chnl=0
char id=8364 x=482 y=14 width=6 height=7 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
kernings count=0

198
assets/ui/font-subtitle.fnt Normal file
View File

@ -0,0 +1,198 @@
info face="font-subtitle" size=12 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=1 aa=2 padding=1,1,1,1 spacing=0,0
common lineHeight=18 base=13 scaleW=505 scaleH=36 pages=1 packed=0 alphaChnl=0 redChnl=0 greenChnl=0 blueChnl=0
page id=0 file="font-subtitle.png"
chars count=193
char id=0 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=13 xadvance=3 page=0 chnl=0
char id=32 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=-1 xadvance=3 page=0 chnl=0
char id=33 x=9 y=27 width=1 height=8 xoffset=0 yoffset=5 xadvance=3 page=0 chnl=0
char id=34 x=351 y=27 width=4 height=3 xoffset=-1 yoffset=5 xadvance=4 page=0 chnl=0
char id=35 x=46 y=27 width=7 height=8 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=0
char id=36 x=7 y=2 width=6 height=12 xoffset=-1 yoffset=3 xadvance=7 page=0 chnl=0
char id=37 x=117 y=16 width=7 height=9 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=0
char id=38 x=28 y=27 width=8 height=8 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=0
char id=39 x=370 y=27 width=2 height=3 xoffset=-1 yoffset=5 xadvance=2 page=0 chnl=0
char id=40 x=39 y=2 width=3 height=11 xoffset=-1 yoffset=4 xadvance=3 page=0 chnl=0
char id=41 x=44 y=2 width=3 height=11 xoffset=-1 yoffset=4 xadvance=3 page=0 chnl=0
char id=42 x=270 y=27 width=5 height=5 xoffset=-1 yoffset=4 xadvance=5 page=0 chnl=0
char id=43 x=164 y=27 width=7 height=6 xoffset=-1 yoffset=7 xadvance=7 page=0 chnl=0
char id=44 x=379 y=27 width=2 height=3 xoffset=-1 yoffset=11 xadvance=2 page=0 chnl=0
char id=45 x=410 y=27 width=5 height=1 xoffset=-1 yoffset=9 xadvance=6 page=0 chnl=0
char id=46 x=436 y=27 width=2 height=1 xoffset=-1 yoffset=12 xadvance=2 page=0 chnl=0
char id=47 x=341 y=2 width=5 height=10 xoffset=-1 yoffset=4 xadvance=5 page=0 chnl=0
char id=48 x=0 y=27 width=7 height=8 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=0
char id=49 x=441 y=16 width=4 height=8 xoffset=0 yoffset=5 xadvance=7 page=0 chnl=0
char id=50 x=447 y=16 width=6 height=8 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=0
char id=51 x=455 y=16 width=6 height=8 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=0
char id=52 x=463 y=16 width=7 height=8 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=0
char id=53 x=472 y=16 width=6 height=8 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=0
char id=54 x=480 y=16 width=7 height=8 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=0
char id=55 x=55 y=16 width=5 height=9 xoffset=0 yoffset=5 xadvance=7 page=0 chnl=0
char id=56 x=489 y=16 width=7 height=8 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=0
char id=57 x=498 y=16 width=6 height=8 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=0
char id=58 x=277 y=27 width=2 height=5 xoffset=-1 yoffset=8 xadvance=2 page=0 chnl=0
char id=59 x=112 y=27 width=2 height=7 xoffset=-1 yoffset=8 xadvance=3 page=0 chnl=0
char id=60 x=148 y=27 width=6 height=6 xoffset=-1 yoffset=7 xadvance=7 page=0 chnl=0
char id=61 x=362 y=27 width=6 height=3 xoffset=-1 yoffset=9 xadvance=7 page=0 chnl=0
char id=62 x=139 y=27 width=7 height=6 xoffset=-1 yoffset=7 xadvance=7 page=0 chnl=0
char id=63 x=12 y=27 width=5 height=8 xoffset=-1 yoffset=5 xadvance=5 page=0 chnl=0
char id=64 x=348 y=2 width=12 height=10 xoffset=-1 yoffset=5 xadvance=12 page=0 chnl=0
char id=65 x=145 y=16 width=7 height=8 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=0
char id=66 x=154 y=16 width=6 height=8 xoffset=0 yoffset=5 xadvance=7 page=0 chnl=0
char id=67 x=162 y=16 width=7 height=8 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=0
char id=68 x=171 y=16 width=7 height=8 xoffset=0 yoffset=5 xadvance=8 page=0 chnl=0
char id=69 x=180 y=16 width=6 height=8 xoffset=0 yoffset=5 xadvance=7 page=0 chnl=0
char id=70 x=188 y=16 width=5 height=8 xoffset=0 yoffset=5 xadvance=6 page=0 chnl=0
char id=71 x=212 y=16 width=7 height=8 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=0
char id=72 x=228 y=16 width=6 height=8 xoffset=0 yoffset=5 xadvance=8 page=0 chnl=0
char id=73 x=236 y=16 width=1 height=8 xoffset=0 yoffset=5 xadvance=3 page=0 chnl=0
char id=74 x=379 y=2 width=3 height=9 xoffset=-1 yoffset=5 xadvance=3 page=0 chnl=0
char id=75 x=249 y=16 width=6 height=8 xoffset=0 yoffset=5 xadvance=7 page=0 chnl=0
char id=76 x=257 y=16 width=5 height=8 xoffset=0 yoffset=5 xadvance=6 page=0 chnl=0
char id=77 x=264 y=16 width=8 height=8 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=0
char id=78 x=274 y=16 width=6 height=8 xoffset=0 yoffset=5 xadvance=8 page=0 chnl=0
char id=79 x=282 y=16 width=8 height=8 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=0
char id=80 x=292 y=16 width=6 height=8 xoffset=0 yoffset=5 xadvance=7 page=0 chnl=0
char id=81 x=323 y=2 width=8 height=10 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=0
char id=82 x=300 y=16 width=6 height=8 xoffset=0 yoffset=5 xadvance=7 page=0 chnl=0
char id=83 x=308 y=16 width=6 height=8 xoffset=-1 yoffset=5 xadvance=6 page=0 chnl=0
char id=84 x=316 y=16 width=7 height=8 xoffset=-1 yoffset=5 xadvance=6 page=0 chnl=0
char id=85 x=325 y=16 width=6 height=8 xoffset=0 yoffset=5 xadvance=8 page=0 chnl=0
char id=86 x=333 y=16 width=7 height=8 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=0
char id=87 x=342 y=16 width=10 height=8 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=0
char id=88 x=354 y=16 width=7 height=8 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=0
char id=89 x=363 y=16 width=7 height=8 xoffset=-1 yoffset=5 xadvance=6 page=0 chnl=0
char id=90 x=372 y=16 width=6 height=8 xoffset=-1 yoffset=5 xadvance=6 page=0 chnl=0
char id=91 x=49 y=2 width=3 height=11 xoffset=0 yoffset=4 xadvance=4 page=0 chnl=0
char id=92 x=102 y=16 width=5 height=9 xoffset=-1 yoffset=4 xadvance=5 page=0 chnl=0
char id=93 x=54 y=2 width=3 height=11 xoffset=-1 yoffset=4 xadvance=4 page=0 chnl=0
char id=94 x=310 y=27 width=6 height=4 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=0
char id=95 x=417 y=27 width=6 height=1 xoffset=0 yoffset=14 xadvance=8 page=0 chnl=0
char id=96 x=388 y=27 width=3 height=2 xoffset=-1 yoffset=4 xadvance=3 page=0 chnl=0
char id=97 x=124 y=27 width=6 height=6 xoffset=-1 yoffset=7 xadvance=6 page=0 chnl=0
char id=98 x=384 y=2 width=6 height=9 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=99 x=132 y=27 width=5 height=6 xoffset=-1 yoffset=7 xadvance=5 page=0 chnl=0
char id=100 x=392 y=2 width=6 height=9 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=101 x=156 y=27 width=6 height=6 xoffset=-1 yoffset=7 xadvance=6 page=0 chnl=0
char id=102 x=400 y=2 width=4 height=9 xoffset=-1 yoffset=4 xadvance=4 page=0 chnl=0
char id=103 x=414 y=2 width=6 height=9 xoffset=-1 yoffset=7 xadvance=6 page=0 chnl=0
char id=104 x=453 y=2 width=6 height=9 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=105 x=416 y=16 width=2 height=8 xoffset=-1 yoffset=5 xadvance=2 page=0 chnl=0
char id=106 x=34 y=2 width=3 height=11 xoffset=-2 yoffset=5 xadvance=2 page=0 chnl=0
char id=107 x=494 y=2 width=6 height=9 xoffset=-1 yoffset=4 xadvance=5 page=0 chnl=0
char id=108 x=502 y=2 width=1 height=9 xoffset=0 yoffset=4 xadvance=2 page=0 chnl=0
char id=109 x=185 y=27 width=10 height=6 xoffset=-1 yoffset=7 xadvance=10 page=0 chnl=0
char id=110 x=197 y=27 width=6 height=6 xoffset=-1 yoffset=7 xadvance=6 page=0 chnl=0
char id=111 x=205 y=27 width=6 height=6 xoffset=-1 yoffset=7 xadvance=6 page=0 chnl=0
char id=112 x=31 y=16 width=6 height=9 xoffset=-1 yoffset=7 xadvance=6 page=0 chnl=0
char id=113 x=39 y=16 width=6 height=9 xoffset=-1 yoffset=7 xadvance=6 page=0 chnl=0
char id=114 x=106 y=27 width=4 height=7 xoffset=-1 yoffset=6 xadvance=4 page=0 chnl=0
char id=115 x=213 y=27 width=5 height=6 xoffset=-1 yoffset=7 xadvance=6 page=0 chnl=0
char id=116 x=434 y=16 width=5 height=8 xoffset=-1 yoffset=5 xadvance=4 page=0 chnl=0
char id=117 x=220 y=27 width=6 height=6 xoffset=-1 yoffset=7 xadvance=6 page=0 chnl=0
char id=118 x=228 y=27 width=6 height=6 xoffset=-1 yoffset=7 xadvance=6 page=0 chnl=0
char id=119 x=236 y=27 width=9 height=6 xoffset=-1 yoffset=7 xadvance=9 page=0 chnl=0
char id=120 x=247 y=27 width=5 height=6 xoffset=-1 yoffset=7 xadvance=5 page=0 chnl=0
char id=121 x=47 y=16 width=6 height=9 xoffset=-1 yoffset=7 xadvance=6 page=0 chnl=0
char id=122 x=254 y=27 width=5 height=6 xoffset=-1 yoffset=7 xadvance=5 page=0 chnl=0
char id=123 x=59 y=2 width=4 height=11 xoffset=-1 yoffset=4 xadvance=4 page=0 chnl=0
char id=124 x=4 y=2 width=1 height=12 xoffset=0 yoffset=4 xadvance=2 page=0 chnl=0
char id=125 x=65 y=2 width=4 height=11 xoffset=-1 yoffset=4 xadvance=4 page=0 chnl=0
char id=126 x=393 y=27 width=6 height=2 xoffset=-1 yoffset=9 xadvance=7 page=0 chnl=0
char id=160 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=13 xadvance=3 page=0 chnl=0
char id=161 x=126 y=16 width=2 height=9 xoffset=-1 yoffset=7 xadvance=2 page=0 chnl=0
char id=162 x=130 y=16 width=5 height=9 xoffset=0 yoffset=6 xadvance=7 page=0 chnl=0
char id=163 x=221 y=16 width=5 height=8 xoffset=0 yoffset=5 xadvance=7 page=0 chnl=0
char id=164 x=89 y=27 width=6 height=7 xoffset=-1 yoffset=6 xadvance=7 page=0 chnl=0
char id=165 x=203 y=16 width=7 height=8 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=0
char id=166 x=15 y=2 width=1 height=12 xoffset=0 yoffset=4 xadvance=3 page=0 chnl=0
char id=167 x=362 y=2 width=6 height=10 xoffset=-1 yoffset=5 xadvance=6 page=0 chnl=0
char id=168 x=425 y=27 width=3 height=1 xoffset=-1 yoffset=5 xadvance=3 page=0 chnl=0
char id=169 x=80 y=27 width=7 height=7 xoffset=-1 yoffset=4 xadvance=8 page=0 chnl=0
char id=170 x=298 y=27 width=4 height=4 xoffset=-1 yoffset=5 xadvance=4 page=0 chnl=0
char id=171 x=290 y=27 width=6 height=4 xoffset=-1 yoffset=8 xadvance=6 page=0 chnl=0
char id=172 x=338 y=27 width=6 height=3 xoffset=-1 yoffset=9 xadvance=7 page=0 chnl=0
char id=174 x=97 y=27 width=7 height=7 xoffset=-1 yoffset=4 xadvance=8 page=0 chnl=0
char id=175 x=430 y=27 width=4 height=1 xoffset=-2 yoffset=5 xadvance=3 page=0 chnl=0
char id=176 x=304 y=27 width=4 height=4 xoffset=0 yoffset=4 xadvance=7 page=0 chnl=0
char id=177 x=281 y=27 width=7 height=5 xoffset=-1 yoffset=7 xadvance=7 page=0 chnl=0
char id=178 x=383 y=27 width=3 height=3 xoffset=-1 yoffset=4 xadvance=3 page=0 chnl=0
char id=179 x=346 y=27 width=3 height=3 xoffset=-1 yoffset=4 xadvance=3 page=0 chnl=0
char id=180 x=401 y=27 width=3 height=2 xoffset=-1 yoffset=4 xadvance=3 page=0 chnl=0
char id=181 x=78 y=16 width=5 height=9 xoffset=0 yoffset=7 xadvance=7 page=0 chnl=0
char id=182 x=19 y=27 width=7 height=8 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=0
char id=183 x=406 y=27 width=2 height=1 xoffset=-1 yoffset=9 xadvance=2 page=0 chnl=0
char id=184 x=357 y=27 width=3 height=3 xoffset=-1 yoffset=13 xadvance=3 page=0 chnl=0
char id=185 x=374 y=27 width=3 height=3 xoffset=-1 yoffset=4 xadvance=3 page=0 chnl=0
char id=186 x=332 y=27 width=4 height=4 xoffset=-1 yoffset=5 xadvance=4 page=0 chnl=0
char id=187 x=324 y=27 width=6 height=4 xoffset=-1 yoffset=8 xadvance=6 page=0 chnl=0
char id=188 x=79 y=2 width=6 height=11 xoffset=-1 yoffset=3 xadvance=6 page=0 chnl=0
char id=189 x=87 y=2 width=6 height=11 xoffset=-1 yoffset=3 xadvance=6 page=0 chnl=0
char id=190 x=95 y=2 width=7 height=11 xoffset=-1 yoffset=3 xadvance=7 page=0 chnl=0
char id=191 x=8 y=16 width=5 height=9 xoffset=-1 yoffset=7 xadvance=5 page=0 chnl=0
char id=192 x=104 y=2 width=7 height=11 xoffset=-1 yoffset=2 xadvance=7 page=0 chnl=0
char id=193 x=113 y=2 width=7 height=11 xoffset=-1 yoffset=2 xadvance=7 page=0 chnl=0
char id=194 x=122 y=2 width=7 height=11 xoffset=-1 yoffset=2 xadvance=7 page=0 chnl=0
char id=195 x=131 y=2 width=7 height=11 xoffset=-1 yoffset=2 xadvance=7 page=0 chnl=0
char id=196 x=140 y=2 width=7 height=11 xoffset=-1 yoffset=2 xadvance=7 page=0 chnl=0
char id=197 x=370 y=2 width=7 height=10 xoffset=-1 yoffset=3 xadvance=7 page=0 chnl=0
char id=198 x=404 y=16 width=10 height=8 xoffset=-1 yoffset=5 xadvance=11 page=0 chnl=0
char id=199 x=149 y=2 width=7 height=11 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=0
char id=200 x=158 y=2 width=6 height=11 xoffset=0 yoffset=2 xadvance=7 page=0 chnl=0
char id=201 x=166 y=2 width=6 height=11 xoffset=0 yoffset=2 xadvance=7 page=0 chnl=0
char id=202 x=174 y=2 width=6 height=11 xoffset=0 yoffset=2 xadvance=7 page=0 chnl=0
char id=203 x=182 y=2 width=6 height=11 xoffset=0 yoffset=2 xadvance=7 page=0 chnl=0
char id=204 x=190 y=2 width=4 height=11 xoffset=-2 yoffset=2 xadvance=3 page=0 chnl=0
char id=205 x=196 y=2 width=3 height=11 xoffset=-1 yoffset=2 xadvance=3 page=0 chnl=0
char id=206 x=201 y=2 width=5 height=11 xoffset=-2 yoffset=2 xadvance=3 page=0 chnl=0
char id=207 x=208 y=2 width=4 height=11 xoffset=-2 yoffset=2 xadvance=3 page=0 chnl=0
char id=208 x=239 y=16 width=8 height=8 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=0
char id=209 x=214 y=2 width=6 height=11 xoffset=0 yoffset=2 xadvance=8 page=0 chnl=0
char id=210 x=222 y=2 width=8 height=11 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=211 x=232 y=2 width=8 height=11 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=212 x=242 y=2 width=8 height=11 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=213 x=252 y=2 width=8 height=11 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=214 x=262 y=2 width=8 height=11 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=215 x=116 y=27 width=6 height=6 xoffset=-1 yoffset=7 xadvance=7 page=0 chnl=0
char id=216 x=313 y=2 width=8 height=11 xoffset=-1 yoffset=4 xadvance=8 page=0 chnl=0
char id=217 x=305 y=2 width=6 height=11 xoffset=0 yoffset=2 xadvance=8 page=0 chnl=0
char id=218 x=297 y=2 width=6 height=11 xoffset=0 yoffset=2 xadvance=8 page=0 chnl=0
char id=219 x=289 y=2 width=6 height=11 xoffset=0 yoffset=2 xadvance=8 page=0 chnl=0
char id=220 x=281 y=2 width=6 height=11 xoffset=0 yoffset=2 xadvance=8 page=0 chnl=0
char id=221 x=272 y=2 width=7 height=11 xoffset=-1 yoffset=2 xadvance=6 page=0 chnl=0
char id=222 x=38 y=27 width=6 height=8 xoffset=0 yoffset=5 xadvance=7 page=0 chnl=0
char id=223 x=85 y=16 width=7 height=9 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=224 x=94 y=16 width=6 height=9 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=225 x=137 y=16 width=6 height=9 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=226 x=469 y=2 width=6 height=9 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=227 x=380 y=16 width=6 height=8 xoffset=-1 yoffset=5 xadvance=6 page=0 chnl=0
char id=228 x=388 y=16 width=6 height=8 xoffset=-1 yoffset=5 xadvance=6 page=0 chnl=0
char id=229 x=406 y=2 width=6 height=9 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=230 x=173 y=27 width=10 height=6 xoffset=-1 yoffset=7 xadvance=10 page=0 chnl=0
char id=231 x=422 y=2 width=5 height=9 xoffset=-1 yoffset=7 xadvance=5 page=0 chnl=0
char id=232 x=429 y=2 width=6 height=9 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=233 x=437 y=2 width=6 height=9 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=234 x=445 y=2 width=6 height=9 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=235 x=396 y=16 width=6 height=8 xoffset=-1 yoffset=5 xadvance=6 page=0 chnl=0
char id=236 x=477 y=2 width=3 height=9 xoffset=-2 yoffset=4 xadvance=2 page=0 chnl=0
char id=237 x=482 y=2 width=4 height=9 xoffset=-1 yoffset=4 xadvance=2 page=0 chnl=0
char id=238 x=488 y=2 width=4 height=9 xoffset=-2 yoffset=4 xadvance=2 page=0 chnl=0
char id=239 x=420 y=16 width=4 height=8 xoffset=-2 yoffset=5 xadvance=2 page=0 chnl=0
char id=240 x=0 y=16 width=6 height=9 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=241 x=426 y=16 width=6 height=8 xoffset=-1 yoffset=5 xadvance=6 page=0 chnl=0
char id=242 x=15 y=16 width=6 height=9 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=243 x=23 y=16 width=6 height=9 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=244 x=109 y=16 width=6 height=9 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=245 x=63 y=27 width=6 height=8 xoffset=-1 yoffset=5 xadvance=6 page=0 chnl=0
char id=246 x=55 y=27 width=6 height=8 xoffset=-1 yoffset=5 xadvance=6 page=0 chnl=0
char id=247 x=261 y=27 width=7 height=5 xoffset=-1 yoffset=8 xadvance=7 page=0 chnl=0
char id=248 x=333 y=2 width=6 height=10 xoffset=-1 yoffset=5 xadvance=6 page=0 chnl=0
char id=249 x=70 y=16 width=6 height=9 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=250 x=62 y=16 width=6 height=9 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=251 x=461 y=2 width=6 height=9 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=252 x=195 y=16 width=6 height=8 xoffset=-1 yoffset=5 xadvance=6 page=0 chnl=0
char id=253 x=26 y=2 width=6 height=12 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=254 x=18 y=2 width=6 height=12 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=255 x=71 y=2 width=6 height=11 xoffset=-1 yoffset=5 xadvance=6 page=0 chnl=0
char id=8226 x=318 y=27 width=4 height=4 xoffset=0 yoffset=8 xadvance=6 page=0 chnl=0
char id=8364 x=71 y=27 width=7 height=8 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=0
kernings count=0

198
assets/ui/font-window.fnt Normal file
View File

@ -0,0 +1,198 @@
info face="font-window" size=12 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=1 aa=2 padding=1,1,1,1 spacing=0,0
common lineHeight=27 base=20 scaleW=506 scaleH=62 pages=1 packed=0 alphaChnl=0 redChnl=0 greenChnl=0 blueChnl=0
page id=0 file="font-window.png"
chars count=193
char id=0 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=20 xadvance=4 page=0 chnl=0
char id=32 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=0
char id=33 x=276 y=38 width=2 height=12 xoffset=0 yoffset=8 xadvance=4 page=0 chnl=0
char id=34 x=293 y=52 width=5 height=4 xoffset=0 yoffset=8 xadvance=7 page=0 chnl=0
char id=35 x=370 y=38 width=10 height=12 xoffset=0 yoffset=8 xadvance=12 page=0 chnl=0
char id=36 x=175 y=2 width=8 height=16 xoffset=0 yoffset=6 xadvance=10 page=0 chnl=0
char id=37 x=62 y=22 width=10 height=14 xoffset=0 yoffset=7 xadvance=12 page=0 chnl=0
char id=38 x=343 y=38 width=13 height=12 xoffset=0 yoffset=8 xadvance=13 page=0 chnl=0
char id=39 x=306 y=52 width=2 height=4 xoffset=0 yoffset=8 xadvance=4 page=0 chnl=0
char id=40 x=392 y=2 width=4 height=15 xoffset=0 yoffset=7 xadvance=5 page=0 chnl=0
char id=41 x=398 y=2 width=4 height=15 xoffset=-1 yoffset=7 xadvance=5 page=0 chnl=0
char id=42 x=172 y=52 width=7 height=8 xoffset=-1 yoffset=6 xadvance=8 page=0 chnl=0
char id=43 x=465 y=38 width=8 height=9 xoffset=0 yoffset=11 xadvance=10 page=0 chnl=0
char id=44 x=300 y=52 width=4 height=4 xoffset=-1 yoffset=18 xadvance=5 page=0 chnl=0
char id=45 x=359 y=52 width=5 height=2 xoffset=0 yoffset=14 xadvance=7 page=0 chnl=0
char id=46 x=330 y=52 width=2 height=3 xoffset=0 yoffset=17 xadvance=4 page=0 chnl=0
char id=47 x=0 y=22 width=8 height=14 xoffset=-1 yoffset=7 xadvance=8 page=0 chnl=0
char id=48 x=265 y=38 width=9 height=12 xoffset=0 yoffset=8 xadvance=11 page=0 chnl=0
char id=49 x=174 y=38 width=6 height=12 xoffset=0 yoffset=8 xadvance=10 page=0 chnl=0
char id=50 x=182 y=38 width=7 height=12 xoffset=0 yoffset=8 xadvance=9 page=0 chnl=0
char id=51 x=191 y=38 width=8 height=12 xoffset=0 yoffset=8 xadvance=10 page=0 chnl=0
char id=52 x=201 y=38 width=9 height=12 xoffset=0 yoffset=8 xadvance=11 page=0 chnl=0
char id=53 x=212 y=38 width=9 height=12 xoffset=-1 yoffset=8 xadvance=10 page=0 chnl=0
char id=54 x=223 y=38 width=9 height=12 xoffset=0 yoffset=8 xadvance=11 page=0 chnl=0
char id=55 x=234 y=38 width=7 height=12 xoffset=0 yoffset=8 xadvance=9 page=0 chnl=0
char id=56 x=243 y=38 width=9 height=12 xoffset=0 yoffset=8 xadvance=11 page=0 chnl=0
char id=57 x=254 y=38 width=9 height=12 xoffset=0 yoffset=8 xadvance=11 page=0 chnl=0
char id=58 x=192 y=52 width=2 height=8 xoffset=0 yoffset=12 xadvance=4 page=0 chnl=0
char id=59 x=444 y=38 width=4 height=10 xoffset=-1 yoffset=12 xadvance=4 page=0 chnl=0
char id=60 x=0 y=52 width=8 height=9 xoffset=0 yoffset=11 xadvance=10 page=0 chnl=0
char id=61 x=204 y=52 width=8 height=6 xoffset=0 yoffset=12 xadvance=10 page=0 chnl=0
char id=62 x=495 y=38 width=8 height=9 xoffset=1 yoffset=11 xadvance=11 page=0 chnl=0
char id=63 x=280 y=38 width=7 height=12 xoffset=-1 yoffset=8 xadvance=8 page=0 chnl=0
char id=64 x=157 y=2 width=16 height=16 xoffset=0 yoffset=8 xadvance=18 page=0 chnl=0
char id=65 x=303 y=22 width=11 height=12 xoffset=-1 yoffset=8 xadvance=11 page=0 chnl=0
char id=66 x=316 y=22 width=8 height=12 xoffset=0 yoffset=8 xadvance=10 page=0 chnl=0
char id=67 x=326 y=22 width=8 height=12 xoffset=0 yoffset=8 xadvance=10 page=0 chnl=0
char id=68 x=336 y=22 width=9 height=12 xoffset=0 yoffset=8 xadvance=11 page=0 chnl=0
char id=69 x=347 y=22 width=8 height=12 xoffset=0 yoffset=8 xadvance=10 page=0 chnl=0
char id=70 x=357 y=22 width=8 height=12 xoffset=0 yoffset=8 xadvance=10 page=0 chnl=0
char id=71 x=367 y=22 width=9 height=12 xoffset=0 yoffset=8 xadvance=11 page=0 chnl=0
char id=72 x=378 y=22 width=9 height=12 xoffset=0 yoffset=8 xadvance=11 page=0 chnl=0
char id=73 x=389 y=22 width=2 height=12 xoffset=0 yoffset=8 xadvance=4 page=0 chnl=0
char id=74 x=122 y=22 width=4 height=13 xoffset=-1 yoffset=8 xadvance=5 page=0 chnl=0
char id=75 x=393 y=22 width=9 height=12 xoffset=0 yoffset=8 xadvance=10 page=0 chnl=0
char id=76 x=404 y=22 width=7 height=12 xoffset=0 yoffset=8 xadvance=9 page=0 chnl=0
char id=77 x=413 y=22 width=13 height=12 xoffset=0 yoffset=8 xadvance=15 page=0 chnl=0
char id=78 x=440 y=22 width=10 height=12 xoffset=0 yoffset=8 xadvance=12 page=0 chnl=0
char id=79 x=462 y=22 width=10 height=12 xoffset=0 yoffset=8 xadvance=12 page=0 chnl=0
char id=80 x=478 y=22 width=9 height=12 xoffset=0 yoffset=8 xadvance=11 page=0 chnl=0
char id=81 x=380 y=2 width=10 height=15 xoffset=0 yoffset=8 xadvance=12 page=0 chnl=0
char id=82 x=0 y=38 width=9 height=12 xoffset=0 yoffset=8 xadvance=11 page=0 chnl=0
char id=83 x=11 y=38 width=8 height=12 xoffset=0 yoffset=8 xadvance=10 page=0 chnl=0
char id=84 x=21 y=38 width=9 height=12 xoffset=0 yoffset=8 xadvance=11 page=0 chnl=0
char id=85 x=32 y=38 width=9 height=12 xoffset=0 yoffset=8 xadvance=11 page=0 chnl=0
char id=86 x=43 y=38 width=11 height=12 xoffset=-1 yoffset=8 xadvance=11 page=0 chnl=0
char id=87 x=56 y=38 width=17 height=12 xoffset=-1 yoffset=8 xadvance=17 page=0 chnl=0
char id=88 x=75 y=38 width=11 height=12 xoffset=-1 yoffset=8 xadvance=10 page=0 chnl=0
char id=89 x=88 y=38 width=10 height=12 xoffset=-1 yoffset=8 xadvance=10 page=0 chnl=0
char id=90 x=100 y=38 width=8 height=12 xoffset=0 yoffset=8 xadvance=10 page=0 chnl=0
char id=91 x=404 y=2 width=5 height=15 xoffset=0 yoffset=7 xadvance=6 page=0 chnl=0
char id=92 x=10 y=22 width=9 height=14 xoffset=-1 yoffset=7 xadvance=9 page=0 chnl=0
char id=93 x=411 y=2 width=4 height=15 xoffset=0 yoffset=7 xadvance=6 page=0 chnl=0
char id=94 x=222 y=52 width=10 height=6 xoffset=-1 yoffset=8 xadvance=10 page=0 chnl=0
char id=95 x=349 y=52 width=8 height=2 xoffset=1 yoffset=21 xadvance=12 page=0 chnl=0
char id=96 x=279 y=52 width=6 height=5 xoffset=-2 yoffset=6 xadvance=5 page=0 chnl=0
char id=97 x=32 y=52 width=8 height=9 xoffset=0 yoffset=11 xadvance=10 page=0 chnl=0
char id=98 x=110 y=38 width=8 height=12 xoffset=0 yoffset=8 xadvance=10 page=0 chnl=0
char id=99 x=42 y=52 width=7 height=9 xoffset=0 yoffset=11 xadvance=8 page=0 chnl=0
char id=100 x=120 y=38 width=8 height=12 xoffset=0 yoffset=8 xadvance=10 page=0 chnl=0
char id=101 x=51 y=52 width=8 height=9 xoffset=0 yoffset=11 xadvance=10 page=0 chnl=0
char id=102 x=130 y=38 width=6 height=12 xoffset=0 yoffset=8 xadvance=8 page=0 chnl=0
char id=103 x=158 y=22 width=8 height=13 xoffset=0 yoffset=11 xadvance=10 page=0 chnl=0
char id=104 x=138 y=38 width=8 height=12 xoffset=0 yoffset=8 xadvance=10 page=0 chnl=0
char id=105 x=148 y=38 width=2 height=12 xoffset=0 yoffset=8 xadvance=4 page=0 chnl=0
char id=106 x=147 y=2 width=4 height=16 xoffset=-2 yoffset=8 xadvance=4 page=0 chnl=0
char id=107 x=152 y=38 width=8 height=12 xoffset=0 yoffset=8 xadvance=9 page=0 chnl=0
char id=108 x=162 y=38 width=2 height=12 xoffset=0 yoffset=8 xadvance=4 page=0 chnl=0
char id=109 x=61 y=52 width=12 height=9 xoffset=0 yoffset=11 xadvance=14 page=0 chnl=0
char id=110 x=75 y=52 width=8 height=9 xoffset=0 yoffset=11 xadvance=10 page=0 chnl=0
char id=111 x=85 y=52 width=8 height=9 xoffset=0 yoffset=11 xadvance=10 page=0 chnl=0
char id=112 x=215 y=22 width=8 height=13 xoffset=0 yoffset=11 xadvance=10 page=0 chnl=0
char id=113 x=225 y=22 width=8 height=13 xoffset=0 yoffset=11 xadvance=10 page=0 chnl=0
char id=114 x=436 y=38 width=6 height=10 xoffset=0 yoffset=10 xadvance=7 page=0 chnl=0
char id=115 x=95 y=52 width=7 height=9 xoffset=0 yoffset=11 xadvance=9 page=0 chnl=0
char id=116 x=166 y=38 width=6 height=12 xoffset=0 yoffset=8 xadvance=8 page=0 chnl=0
char id=117 x=104 y=52 width=8 height=9 xoffset=0 yoffset=11 xadvance=10 page=0 chnl=0
char id=118 x=114 y=52 width=9 height=9 xoffset=-1 yoffset=11 xadvance=9 page=0 chnl=0
char id=119 x=125 y=52 width=14 height=9 xoffset=-1 yoffset=11 xadvance=14 page=0 chnl=0
char id=120 x=141 y=52 width=9 height=9 xoffset=-1 yoffset=11 xadvance=9 page=0 chnl=0
char id=121 x=235 y=22 width=9 height=13 xoffset=-1 yoffset=11 xadvance=9 page=0 chnl=0
char id=122 x=152 y=52 width=7 height=9 xoffset=0 yoffset=11 xadvance=9 page=0 chnl=0
char id=123 x=417 y=2 width=6 height=15 xoffset=0 yoffset=7 xadvance=7 page=0 chnl=0
char id=124 x=153 y=2 width=2 height=16 xoffset=0 yoffset=8 xadvance=4 page=0 chnl=0
char id=125 x=425 y=2 width=6 height=15 xoffset=0 yoffset=7 xadvance=7 page=0 chnl=0
char id=126 x=320 y=52 width=8 height=3 xoffset=0 yoffset=14 xadvance=10 page=0 chnl=0
char id=160 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=20 xadvance=4 page=0 chnl=0
char id=161 x=474 y=22 width=2 height=12 xoffset=0 yoffset=11 xadvance=4 page=0 chnl=0
char id=162 x=403 y=38 width=7 height=11 xoffset=1 yoffset=10 xadvance=10 page=0 chnl=0
char id=163 x=452 y=22 width=8 height=12 xoffset=0 yoffset=8 xadvance=10 page=0 chnl=0
char id=164 x=21 y=52 width=9 height=9 xoffset=-1 yoffset=11 xadvance=9 page=0 chnl=0
char id=165 x=428 y=22 width=10 height=12 xoffset=-1 yoffset=8 xadvance=10 page=0 chnl=0
char id=166 x=185 y=2 width=2 height=16 xoffset=0 yoffset=8 xadvance=4 page=0 chnl=0
char id=167 x=433 y=2 width=8 height=15 xoffset=0 yoffset=9 xadvance=10 page=0 chnl=0
char id=168 x=341 y=52 width=6 height=2 xoffset=-1 yoffset=8 xadvance=5 page=0 chnl=0
char id=169 x=424 y=38 width=10 height=10 xoffset=0 yoffset=7 xadvance=12 page=0 chnl=0
char id=170 x=250 y=52 width=6 height=5 xoffset=0 yoffset=8 xadvance=8 page=0 chnl=0
char id=171 x=161 y=52 width=9 height=8 xoffset=0 yoffset=12 xadvance=11 page=0 chnl=0
char id=172 x=240 y=52 width=8 height=5 xoffset=0 yoffset=14 xadvance=10 page=0 chnl=0
char id=174 x=412 y=38 width=10 height=10 xoffset=0 yoffset=7 xadvance=12 page=0 chnl=0
char id=175 x=334 y=52 width=5 height=2 xoffset=-1 yoffset=8 xadvance=5 page=0 chnl=0
char id=176 x=196 y=52 width=6 height=6 xoffset=1 yoffset=7 xadvance=10 page=0 chnl=0
char id=177 x=485 y=38 width=8 height=9 xoffset=0 yoffset=11 xadvance=10 page=0 chnl=0
char id=178 x=265 y=52 width=4 height=5 xoffset=0 yoffset=6 xadvance=6 page=0 chnl=0
char id=179 x=234 y=52 width=4 height=5 xoffset=0 yoffset=6 xadvance=6 page=0 chnl=0
char id=180 x=271 y=52 width=6 height=5 xoffset=-1 yoffset=6 xadvance=5 page=0 chnl=0
char id=181 x=266 y=22 width=8 height=13 xoffset=0 yoffset=11 xadvance=10 page=0 chnl=0
char id=182 x=321 y=38 width=10 height=12 xoffset=-1 yoffset=8 xadvance=11 page=0 chnl=0
char id=183 x=316 y=52 width=2 height=3 xoffset=0 yoffset=14 xadvance=4 page=0 chnl=0
char id=184 x=310 y=52 width=4 height=4 xoffset=-1 yoffset=20 xadvance=5 page=0 chnl=0
char id=185 x=287 y=52 width=4 height=5 xoffset=-1 yoffset=6 xadvance=5 page=0 chnl=0
char id=186 x=214 y=52 width=6 height=6 xoffset=0 yoffset=8 xadvance=8 page=0 chnl=0
char id=187 x=181 y=52 width=9 height=8 xoffset=0 yoffset=12 xadvance=11 page=0 chnl=0
char id=188 x=443 y=2 width=9 height=15 xoffset=-1 yoffset=7 xadvance=10 page=0 chnl=0
char id=189 x=454 y=2 width=9 height=15 xoffset=-1 yoffset=7 xadvance=10 page=0 chnl=0
char id=190 x=189 y=2 width=9 height=16 xoffset=-1 yoffset=6 xadvance=10 page=0 chnl=0
char id=191 x=168 y=22 width=7 height=13 xoffset=0 yoffset=11 xadvance=8 page=0 chnl=0
char id=192 x=27 y=2 width=11 height=17 xoffset=-1 yoffset=3 xadvance=11 page=0 chnl=0
char id=193 x=40 y=2 width=11 height=17 xoffset=-1 yoffset=3 xadvance=11 page=0 chnl=0
char id=194 x=222 y=2 width=11 height=16 xoffset=-1 yoffset=4 xadvance=11 page=0 chnl=0
char id=195 x=235 y=2 width=11 height=16 xoffset=-1 yoffset=4 xadvance=11 page=0 chnl=0
char id=196 x=248 y=2 width=12 height=16 xoffset=-2 yoffset=4 xadvance=10 page=0 chnl=0
char id=197 x=465 y=2 width=12 height=15 xoffset=-1 yoffset=5 xadvance=12 page=0 chnl=0
char id=198 x=489 y=22 width=15 height=12 xoffset=-1 yoffset=8 xadvance=16 page=0 chnl=0
char id=199 x=262 y=2 width=8 height=16 xoffset=0 yoffset=8 xadvance=10 page=0 chnl=0
char id=200 x=53 y=2 width=8 height=17 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=0
char id=201 x=63 y=2 width=8 height=17 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=0
char id=202 x=272 y=2 width=8 height=16 xoffset=0 yoffset=4 xadvance=10 page=0 chnl=0
char id=203 x=282 y=2 width=8 height=16 xoffset=0 yoffset=4 xadvance=10 page=0 chnl=0
char id=204 x=73 y=2 width=6 height=17 xoffset=-2 yoffset=3 xadvance=4 page=0 chnl=0
char id=205 x=81 y=2 width=6 height=17 xoffset=-2 yoffset=3 xadvance=4 page=0 chnl=0
char id=206 x=292 y=2 width=8 height=16 xoffset=-3 yoffset=4 xadvance=4 page=0 chnl=0
char id=207 x=302 y=2 width=6 height=16 xoffset=-1 yoffset=4 xadvance=6 page=0 chnl=0
char id=208 x=358 y=38 width=10 height=12 xoffset=0 yoffset=8 xadvance=12 page=0 chnl=0
char id=209 x=310 y=2 width=10 height=16 xoffset=0 yoffset=4 xadvance=12 page=0 chnl=0
char id=210 x=89 y=2 width=10 height=17 xoffset=0 yoffset=3 xadvance=12 page=0 chnl=0
char id=211 x=101 y=2 width=10 height=17 xoffset=0 yoffset=3 xadvance=12 page=0 chnl=0
char id=212 x=322 y=2 width=10 height=16 xoffset=0 yoffset=4 xadvance=12 page=0 chnl=0
char id=213 x=334 y=2 width=10 height=16 xoffset=0 yoffset=4 xadvance=12 page=0 chnl=0
char id=214 x=346 y=2 width=10 height=16 xoffset=0 yoffset=4 xadvance=12 page=0 chnl=0
char id=215 x=10 y=52 width=9 height=9 xoffset=0 yoffset=11 xadvance=10 page=0 chnl=0
char id=216 x=4 y=2 width=10 height=18 xoffset=0 yoffset=5 xadvance=12 page=0 chnl=0
char id=217 x=113 y=2 width=9 height=17 xoffset=0 yoffset=3 xadvance=11 page=0 chnl=0
char id=218 x=124 y=2 width=9 height=17 xoffset=0 yoffset=3 xadvance=11 page=0 chnl=0
char id=219 x=358 y=2 width=9 height=16 xoffset=0 yoffset=4 xadvance=11 page=0 chnl=0
char id=220 x=369 y=2 width=9 height=16 xoffset=0 yoffset=4 xadvance=11 page=0 chnl=0
char id=221 x=135 y=2 width=10 height=17 xoffset=-1 yoffset=3 xadvance=10 page=0 chnl=0
char id=222 x=289 y=38 width=9 height=12 xoffset=0 yoffset=8 xadvance=11 page=0 chnl=0
char id=223 x=300 y=38 width=9 height=12 xoffset=0 yoffset=8 xadvance=11 page=0 chnl=0
char id=224 x=74 y=22 width=8 height=14 xoffset=0 yoffset=6 xadvance=10 page=0 chnl=0
char id=225 x=84 y=22 width=8 height=14 xoffset=0 yoffset=6 xadvance=10 page=0 chnl=0
char id=226 x=185 y=22 width=8 height=13 xoffset=0 yoffset=7 xadvance=10 page=0 chnl=0
char id=227 x=333 y=38 width=8 height=12 xoffset=0 yoffset=8 xadvance=10 page=0 chnl=0
char id=228 x=256 y=22 width=8 height=13 xoffset=0 yoffset=7 xadvance=10 page=0 chnl=0
char id=229 x=32 y=22 width=8 height=14 xoffset=0 yoffset=6 xadvance=10 page=0 chnl=0
char id=230 x=450 y=38 width=13 height=9 xoffset=0 yoffset=11 xadvance=15 page=0 chnl=0
char id=231 x=276 y=22 width=7 height=13 xoffset=0 yoffset=11 xadvance=8 page=0 chnl=0
char id=232 x=94 y=22 width=8 height=14 xoffset=0 yoffset=6 xadvance=10 page=0 chnl=0
char id=233 x=112 y=22 width=8 height=14 xoffset=0 yoffset=6 xadvance=10 page=0 chnl=0
char id=234 x=128 y=22 width=8 height=13 xoffset=0 yoffset=7 xadvance=10 page=0 chnl=0
char id=235 x=138 y=22 width=8 height=13 xoffset=0 yoffset=7 xadvance=10 page=0 chnl=0
char id=236 x=104 y=22 width=6 height=14 xoffset=-3 yoffset=6 xadvance=4 page=0 chnl=0
char id=237 x=499 y=2 width=6 height=14 xoffset=-1 yoffset=6 xadvance=4 page=0 chnl=0
char id=238 x=177 y=22 width=6 height=13 xoffset=-2 yoffset=7 xadvance=4 page=0 chnl=0
char id=239 x=285 y=22 width=6 height=13 xoffset=-2 yoffset=7 xadvance=4 page=0 chnl=0
char id=240 x=21 y=22 width=9 height=14 xoffset=0 yoffset=6 xadvance=11 page=0 chnl=0
char id=241 x=382 y=38 width=8 height=12 xoffset=0 yoffset=8 xadvance=10 page=0 chnl=0
char id=242 x=489 y=2 width=8 height=14 xoffset=0 yoffset=6 xadvance=10 page=0 chnl=0
char id=243 x=479 y=2 width=8 height=14 xoffset=0 yoffset=6 xadvance=10 page=0 chnl=0
char id=244 x=148 y=22 width=8 height=13 xoffset=0 yoffset=7 xadvance=10 page=0 chnl=0
char id=245 x=311 y=38 width=8 height=12 xoffset=0 yoffset=8 xadvance=10 page=0 chnl=0
char id=246 x=246 y=22 width=8 height=13 xoffset=0 yoffset=7 xadvance=10 page=0 chnl=0
char id=247 x=475 y=38 width=8 height=9 xoffset=0 yoffset=11 xadvance=10 page=0 chnl=0
char id=248 x=205 y=22 width=8 height=13 xoffset=0 yoffset=9 xadvance=10 page=0 chnl=0
char id=249 x=42 y=22 width=8 height=14 xoffset=0 yoffset=6 xadvance=10 page=0 chnl=0
char id=250 x=52 y=22 width=8 height=14 xoffset=0 yoffset=6 xadvance=10 page=0 chnl=0
char id=251 x=293 y=22 width=8 height=13 xoffset=0 yoffset=7 xadvance=10 page=0 chnl=0
char id=252 x=195 y=22 width=8 height=13 xoffset=0 yoffset=7 xadvance=10 page=0 chnl=0
char id=253 x=16 y=2 width=9 height=18 xoffset=-1 yoffset=6 xadvance=9 page=0 chnl=0
char id=254 x=200 y=2 width=8 height=16 xoffset=0 yoffset=8 xadvance=10 page=0 chnl=0
char id=255 x=210 y=2 width=10 height=16 xoffset=-2 yoffset=8 xadvance=8 page=0 chnl=0
char id=8226 x=258 y=52 width=5 height=5 xoffset=1 yoffset=13 xadvance=9 page=0 chnl=0
char id=8364 x=392 y=38 width=9 height=12 xoffset=0 yoffset=8 xadvance=11 page=0 chnl=0
kernings count=0

198
assets/ui/font.fnt Normal file
View File

@ -0,0 +1,198 @@
info face="font" size=12 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=1 aa=2 padding=1,1,1,1 spacing=0,0
common lineHeight=21 base=15 scaleW=504 scaleH=44 pages=1 packed=0 alphaChnl=0 redChnl=0 greenChnl=0 blueChnl=0
page id=0 file="font.png"
chars count=193
char id=0 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=15 xadvance=3 page=0 chnl=0
char id=32 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=-1 xadvance=3 page=0 chnl=0
char id=33 x=393 y=18 width=1 height=10 xoffset=0 yoffset=5 xadvance=3 page=0 chnl=0
char id=34 x=458 y=30 width=3 height=3 xoffset=0 yoffset=5 xadvance=5 page=0 chnl=0
char id=35 x=101 y=30 width=8 height=9 xoffset=-1 yoffset=6 xadvance=8 page=0 chnl=0
char id=36 x=142 y=2 width=6 height=13 xoffset=0 yoffset=4 xadvance=8 page=0 chnl=0
char id=37 x=496 y=18 width=7 height=10 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=0
char id=38 x=0 y=30 width=9 height=10 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=0
char id=39 x=463 y=30 width=1 height=3 xoffset=0 yoffset=5 xadvance=3 page=0 chnl=0
char id=40 x=272 y=2 width=3 height=12 xoffset=0 yoffset=5 xadvance=4 page=0 chnl=0
char id=41 x=277 y=2 width=3 height=12 xoffset=-1 yoffset=5 xadvance=4 page=0 chnl=0
char id=42 x=369 y=30 width=6 height=5 xoffset=-1 yoffset=5 xadvance=6 page=0 chnl=0
char id=43 x=315 y=30 width=7 height=7 xoffset=-1 yoffset=8 xadvance=7 page=0 chnl=0
char id=44 x=435 y=30 width=3 height=3 xoffset=-1 yoffset=14 xadvance=3 page=0 chnl=0
char id=45 x=497 y=30 width=5 height=1 xoffset=0 yoffset=11 xadvance=6 page=0 chnl=0
char id=46 x=466 y=30 width=1 height=2 xoffset=0 yoffset=13 xadvance=3 page=0 chnl=0
char id=47 x=446 y=2 width=6 height=11 xoffset=-1 yoffset=5 xadvance=6 page=0 chnl=0
char id=48 x=120 y=30 width=7 height=9 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0
char id=49 x=41 y=30 width=4 height=9 xoffset=0 yoffset=6 xadvance=7 page=0 chnl=0
char id=50 x=47 y=30 width=7 height=9 xoffset=-1 yoffset=6 xadvance=7 page=0 chnl=0
char id=51 x=56 y=30 width=6 height=9 xoffset=0 yoffset=6 xadvance=8 page=0 chnl=0
char id=52 x=64 y=30 width=8 height=9 xoffset=-1 yoffset=6 xadvance=8 page=0 chnl=0
char id=53 x=74 y=30 width=7 height=9 xoffset=-1 yoffset=6 xadvance=8 page=0 chnl=0
char id=54 x=83 y=30 width=7 height=9 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0
char id=55 x=385 y=18 width=6 height=10 xoffset=0 yoffset=6 xadvance=8 page=0 chnl=0
char id=56 x=92 y=30 width=7 height=9 xoffset=-1 yoffset=6 xadvance=8 page=0 chnl=0
char id=57 x=111 y=30 width=7 height=9 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0
char id=58 x=333 y=30 width=1 height=6 xoffset=0 yoffset=9 xadvance=3 page=0 chnl=0
char id=59 x=164 y=30 width=3 height=8 xoffset=-1 yoffset=9 xadvance=3 page=0 chnl=0
char id=60 x=214 y=30 width=6 height=7 xoffset=0 yoffset=8 xadvance=8 page=0 chnl=0
char id=61 x=449 y=30 width=7 height=3 xoffset=-1 yoffset=10 xadvance=8 page=0 chnl=0
char id=62 x=206 y=30 width=6 height=7 xoffset=0 yoffset=8 xadvance=8 page=0 chnl=0
char id=63 x=396 y=18 width=6 height=10 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=0
char id=64 x=128 y=2 width=12 height=13 xoffset=0 yoffset=5 xadvance=14 page=0 chnl=0
char id=65 x=0 y=18 width=8 height=10 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=0
char id=66 x=18 y=18 width=7 height=10 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0
char id=67 x=27 y=18 width=7 height=10 xoffset=0 yoffset=5 xadvance=8 page=0 chnl=0
char id=68 x=67 y=18 width=7 height=10 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0
char id=69 x=76 y=18 width=6 height=10 xoffset=0 yoffset=5 xadvance=8 page=0 chnl=0
char id=70 x=84 y=18 width=6 height=10 xoffset=0 yoffset=5 xadvance=7 page=0 chnl=0
char id=71 x=92 y=18 width=7 height=10 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0
char id=72 x=101 y=18 width=7 height=10 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0
char id=73 x=128 y=18 width=1 height=10 xoffset=0 yoffset=5 xadvance=3 page=0 chnl=0
char id=74 x=379 y=2 width=3 height=11 xoffset=-1 yoffset=5 xadvance=4 page=0 chnl=0
char id=75 x=131 y=18 width=7 height=10 xoffset=0 yoffset=5 xadvance=8 page=0 chnl=0
char id=76 x=140 y=18 width=6 height=10 xoffset=0 yoffset=5 xadvance=7 page=0 chnl=0
char id=77 x=148 y=18 width=9 height=10 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=0
char id=78 x=159 y=18 width=7 height=10 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0
char id=79 x=168 y=18 width=8 height=10 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=0
char id=80 x=178 y=18 width=7 height=10 xoffset=0 yoffset=5 xadvance=8 page=0 chnl=0
char id=81 x=262 y=2 width=8 height=12 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=0
char id=82 x=195 y=18 width=8 height=10 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0
char id=83 x=205 y=18 width=6 height=10 xoffset=0 yoffset=5 xadvance=8 page=0 chnl=0
char id=84 x=213 y=18 width=7 height=10 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=0
char id=85 x=222 y=18 width=7 height=10 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0
char id=86 x=231 y=18 width=8 height=10 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=0
char id=87 x=241 y=18 width=12 height=10 xoffset=-1 yoffset=5 xadvance=12 page=0 chnl=0
char id=88 x=260 y=18 width=8 height=10 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=0
char id=89 x=270 y=18 width=9 height=10 xoffset=-2 yoffset=5 xadvance=7 page=0 chnl=0
char id=90 x=281 y=18 width=6 height=10 xoffset=0 yoffset=5 xadvance=8 page=0 chnl=0
char id=91 x=282 y=2 width=3 height=12 xoffset=0 yoffset=5 xadvance=4 page=0 chnl=0
char id=92 x=462 y=2 width=6 height=11 xoffset=-1 yoffset=5 xadvance=6 page=0 chnl=0
char id=93 x=287 y=2 width=3 height=12 xoffset=-1 yoffset=5 xadvance=4 page=0 chnl=0
char id=94 x=360 y=30 width=7 height=5 xoffset=-1 yoffset=6 xadvance=8 page=0 chnl=0
char id=95 x=481 y=30 width=7 height=1 xoffset=0 yoffset=16 xadvance=9 page=0 chnl=0
char id=96 x=423 y=30 width=4 height=3 xoffset=-1 yoffset=4 xadvance=3 page=0 chnl=0
char id=97 x=198 y=30 width=6 height=7 xoffset=0 yoffset=8 xadvance=7 page=0 chnl=0
char id=98 x=296 y=18 width=6 height=10 xoffset=0 yoffset=5 xadvance=8 page=0 chnl=0
char id=99 x=222 y=30 width=5 height=7 xoffset=0 yoffset=8 xadvance=6 page=0 chnl=0
char id=100 x=304 y=18 width=6 height=10 xoffset=0 yoffset=5 xadvance=8 page=0 chnl=0
char id=101 x=229 y=30 width=6 height=7 xoffset=0 yoffset=8 xadvance=8 page=0 chnl=0
char id=102 x=312 y=18 width=5 height=10 xoffset=-1 yoffset=5 xadvance=4 page=0 chnl=0
char id=103 x=319 y=18 width=7 height=10 xoffset=0 yoffset=8 xadvance=7 page=0 chnl=0
char id=104 x=328 y=18 width=6 height=10 xoffset=0 yoffset=5 xadvance=8 page=0 chnl=0
char id=105 x=336 y=18 width=1 height=10 xoffset=0 yoffset=5 xadvance=3 page=0 chnl=0
char id=106 x=120 y=2 width=3 height=13 xoffset=-2 yoffset=5 xadvance=3 page=0 chnl=0
char id=107 x=349 y=18 width=6 height=10 xoffset=0 yoffset=5 xadvance=7 page=0 chnl=0
char id=108 x=357 y=18 width=1 height=10 xoffset=0 yoffset=5 xadvance=3 page=0 chnl=0
char id=109 x=237 y=30 width=9 height=7 xoffset=0 yoffset=8 xadvance=11 page=0 chnl=0
char id=110 x=248 y=30 width=6 height=7 xoffset=0 yoffset=8 xadvance=8 page=0 chnl=0
char id=111 x=256 y=30 width=6 height=7 xoffset=0 yoffset=8 xadvance=8 page=0 chnl=0
char id=112 x=360 y=18 width=6 height=10 xoffset=0 yoffset=8 xadvance=8 page=0 chnl=0
char id=113 x=368 y=18 width=6 height=10 xoffset=0 yoffset=8 xadvance=8 page=0 chnl=0
char id=114 x=158 y=30 width=4 height=8 xoffset=0 yoffset=7 xadvance=5 page=0 chnl=0
char id=115 x=264 y=30 width=5 height=7 xoffset=0 yoffset=8 xadvance=7 page=0 chnl=0
char id=116 x=34 y=30 width=5 height=9 xoffset=-1 yoffset=6 xadvance=5 page=0 chnl=0
char id=117 x=271 y=30 width=5 height=7 xoffset=0 yoffset=8 xadvance=7 page=0 chnl=0
char id=118 x=278 y=30 width=7 height=7 xoffset=-1 yoffset=8 xadvance=7 page=0 chnl=0
char id=119 x=287 y=30 width=11 height=7 xoffset=-1 yoffset=8 xadvance=11 page=0 chnl=0
char id=120 x=300 y=30 width=6 height=7 xoffset=-1 yoffset=8 xadvance=6 page=0 chnl=0
char id=121 x=376 y=18 width=7 height=10 xoffset=-1 yoffset=8 xadvance=7 page=0 chnl=0
char id=122 x=308 y=30 width=5 height=7 xoffset=0 yoffset=8 xadvance=7 page=0 chnl=0
char id=123 x=292 y=2 width=5 height=12 xoffset=-1 yoffset=5 xadvance=5 page=0 chnl=0
char id=124 x=125 y=2 width=1 height=13 xoffset=0 yoffset=5 xadvance=3 page=0 chnl=0
char id=125 x=299 y=2 width=5 height=12 xoffset=-1 yoffset=5 xadvance=5 page=0 chnl=0
char id=126 x=469 y=30 width=7 height=2 xoffset=-1 yoffset=10 xadvance=8 page=0 chnl=0
char id=160 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=15 xadvance=3 page=0 chnl=0
char id=161 x=31 y=30 width=1 height=9 xoffset=0 yoffset=8 xadvance=3 page=0 chnl=0
char id=162 x=289 y=18 width=5 height=10 xoffset=0 yoffset=7 xadvance=7 page=0 chnl=0
char id=163 x=22 y=30 width=7 height=9 xoffset=-1 yoffset=6 xadvance=8 page=0 chnl=0
char id=164 x=189 y=30 width=7 height=7 xoffset=-1 yoffset=8 xadvance=7 page=0 chnl=0
char id=165 x=11 y=30 width=9 height=9 xoffset=-2 yoffset=6 xadvance=7 page=0 chnl=0
char id=166 x=150 y=2 width=1 height=13 xoffset=0 yoffset=5 xadvance=3 page=0 chnl=0
char id=167 x=486 y=2 width=5 height=11 xoffset=0 yoffset=6 xadvance=7 page=0 chnl=0
char id=168 x=0 y=42 width=4 height=1 xoffset=-1 yoffset=5 xadvance=4 page=0 chnl=0
char id=169 x=148 y=30 width=8 height=8 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=0
char id=170 x=416 y=30 width=5 height=4 xoffset=0 yoffset=6 xadvance=6 page=0 chnl=0
char id=171 x=352 y=30 width=6 height=5 xoffset=0 yoffset=9 xadvance=7 page=0 chnl=0
char id=172 x=440 y=30 width=7 height=3 xoffset=-1 yoffset=10 xadvance=8 page=0 chnl=0
char id=174 x=138 y=30 width=8 height=8 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=0
char id=175 x=490 y=30 width=5 height=1 xoffset=-2 yoffset=6 xadvance=3 page=0 chnl=0
char id=176 x=410 y=30 width=4 height=4 xoffset=1 yoffset=5 xadvance=8 page=0 chnl=0
char id=177 x=324 y=30 width=7 height=6 xoffset=-1 yoffset=8 xadvance=7 page=0 chnl=0
char id=178 x=405 y=30 width=3 height=4 xoffset=-1 yoffset=4 xadvance=4 page=0 chnl=0
char id=179 x=399 y=30 width=4 height=4 xoffset=-1 yoffset=4 xadvance=4 page=0 chnl=0
char id=180 x=429 y=30 width=4 height=3 xoffset=-1 yoffset=4 xadvance=4 page=0 chnl=0
char id=181 x=121 y=18 width=5 height=10 xoffset=0 yoffset=8 xadvance=7 page=0 chnl=0
char id=182 x=110 y=18 width=9 height=10 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=0
char id=183 x=478 y=30 width=1 height=2 xoffset=0 yoffset=10 xadvance=3 page=0 chnl=0
char id=184 x=394 y=30 width=3 height=4 xoffset=-1 yoffset=14 xadvance=4 page=0 chnl=0
char id=185 x=389 y=30 width=3 height=4 xoffset=-1 yoffset=4 xadvance=4 page=0 chnl=0
char id=186 x=383 y=30 width=4 height=4 xoffset=0 yoffset=6 xadvance=6 page=0 chnl=0
char id=187 x=344 y=30 width=6 height=5 xoffset=0 yoffset=9 xadvance=7 page=0 chnl=0
char id=188 x=315 y=2 width=8 height=12 xoffset=-1 yoffset=4 xadvance=8 page=0 chnl=0
char id=189 x=325 y=2 width=7 height=12 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=0
char id=190 x=153 y=2 width=8 height=13 xoffset=-1 yoffset=3 xadvance=8 page=0 chnl=0
char id=191 x=36 y=18 width=6 height=10 xoffset=-1 yoffset=8 xadvance=6 page=0 chnl=0
char id=192 x=4 y=2 width=8 height=14 xoffset=-1 yoffset=1 xadvance=8 page=0 chnl=0
char id=193 x=14 y=2 width=8 height=14 xoffset=-1 yoffset=1 xadvance=8 page=0 chnl=0
char id=194 x=173 y=2 width=8 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=195 x=183 y=2 width=8 height=13 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=0
char id=196 x=334 y=2 width=8 height=12 xoffset=-1 yoffset=3 xadvance=8 page=0 chnl=0
char id=197 x=344 y=2 width=9 height=12 xoffset=-1 yoffset=3 xadvance=9 page=0 chnl=0
char id=198 x=482 y=18 width=12 height=10 xoffset=-1 yoffset=5 xadvance=13 page=0 chnl=0
char id=199 x=193 y=2 width=6 height=13 xoffset=0 yoffset=5 xadvance=7 page=0 chnl=0
char id=200 x=24 y=2 width=6 height=14 xoffset=0 yoffset=1 xadvance=8 page=0 chnl=0
char id=201 x=32 y=2 width=6 height=14 xoffset=0 yoffset=1 xadvance=8 page=0 chnl=0
char id=202 x=209 y=2 width=6 height=13 xoffset=0 yoffset=2 xadvance=8 page=0 chnl=0
char id=203 x=355 y=2 width=7 height=12 xoffset=0 yoffset=3 xadvance=8 page=0 chnl=0
char id=204 x=49 y=2 width=4 height=14 xoffset=-2 yoffset=1 xadvance=3 page=0 chnl=0
char id=205 x=55 y=2 width=4 height=14 xoffset=-1 yoffset=1 xadvance=3 page=0 chnl=0
char id=206 x=217 y=2 width=5 height=13 xoffset=-2 yoffset=2 xadvance=3 page=0 chnl=0
char id=207 x=374 y=2 width=3 height=12 xoffset=-1 yoffset=3 xadvance=3 page=0 chnl=0
char id=208 x=339 y=18 width=8 height=10 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=0
char id=209 x=224 y=2 width=7 height=13 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=0
char id=210 x=61 y=2 width=8 height=14 xoffset=0 yoffset=1 xadvance=10 page=0 chnl=0
char id=211 x=71 y=2 width=8 height=14 xoffset=0 yoffset=1 xadvance=10 page=0 chnl=0
char id=212 x=233 y=2 width=8 height=13 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=0
char id=213 x=243 y=2 width=8 height=13 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=0
char id=214 x=364 y=2 width=8 height=12 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=0
char id=215 x=181 y=30 width=6 height=7 xoffset=0 yoffset=8 xadvance=8 page=0 chnl=0
char id=216 x=81 y=2 width=8 height=14 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=0
char id=217 x=91 y=2 width=7 height=14 xoffset=0 yoffset=1 xadvance=9 page=0 chnl=0
char id=218 x=100 y=2 width=7 height=14 xoffset=0 yoffset=1 xadvance=9 page=0 chnl=0
char id=219 x=253 y=2 width=7 height=13 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=0
char id=220 x=306 y=2 width=7 height=12 xoffset=0 yoffset=3 xadvance=9 page=0 chnl=0
char id=221 x=109 y=2 width=9 height=14 xoffset=-2 yoffset=1 xadvance=7 page=0 chnl=0
char id=222 x=426 y=18 width=7 height=10 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0
char id=223 x=418 y=18 width=6 height=10 xoffset=0 yoffset=5 xadvance=7 page=0 chnl=0
char id=224 x=423 y=2 width=6 height=11 xoffset=0 yoffset=4 xadvance=7 page=0 chnl=0
char id=225 x=407 y=2 width=6 height=11 xoffset=0 yoffset=4 xadvance=7 page=0 chnl=0
char id=226 x=187 y=18 width=6 height=10 xoffset=0 yoffset=5 xadvance=7 page=0 chnl=0
char id=227 x=443 y=18 width=6 height=10 xoffset=0 yoffset=5 xadvance=7 page=0 chnl=0
char id=228 x=451 y=18 width=6 height=10 xoffset=0 yoffset=5 xadvance=7 page=0 chnl=0
char id=229 x=415 y=2 width=6 height=11 xoffset=0 yoffset=4 xadvance=7 page=0 chnl=0
char id=230 x=169 y=30 width=10 height=7 xoffset=0 yoffset=8 xadvance=12 page=0 chnl=0
char id=231 x=404 y=18 width=5 height=10 xoffset=0 yoffset=8 xadvance=6 page=0 chnl=0
char id=232 x=454 y=2 width=6 height=11 xoffset=0 yoffset=4 xadvance=8 page=0 chnl=0
char id=233 x=470 y=2 width=6 height=11 xoffset=0 yoffset=4 xadvance=8 page=0 chnl=0
char id=234 x=474 y=18 width=6 height=10 xoffset=0 yoffset=5 xadvance=8 page=0 chnl=0
char id=235 x=10 y=18 width=6 height=10 xoffset=0 yoffset=5 xadvance=8 page=0 chnl=0
char id=236 x=499 y=2 width=4 height=11 xoffset=-2 yoffset=4 xadvance=3 page=0 chnl=0
char id=237 x=493 y=2 width=4 height=11 xoffset=-1 yoffset=4 xadvance=3 page=0 chnl=0
char id=238 x=44 y=18 width=5 height=10 xoffset=-2 yoffset=5 xadvance=3 page=0 chnl=0
char id=239 x=255 y=18 width=3 height=10 xoffset=-1 yoffset=5 xadvance=3 page=0 chnl=0
char id=240 x=478 y=2 width=6 height=11 xoffset=0 yoffset=4 xadvance=8 page=0 chnl=0
char id=241 x=466 y=18 width=6 height=10 xoffset=0 yoffset=5 xadvance=8 page=0 chnl=0
char id=242 x=438 y=2 width=6 height=11 xoffset=0 yoffset=4 xadvance=8 page=0 chnl=0
char id=243 x=399 y=2 width=6 height=11 xoffset=0 yoffset=4 xadvance=8 page=0 chnl=0
char id=244 x=435 y=18 width=6 height=10 xoffset=0 yoffset=5 xadvance=8 page=0 chnl=0
char id=245 x=59 y=18 width=6 height=10 xoffset=0 yoffset=5 xadvance=8 page=0 chnl=0
char id=246 x=51 y=18 width=6 height=10 xoffset=0 yoffset=5 xadvance=8 page=0 chnl=0
char id=247 x=336 y=30 width=6 height=5 xoffset=0 yoffset=9 xadvance=8 page=0 chnl=0
char id=248 x=384 y=2 width=6 height=11 xoffset=0 yoffset=6 xadvance=8 page=0 chnl=0
char id=249 x=392 y=2 width=5 height=11 xoffset=0 yoffset=4 xadvance=7 page=0 chnl=0
char id=250 x=431 y=2 width=5 height=11 xoffset=0 yoffset=4 xadvance=7 page=0 chnl=0
char id=251 x=411 y=18 width=5 height=10 xoffset=0 yoffset=5 xadvance=7 page=0 chnl=0
char id=252 x=459 y=18 width=5 height=10 xoffset=0 yoffset=5 xadvance=7 page=0 chnl=0
char id=253 x=40 y=2 width=7 height=14 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=0
char id=254 x=201 y=2 width=6 height=13 xoffset=0 yoffset=5 xadvance=8 page=0 chnl=0
char id=255 x=163 y=2 width=8 height=13 xoffset=-2 yoffset=5 xadvance=7 page=0 chnl=0
char id=8226 x=377 y=30 width=4 height=4 xoffset=1 yoffset=10 xadvance=8 page=0 chnl=0
char id=8364 x=129 y=30 width=7 height=9 xoffset=-1 yoffset=6 xadvance=8 page=0 chnl=0
kernings count=0

380
assets/ui/uiskin.atlas Normal file
View File

@ -0,0 +1,380 @@
uiskin.png
size: 512,512
format: RGBA8888
filter: Nearest,Nearest
repeat: none
button-normal
rotate: false
xy: 2, 111
size: 41, 42
orig: 41, 42
offset: 0, 0
index: -1
button-normal-over
rotate: false
xy: 102, 263
size: 41, 42
orig: 41, 42
offset: 0, 0
index: -1
button-normal-pressed
rotate: false
xy: 2, 67
size: 41, 42
orig: 41, 42
offset: 0, 0
index: -1
check
rotate: false
xy: 290, 306
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
check-on
rotate: false
xy: 316, 306
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
checkbox
rotate: false
xy: 482, 309
size: 20, 21
orig: 20, 21
offset: 0, 0
index: -1
checkbox-over
rotate: false
xy: 438, 309
size: 20, 21
orig: 20, 21
offset: 0, 0
index: -1
checkbox-selected
rotate: false
xy: 32, 18
size: 20, 21
orig: 20, 21
offset: 0, 0
index: -1
checkbox-selected-over
rotate: false
xy: 460, 309
size: 20, 21
orig: 20, 21
offset: 0, 0
index: -1
font
rotate: false
xy: 2, 402
size: 504, 44
orig: 504, 44
offset: 0, 0
index: -1
font-list
rotate: false
xy: 2, 332
size: 505, 30
orig: 505, 30
offset: 0, 0
index: -1
font-subtitle
rotate: false
xy: 2, 364
size: 505, 36
orig: 505, 36
offset: 0, 0
index: -1
font-window
rotate: false
xy: 2, 448
size: 506, 62
orig: 506, 62
offset: 0, 0
index: -1
knob-h
rotate: false
xy: 188, 268
size: 24, 1
orig: 24, 1
offset: 0, 0
index: -1
knob-v
rotate: false
xy: 508, 422
size: 1, 24
orig: 1, 24
offset: 0, 0
index: -1
line-h
rotate: false
xy: 102, 260
size: 24, 1
orig: 24, 1
offset: 0, 0
index: -1
line-v
rotate: false
xy: 509, 396
size: 1, 24
orig: 1, 24
offset: 0, 0
index: -1
list
rotate: false
xy: 188, 271
size: 43, 34
orig: 43, 34
offset: 0, 0
index: -1
progress-bar
rotate: false
xy: 2, 307
size: 252, 5
orig: 252, 5
offset: 0, 0
index: -1
progress-bar-knob
rotate: false
xy: 2, 314
size: 252, 5
orig: 252, 5
offset: 0, 0
index: -1
progress-bar-square
rotate: false
xy: 256, 309
size: 4, 4
orig: 4, 4
offset: 0, 0
index: -1
progress-bar-square-knob
rotate: false
xy: 504, 328
size: 2, 2
orig: 2, 2
offset: 0, 0
index: -1
radio
rotate: false
xy: 366, 308
size: 22, 22
orig: 22, 22
offset: 0, 0
index: -1
radio-over
rotate: false
xy: 390, 308
size: 22, 22
orig: 22, 22
offset: 0, 0
index: -1
radio-selected
rotate: false
xy: 342, 308
size: 22, 22
orig: 22, 22
offset: 0, 0
index: -1
radio-selected-over
rotate: false
xy: 414, 308
size: 22, 22
orig: 22, 22
offset: 0, 0
index: -1
rect
rotate: false
xy: 32, 41
size: 12, 24
orig: 12, 24
offset: 0, 0
index: -1
scrollbar
rotate: false
xy: 46, 150
size: 17, 16
orig: 17, 16
offset: 0, 0
index: -1
select
rotate: false
xy: 262, 306
size: 26, 24
split: 4, 15, 0, 24
orig: 26, 24
offset: 0, 0
index: -1
select-box
rotate: false
xy: 145, 263
size: 41, 42
orig: 41, 42
offset: 0, 0
index: -1
select-box-open
rotate: false
xy: 58, 214
size: 41, 42
orig: 41, 42
offset: 0, 0
index: -1
selection
rotate: false
xy: 46, 168
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
slider
rotate: false
xy: 2, 321
size: 258, 9
orig: 258, 9
offset: 0, 0
index: -1
slider-knob
rotate: false
xy: 46, 57
size: 9, 9
orig: 9, 9
offset: 0, 0
index: -1
slider-knob-over
rotate: false
xy: 46, 46
size: 9, 9
orig: 9, 9
offset: 0, 0
index: -1
spinner-down
rotate: false
xy: 45, 100
size: 16, 14
orig: 16, 14
offset: 0, 0
index: -1
spinner-down-over
rotate: false
xy: 45, 68
size: 16, 14
orig: 16, 14
offset: 0, 0
index: -1
spinner-down-pressed
rotate: false
xy: 45, 116
size: 16, 14
orig: 16, 14
offset: 0, 0
index: -1
spinner-textfield
rotate: false
xy: 2, 7
size: 28, 28
orig: 28, 28
offset: 0, 0
index: -1
spinner-textfield-selected
rotate: false
xy: 2, 37
size: 28, 28
orig: 28, 28
offset: 0, 0
index: -1
spinner-up
rotate: false
xy: 32, 2
size: 16, 14
orig: 16, 14
offset: 0, 0
index: -1
spinner-up-over
rotate: false
xy: 45, 84
size: 16, 14
orig: 16, 14
offset: 0, 0
index: -1
spinner-up-pressed
rotate: false
xy: 50, 2
size: 16, 14
orig: 16, 14
offset: 0, 0
index: -1
square
rotate: false
xy: 256, 315
size: 4, 4
orig: 4, 4
offset: 0, 0
index: -1
textfield
rotate: false
xy: 2, 155
size: 42, 47
orig: 42, 47
offset: 0, 0
index: -1
textfield-selected
rotate: false
xy: 58, 258
size: 42, 47
orig: 42, 47
offset: 0, 0
index: -1
tree-minus
rotate: false
xy: 46, 186
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
tree-plus
rotate: false
xy: 45, 132
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
white
rotate: false
xy: 509, 393
size: 1, 1
orig: 1, 1
offset: 0, 0
index: -1
dot
rotate: false
xy: 509, 393
size: 1, 1
orig: 1, 1
offset: 0, 0
index: -1
window
rotate: false
xy: 2, 204
size: 54, 101
orig: 54, 101
offset: 0, 0
index: -1
window-border
rotate: false
xy: 248, 279
size: 5, 26
split: 2, 2, 23, 2
orig: 5, 26
offset: 0, 0
index: -1
window-resize
rotate: false
xy: 233, 271
size: 13, 34
split: 2, 10, 23, 10
orig: 13, 34
offset: 0, 0
index: -1

438
assets/ui/uiskin.json Normal file
View File

@ -0,0 +1,438 @@
{
com.badlogic.gdx.graphics.g2d.BitmapFont: {
default: {
file: font.fnt
}
font: {
file: font.fnt
}
list: {
file: font-list.fnt
}
subtitle: {
file: font-subtitle.fnt
}
window: {
file: font-window.fnt
}
}
com.badlogic.gdx.graphics.Color: {
black: {
r: 0
g: 0
b: 0
a: 1
}
disabled: {
r: 0.23137255
g: 0.24705882
b: 0.25882354
a: 1
}
highlight: {
r: 0.19215687
g: 0.6627451
b: 0.95686275
a: 1
}
message: {
r: 0.44313726
g: 0.47843137
b: 0.5372549
a: 1
}
split: {
r: 0.44313726
g: 0.47843137
b: 0.5372549
a: 1
}
white: {
r: 1
g: 1
b: 1
a: 1
}
}
com.badlogic.gdx.scenes.scene2d.ui.Skin$TintedDrawable: {
split: {
name: white
color: split
}
black: {
name: white
color: black
}
highlight: {
name: white
color: highlight
}
}
com.badlogic.gdx.scenes.scene2d.utils.TiledDrawable: {
progress-bar-knob-t: {
region: progress-bar-knob
minWidth: 0
minHeight: 5
}
}
com.badlogic.gdx.scenes.scene2d.ui.Button$ButtonStyle: {
default: {
up: button-normal
down: button-normal-pressed
over: button-normal-over
focused: button-normal-over
}
spinner-up: {
up: spinner-up
down: spinner-up-pressed
over: spinner-up-over
}
spinner-down: {
up: spinner-down
down: spinner-down-pressed
over: spinner-down-over
}
}
com.badlogic.gdx.scenes.scene2d.ui.CheckBox$CheckBoxStyle: {
default: {
checkboxOn: checkbox-selected
checkboxOff: checkbox
checkboxOnOver: checkbox-selected-over
checkboxOver: checkbox-over
font: font
}
radio: {
checkboxOn: radio-selected
checkboxOff: radio
checkboxOnOver: radio-selected-over
checkboxOver: radio-over
font: font
}
}
com.badlogic.gdx.scenes.scene2d.ui.ImageButton$ImageButtonStyle: {
default: {
up: button-normal
down: button-normal-pressed
over: button-normal-over
focused: button-normal-over
}
}
com.badlogic.gdx.scenes.scene2d.ui.ImageTextButton$ImageTextButtonStyle: {
default: {
font: font
up: button-normal
down: button-normal-pressed
over: button-normal-over
focused: button-normal-pressed
}
}
com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle: {
default: {
font: font
}
window: {
font: window
}
list: {
font: list
}
subtitle: {
font: subtitle
}
}
com.badlogic.gdx.scenes.scene2d.ui.List$ListStyle: {
default: {
font: list
fontColorSelected: white
fontColorUnselected: white
selection: selection
background: list
}
list-nobg: {
font: list
fontColorSelected: white
fontColorUnselected: white
selection: selection
}
}
com.badlogic.gdx.scenes.scene2d.ui.ProgressBar$ProgressBarStyle: {
default-horizontal: {
background: progress-bar-square
knobBefore: progress-bar-square-knob
}
default-vertical: {
background: progress-bar-square
knobBefore: progress-bar-square-knob
}
curved: {
background: progress-bar
knobBefore: progress-bar-knob-t
}
}
com.badlogic.gdx.scenes.scene2d.ui.ScrollPane$ScrollPaneStyle: {
default: {
hScrollKnob: scrollbar
vScrollKnob: scrollbar
}
list: {
background: list
hScrollKnob: scrollbar
vScrollKnob: scrollbar
}
}
com.badlogic.gdx.scenes.scene2d.ui.SelectBox$SelectBoxStyle: {
default: {
font: font
fontColor: white
background: select-box
scrollStyle: list
listStyle: list-nobg
backgroundOpen: select-box-open
}
}
com.badlogic.gdx.scenes.scene2d.ui.Slider$SliderStyle: {
default-horizontal: {
knobOver: slider-knob-over
knobDown: slider-knob-over
background: progress-bar-square
knob: slider-knob
}
default-vertical: {
knobOver: slider-knob-over
knobDown: slider-knob-over
background: progress-bar-square
knob: slider-knob
}
curved: {
knobOver: slider-knob-over
knobDown: slider-knob-over
background: slider
knob: slider-knob
}
}
com.badlogic.gdx.scenes.scene2d.ui.SplitPane$SplitPaneStyle: {
default-horizontal: {
handle: split
}
default-vertical: {
handle: split
}
}
com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle: {
default: {
font: font
up: button-normal
down: button-normal-pressed
over: button-normal-over
focused: button-normal-over
}
}
com.badlogic.gdx.scenes.scene2d.ui.TextField$TextFieldStyle: {
default: {
font: font
fontColor: white
disabledFontColor: disabled
background: textfield
focusedBackground: textfield-selected
cursor: white
selection: highlight
messageFont: font
messageFontColor: message
}
spinner: {
font: font
fontColor: white
disabledFontColor: disabled
background: spinner-textfield
focusedBackground: spinner-textfield-selected
cursor: white
selection: highlight
messageFont: font
messageFontColor: message
}
}
com.badlogic.gdx.scenes.scene2d.ui.TextTooltip$TextTooltipStyle: {
default: {
label: default
background: list
}
}
com.badlogic.gdx.scenes.scene2d.ui.Touchpad$TouchpadStyle: {
default: {
background: list
knob: slider-knob
}
}
com.badlogic.gdx.scenes.scene2d.ui.Window$WindowStyle: {
default: {
background: window
titleFont: window
}
},
com.badlogic.gdx.graphics.Color: {
white: { r: 1, g: 1, b: 1, a: 1 },
gray: { r: 0.5, g: 0.5, b: 0.5, a: 1 },
black: { r: 0, g: 0, b: 0, a: 1 },
up: { r: 0.1, g: 0.1, b: 0.1, a: 1 },
over: { r: 0.3, g: 0.3, b: 0.3, a: 1 },
down: { r: 0.3, g: 0, b: 0, a: 1 },
checked: { r: 0.3, g: 0, b: 0, a: 1 },
checkedOver: { r: 0.4, g: 0, b: 0, a: 1 },
disabled: { r: 0.4, g: 0.4, b: 0.4, a: 1 },
background: { r: 0.2, g: 0.2, b: 0.2, a: 1 },
selection: { r: 0.3, g: 0, b: 0, a: 1 },
semiTransparent: { r: 0, g: 0, b: 0, a: 0.6 },
font: white
fontOver: white
fontDown: gray
fontChecked: white
fontCheckedOver: white
fontDisabled: gray
},
com.badlogic.gdx.scenes.scene2d.ui.Skin$TintedDrawable: {
buttonUp: { name: rect, color: up },
buttonOver: { name: rect, color: over },
buttonDown: { name: rect, color: down },
buttonDisabled: { name: rect, color: disabled },
buttonChecked: { name: rect, color: checked },
buttonCheckedOver: { name: rect, color: checkedOver },
checkBoxOn: { name: check-on, color: up },
checkBoxOff: { name: check, color: up },
checkBoxOver: { name: check, color: over },
checkBoxOnDisabled: { name: check-on, color: disabled },
checkBoxOffDisabled: { name: check, color: disabled },
icon: { name: check-on, color: font },
selection: { name: dot, color: selection },
list: { name: rect, color: background },
progressHorizontal: { name: line-v, color: up },
progressHorizontalKnob: { name: line-v, color: down },
progressHorizontalDisabled: { name: line-v, color: disabled },
progressHorizontalKnobDisabled: { name: line-v, color: disabled },
progressVertical: { name: line-h, color: up },
progressVerticalKnob: { name: line-h, color: down },
progressVerticalDisabled: { name: line-h, color: disabled },
progressVerticalKnobDisabled: { name: line-h, color: disabled },
scrollHorizontal: { name: line-v, color: up },
scrollVertical: { name: line-h, color: up },
scrollKnob: { name: knob-v, color: down },
scrollKnobVertical: { name: knob-h, color: down },
scrollPane: { name: rect, color: background },
selectBox: { name: select, color: up },
selectOver: { name: select, color: over },
selectDown: { name: select, color: over },
selectDisabled: { name: select, color: disabled },
selectList: { name: rect, color: over },
splitPane: { name: square, color: down },
sliderHorizontal: { name: square, color: up },
sliderKnob: { name: rect, color: up },
sliderKnobOver: { name: rect, color: over },
sliderKnobDown: { name: rect, color: down },
sliderKnobDisabled: { name: rect, color: disabled },
sliderVertical: { name: square, color: up },
sliderVerticalKnob: { name: rect, color: up },
sliderVerticalKnobOver: { name: rect, color: over },
sliderVerticalKnobDown: { name: rect, color: down },
sliderVerticalKnobDisabled: { name: rect, color: disabled },
textField: { name: rect, color: up },
textFieldDown: { name: rect, color: over },
textFieldDisabled: { name: rect, color: disabled },
textFieldCursor: { name: dot, color: font },
tooltip: { name: rect, color: up },
touchpad: { name: rect, color: over },
touchpadKnob: { name: check-on, color: down },
tree: { name: rect, color: background },
treeOver: { name: dot, color: over },
treeMinus: { name: tree-minus, color: up },
treePlus: { name: tree-plus, color: up },
window: { name: rect, color: background },
windowResize: { name: window-resize, color: background },
windowBorder: { name: window-border, color: background },
alpha: { name: dot, color: semiTransparent }
},
com.badlogic.gdx.scenes.scene2d.ui.Button$ButtonStyle: {
default: { up: buttonUp, over: buttonOver, down: buttonDown, disabled: buttonDisabled },
toggle: { up: buttonUp, over: buttonOver, down: buttonDown, checked: buttonChecked, checkedOver: buttonCheckedOver, disabled: buttonDisabled }
},
com.badlogic.gdx.scenes.scene2d.ui.CheckBox$CheckBoxStyle: {
default: { checkboxOn: checkBoxOn, checkboxOff: checkBoxOff, checkboxOver: checkBoxOver, checkboxOnDisabled: checkBoxOnDisabled,
checkboxOffDisabled: checkBoxOffDisabled, font: default, fontColor: font, overFontColor: fontOver, downFontColor: fontDown,
checkedFontColor: fontChecked, checkedOverFontColor: fontCheckedOver, disabledFontColor: fontDisabled, pressedOffsetY: -1, pressedOffsetX: 1 }
},
com.badlogic.gdx.scenes.scene2d.ui.ImageButton$ImageButtonStyle: {
default: { up: buttonUp, over: buttonOver, down: buttonDown, disabled: buttonDisabled, imageUp: icon }
},
com.badlogic.gdx.scenes.scene2d.ui.ImageTextButton$ImageTextButtonStyle: {
default: { up: buttonUp, over: buttonOver, down: buttonDown, disabled: buttonDisabled, font: default, fontColor: font,
overFontColor: fontOver, downFontColor: fontDown, disabledFontColor: fontDisabled, pressedOffsetY: -1, pressedOffsetX: 1, imageUp: icon }
},
com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle: {
default: { font: default, fontColor: font },
white: { font: default, fontColor: white }
},
com.badlogic.gdx.scenes.scene2d.ui.List$ListStyle: {
default: { fontColorUnselected: font, selection: selection, fontColorSelected: fontDown, font: default },
background: { background: list, fontColorUnselected: font, selection: selection, fontColorSelected: fontDown, font: default }
},
com.badlogic.gdx.scenes.scene2d.ui.ProgressBar$ProgressBarStyle: {
default-horizontal: { background: progressHorizontal, knobBefore: progressHorizontalKnob,
disabledBackground: progressHorizontalDisabled, disabledKnobBefore: progressHorizontalKnobDisabled },
default-vertical: { background: progressVertical, knobBefore: progressVerticalKnob,
disabledBackground: progressVerticalDisabled, disabledKnobBefore: progressVerticalKnobDisabled }
},
com.badlogic.gdx.scenes.scene2d.ui.ScrollPane$ScrollPaneStyle: {
default: { hScrollKnob: scrollKnob, vScrollKnob: scrollKnobVertical, hScroll: scrollHorizontal, vScroll: scrollVertical },
clean: { hScrollKnob: scrollKnob, vScrollKnob: scrollKnobVertical },
background: { background: scrollPane, hScrollKnob: scrollKnob, vScrollKnob: scrollKnobVertical, hScroll: scrollHorizontal, vScroll: scrollVertical }
},
com.badlogic.gdx.scenes.scene2d.ui.SelectBox$SelectBoxStyle: {
default: { font: default, fontColor: font, disabledFontColor: fontDisabled, background: selectBox, backgroundOver: selectOver,
backgroundOpen: selectDown, backgroundDisabled: selectDisabled, scrollStyle: default, listStyle:
{ background: selectList, fontColorUnselected: font, selection: selection, fontColorSelected: fontDown, font: default }
}
},
com.badlogic.gdx.scenes.scene2d.ui.Slider$SliderStyle: {
default-horizontal: { background: sliderHorizontal, knob: sliderKnob, knobOver: sliderKnobOver, knobDown: sliderKnobDown,
disabledKnob: sliderKnobDisabled },
default-vertical: { background: sliderVertical, knob: sliderVerticalKnob, knobOver: sliderVerticalKnobOver,
knobDown: sliderVerticalKnobDown, disabledKnob: sliderVerticalKnobDisabled }
},
com.badlogic.gdx.scenes.scene2d.ui.SplitPane$SplitPaneStyle: {
default-vertical: { handle: splitPane },
default-horizontal: { handle: splitPane }
},
com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle: {
default: { up: buttonUp, over: buttonOver, down: buttonDown, disabled: buttonDisabled, font: default, fontColor: font,
overFontColor: fontOver, downFontColor: fontDown, disabledFontColor: fontDisabled, pressedOffsetY: -1, pressedOffsetX: 1 },
toggle: { up: buttonUp, over: buttonOver, down: buttonDown, checked: buttonChecked, checkedOver: buttonCheckedOver,
disabled: buttonDisabled, font: default, fontColor: font, overFontColor: fontOver, downFontColor: fontDown, disabledFontColor:
fontDisabled, checkedFontColor: fontChecked, checkedOverFontColor: fontCheckedOver, pressedOffsetY: -1, pressedOffsetX: 1 },
text: { font: default, fontColor: up, overFontColor: over, downFontColor: down, disabledFontColor: disabled,
pressedOffsetY: -1, pressedOffsetX: 1 },
textToggle: { font: default, fontColor: up, overFontColor: over, downFontColor: down, disabledFontColor:
disabled, checkedFontColor: font, checkedOverFontColor: fontOver, pressedOffsetY: -1, pressedOffsetX: 1 }
},
com.badlogic.gdx.scenes.scene2d.ui.TextField$TextFieldStyle: {
default: { font: default, messageFont: default, fontColor: font, focusedFontColor: fontOver, disabledFontColor: fontDisabled,
messageFontColor: fontDown, background: textField, focusedBackground: textFieldDown, disabledBackground: textFieldDisabled,
cursor: textFieldCursor, selection: selection }
},
com.badlogic.gdx.scenes.scene2d.ui.TextTooltip$TextTooltipStyle: {
default: { label: default, background: tooltip }
},
com.badlogic.gdx.scenes.scene2d.ui.Touchpad$TouchpadStyle: {
default: { background: touchpad, knob: touchpadKnob }
},
com.badlogic.gdx.scenes.scene2d.ui.Tree$TreeStyle: {
default: { minus: treeMinus, plus: treePlus, selection: selection, over: treeOver },
background: { background: tree, minus: treeMinus, plus: treePlus, selection: selection, over: treeOver }
},
com.badlogic.gdx.scenes.scene2d.ui.Window$WindowStyle: {
default: { titleFont: default, background: window, titleFontColor: fontDisabled },
resize: { titleFont: default, background: windowResize, titleFontColor: fontDisabled },
border: { titleFont: default, background: windowBorder, titleFontColor: fontDisabled },
dialog: { titleFont: default, background: window, titleFontColor: fontDisabled, stageBackground: alpha }
}
}

BIN
assets/ui/uiskin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

109
build.gradle Normal file
View File

@ -0,0 +1,109 @@
buildscript {
repositories {
mavenCentral()
maven { url 'https://s01.oss.sonatype.org' }
maven { url 'https://repo.openeggbert.com' }
gradlePluginPortal()
mavenLocal()
google()
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
maven { url 'https://s01.oss.sonatype.org/content/repositories/snapshots/' }
maven { url 'https://repo.openeggbert.com/releases/' }
maven { url 'https://repo.openeggbert.com/snapshots/' }
}
dependencies {
classpath "com.android.tools.build:gradle:8.1.4"
classpath "io.freefair.gradle:lombok-plugin:8.3"
classpath "org.docstr:gwt-gradle-plugin:$gwtPluginVersion"
}
}
allprojects {
apply plugin: 'eclipse'
apply plugin: 'idea'
// This allows you to "Build and run using IntelliJ IDEA", an option in IDEA's Settings.
idea {
module {
outputDir file('build/classes/java/main')
testOutputDir file('build/classes/java/test')
}
}
}
configure(subprojects - project(':android')) {
apply plugin: 'java-library'
apply plugin: 'io.freefair.lombok'
sourceCompatibility = 11
compileJava {
options.incremental = true
}
// From https://lyze.dev/2021/04/29/libGDX-Internal-Assets-List/
// The article can be helpful when using assets.txt in your project.
tasks.register('generateAssetList') {
inputs.dir("${project.rootDir}/assets/")
// projectFolder/assets
File assetsFolder = new File("${project.rootDir}/assets/")
// projectFolder/assets/assets.txt
File assetsFile = new File(assetsFolder, "assets.txt")
File assets_File = new File(assetsFolder, "assets_.txt")
// delete that file in case we've already created it
assetsFile.delete()
assets_File.delete()
// iterate through all files inside that folder
// convert it to a relative path
// and append it to the file assets.txt
fileTree(assetsFolder).collect { assetsFolder.relativePath(it) }.each {
assetsFile.append(it + "\n")
assets_File.append(it + "\n")
}
}
processResources.dependsOn 'generateAssetList'
task copyAssetsTxt {
doLast {
def sourceFile = file('assets/assets.txt')
def targetFile = file('assets/assets_.txt')
if (sourceFile.exists()) {
targetFile.text = sourceFile.text
println "Successfully copied assets.txt to assets_.txt"
} else {
println "Source file assets.txt does not exist"
}
}
}
processResources.dependsOn generateAssetList
compileJava {
options.incremental = true
}
}
subprojects {
version = '0.0.0-SNAPSHOT'
ext.appName = 'open-eggbert'
repositories {
mavenCentral()
maven { url 'https://s01.oss.sonatype.org' }
// You may want to remove the following line if you have errors downloading dependencies.
mavenLocal()
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
maven { url 'https://s01.oss.sonatype.org/content/repositories/snapshots/' }
maven { url 'https://jitpack.io' }
maven { url 'https://teavm.org/maven/repository/' }
maven { url 'https://repo.openeggbert.com' }
maven { url 'https://repo.openeggbert.com/releases/' }
maven { url 'https://repo.openeggbert.com/snapshots/' }
}
}
eclipse.project.name = 'open-eggbert' + '-parent'

View File

@ -1,4 +1,6 @@
mkdir dist
rm dist/openeggbert.jar
mvn clean install
mv target/open-eggbert-0.0.0-SNAPSHOT-jar-with-dependencies.jar dist/openeggbert.jar
if [ `whoami` = "robertvokac" ]; then
export JAVA_HOME=/home/robertvokac/Desktop/jdk-17.0.2/
fi
./gradlew build $1

1
build_desktop.sh Executable file
View File

@ -0,0 +1 @@
./gradlew lwjgl3:dist

1
build_html.sh Executable file
View File

@ -0,0 +1 @@
./gradlew html:dist

1
clean.sh Executable file
View File

@ -0,0 +1 @@
./gradlew clean $1

35
core/build.gradle Normal file
View File

@ -0,0 +1,35 @@
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
eclipse.project.name = appName + '-core'
sourceSets.test.java.srcDirs = [ "src/test/java/" ]
dependencies {
api "com.badlogicgames.gdx-controllers:gdx-controllers-core:$gdxControllersVersion"
api "com.badlogicgames.gdx:gdx-ai:$aiVersion"
api "com.badlogicgames.gdx:gdx-box2d:$gdxVersion"
api "com.badlogicgames.gdx:gdx:$gdxVersion"
api "com.github.MrStahlfelge.gdx-websockets:core:$websocketVersion"
api "com.github.MrStahlfelge.gdx-websockets:serialization:$websocketSerializationVersion"
api "com.github.crykn.guacamole:core:$guacamoleVersion"
api "com.github.crykn.guacamole:gdx:$guacamoleVersion"
api "com.github.tommyettinger:formic:$formicVersion"
api "com.github.tommyettinger:libgdx-utils-box2d:$utilsBox2dVersion"
api "com.github.tommyettinger:libgdx-utils:$utilsVersion"
api "de.golfgl.gdxcontrollerutils:gdx-controllerutils-mapping:$controllerMappingVersion"
api "games.rednblack.miniaudio:miniaudio:$miniaudioVersion"
//api "com.openeggbert.gdx:gdx-storage:0.0.0-SNAPSHOT"
annotationProcessor "org.projectlombok:lombok:$lombokVersion"
compileOnly "org.projectlombok:lombok:$lombokVersion"
testImplementation "org.junit.jupiter:junit-jupiter-api:5.10.3"
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:5.10.3"
api "com.pixelgamelibrary:pixel:$pixelVersion"
if(enableGraalNative == 'true') {
implementation "io.github.berstanio:gdx-svmhelper-annotations:$graalHelperVersion"
}
}
test {
useJUnitPlatform {
}
}

View File

@ -0,0 +1,90 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.configuration;
import com.openeggbert.core.main.OpenEggbertException;
import com.pixelgamelibrary.api.Pixel;
import java.util.HashMap;
import java.util.Map;
import lombok.ToString;
/**
*
* @author robertvokac
*/
@ToString
public class ConfigDef {
private Map<String,String> map = new HashMap<>();
public ConfigDef(String textContentofConfigDefFile) {
Pixel.utils().splitStringToLinesAsStream(textContentofConfigDefFile)
.filter(l -> !l.trim().isEmpty())
.filter(l -> !l.trim().startsWith(HASH_CHARACTER))
.filter(l -> l.contains(EQUALS_CHARACTER))
.forEach(line -> {
String[] array = line.split(EQUALS_CHARACTER);
String key = array[0];
String value = array[1];
map.put(key, value);
});
}
private static final String HASH_CHARACTER = "#";
private static final String EQUALS_CHARACTER = "=";
public boolean isFullscreen() {
return getMandatoryBooleanProperty(ConfigDefKey.FULLSCREEN);
}
public boolean isStrictCompatibility() {
return getOptionalBooleanProperty(ConfigDefKey.STRICT_COMPATIBILITY, false);
}
private boolean getMandatoryBooleanProperty(ConfigDefKey configDefKey) {
String key = configDefKey.getKey();
if (!map.containsKey(key)) {
throw new OpenEggbertException("Fatal error: CONFIG.DEF is missing key: " + key);
}
return convertStringToBoolean(map.get(configDefKey.getKey()));
}
private boolean getOptionalBooleanProperty(ConfigDefKey configDefKey, boolean defaultValue) {
String key = configDefKey.getKey();
if (!map.containsKey(key)) {
return defaultValue;
}
return getMandatoryBooleanProperty(configDefKey);
}
private static boolean convertStringToBoolean(String string) {
if (string.equals("1")) {
return true;
}
if (string.equals("0")) {
return false;
}
throw new OpenEggbertException("Could not convert String to boolean: " + string);
}
public String toPropertiesText() {
throw new OpenEggbertException("Not yet implemented.");
}
}

View File

@ -0,0 +1,48 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.configuration;
import com.openeggbert.core.release.Release;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import lombok.Getter;
/**
*
* @author robertvokac
*/
public enum ConfigDefKey {
FULLSCREEN("FullScreen", new Release[]{Release.SPEEDY_BLUPI_DEMO}),
STRICT_COMPATIBILITY("StrictCompatibility", new Release[]{Release.OPEN_EGGBERT_3});
@Getter
private String key;
@Getter
private final List<Release> featureLevels;
ConfigDefKey(String keyIn, Release[] featureLevelsIn) {
this.key = keyIn;
List<Release> list = Arrays.asList(featureLevelsIn);
Stream<Release> stream = list.stream();
this.featureLevels = stream.collect(Collectors.toList());
}
}

View File

@ -0,0 +1,31 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.configuration;
/**
*
* @author robertvokac
*/
public interface IsThisFeatureEnabledForStrictMode {
boolean isThisFeatureEnabledForStrictMode();
}

View File

@ -17,14 +17,12 @@
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.entity.common;
package com.openeggbert.core.configuration;
/**
*
* @author robertvokac
*/
public enum EggbertSound {
public class Language {
}

View File

@ -0,0 +1,82 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.configuration;
import com.pixelgamelibrary.api.Pixel;
import com.openeggbert.core.main.OpenEggbertException;
import com.pixelgamelibrary.api.ViewMode;
/**
*
* @author robertvokac
*/
public enum OpenEggbertDisplayMode {
WINDOW, FULLSCREEN;
public static OpenEggbertDisplayMode setDisplayModeFromConfig(ConfigDef configDef) {
if (configDef == null) {
return OpenEggbertDisplayMode.WINDOW;
}
final OpenEggbertDisplayMode fromConfigDef = fromConfigDef(configDef);
setDisplayMode(fromConfigDef);
return fromConfigDef;
}
public static OpenEggbertDisplayMode fromConfigDef(ConfigDef configDef) {
return configDef.isFullscreen() ? FULLSCREEN : WINDOW;
}
public static void setDisplayModeToFullscreen() {
setDisplayMode(FULLSCREEN);
}
public static void setDisplayModeToWindow() {
setDisplayMode(WINDOW);
}
public static OpenEggbertDisplayMode find(boolean fullscreen, boolean window) {
if (fullscreen && window) {
throw new OpenEggbertException("Both arguments fullscreen and window are true.");
}
if (!fullscreen && !window) {
throw new OpenEggbertException("Both arguments fullscreen and window are false.");
}
if (fullscreen) {
return FULLSCREEN;
} else {
return WINDOW;
}
}
public static void setDisplayMode(OpenEggbertDisplayMode displayMode) {
Pixel.graphics().getMonitor().setViewMode(displayMode == FULLSCREEN ? ViewMode.FULLSCREEN : ViewMode.WINDOW);
}
public OpenEggbertDisplayMode flip() {
if (this == OpenEggbertDisplayMode.FULLSCREEN) {
return OpenEggbertDisplayMode.WINDOW;
}
if (this == OpenEggbertDisplayMode.WINDOW) {
return FULLSCREEN;
}
throw new OpenEggbertException("Unsupported DisplayMode: " + this);
}
}

View File

@ -0,0 +1,50 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.configuration;
import lombok.Getter;
/**
*
* @author robertvokac
*/
public enum VirtualScreenResolution implements IsThisFeatureEnabledForStrictMode {
VGA(640,480,true),
QUAD_VGA(1280, 960, false),
CURRENT(0, 0, false);
@Getter
private boolean enabledInCaseOfStrictMode;
@Getter
private int width;
@Getter
private int height;
VirtualScreenResolution(int width, int height, boolean enabledInCaseOfStrictMode) {
this.width = width;
this.height = height;
this.enabledInCaseOfStrictMode = enabledInCaseOfStrictMode;
}
@Override
public boolean isThisFeatureEnabledForStrictMode() {
return enabledInCaseOfStrictMode;
}
}

View File

@ -19,9 +19,9 @@
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.entity.common;
package com.openeggbert.core.game;
import com.openeggbert.entity.common.compatibility.CompatibilityMode;
import com.openeggbert.core.release.Release;
import lombok.Getter;
/**
@ -30,17 +30,17 @@ import lombok.Getter;
*/
public enum Cheat {
MEGABLUPI(Utils.ALL__COMPATIBILITY_MODES);
MEGABLUPI(Release.ALL_RELEASES);
//todo
@Getter
private final CompatibilityMode[] compatibilityModes;
private final Release[] compatibilityModes;
@Getter
private String note;
Cheat (CompatibilityMode[] compatibilityModes) {
Cheat (Release[] compatibilityModes) {
this(compatibilityModes, "");
}
Cheat (CompatibilityMode[] compatibilityModes, String note) {
Cheat (Release[] compatibilityModes, String note) {
this.compatibilityModes = compatibilityModes;
this.note = note;
}

View File

@ -19,7 +19,7 @@
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.entity.common;
package com.openeggbert.core.game;
/**
*

View File

@ -19,12 +19,12 @@
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.entity.gameplay;
package com.openeggbert.core.game;
/**
*
* @author robertvokac
*/
public class Eggbert {
public enum PlayerState {
}

View File

@ -19,7 +19,7 @@
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.entity.common;
package com.openeggbert.core.game;
/**
*

View File

@ -0,0 +1,51 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.gamespace;
import lombok.Getter;
import com.openeggbert.core.configuration.IsThisFeatureEnabledForStrictMode;
/**
*
* @author robertvokac
*/
public enum GameDirectoryType implements IsThisFeatureEnabledForStrictMode{
DATA(true),
IMAGE(true),
IMAGE08(true),
IMAGE16(true),
IMAGE24(false),
IMAGE24X2(false),
SOUND(true),
TEXT(false),
MOD(false),
;
@Getter
private final boolean enabledInCaseOfStrictMode;
GameDirectoryType(boolean enabledInCaseOfStrictMode) {
this.enabledInCaseOfStrictMode = enabledInCaseOfStrictMode;
}
@Override
public boolean isThisFeatureEnabledForStrictMode() {
return enabledInCaseOfStrictMode;
}
}

View File

@ -0,0 +1,29 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.gamespace;
/**
*
* @author robertvokac
*/
public enum GameFileType {
CONFIG, WORLD, DEMO, SAVE, USER_INFO, MUSIC, SOUND, IMAGE8, IMAGE16, IMAGE32;
}

View File

@ -0,0 +1,77 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.gamespace;
import com.openeggbert.core.release.Release;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
*
* @author robertvokac
*/
@Data
@AllArgsConstructor
public class GameSpace {
private boolean embeddedAssets;
private Release featureLevel;
private String dataDirectory;
private String image08Directory;
private String image16Directory;
private String image24Directory;
private String image24x2Directory;
private String soundDirectory;
private String currentDirectory;
public GameSpace() {
}
public boolean isValid() {
if (featureLevel == null) {
return false;
}
if (dataDirectory == null) {
return false;
}
if (image08Directory == null && image16Directory == null && image24Directory == null && image24x2Directory == null) {
return false;
}
if (soundDirectory == null) {
return false;
}
return true;
}
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("featureLevel=" + featureLevel).append(" ");
sb.append("data=" + dataDirectory).append(" ");
sb.append("image08=" + image08Directory).append(" ");
sb.append("image16=" + image16Directory).append(" ");
sb.append("image24=" + image24Directory).append(" ");
sb.append("image24x2=" + image24x2Directory).append(" ");
sb.append("image24x2=" + image24x2Directory).append(" ");
sb.append("sound=" + soundDirectory);
return sb.toString();
}
}

View File

@ -0,0 +1,38 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.gamespace;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
*
* @author robertvokac
*/
@AllArgsConstructor
@Getter
public class ImageDirectories {
public static final ImageDirectories DEFAULT = new ImageDirectories(GameDirectoryType.IMAGE08, GameDirectoryType.IMAGE16, null, null);
private final GameDirectoryType image08;
private final GameDirectoryType image16;
private final GameDirectoryType image24;
private final GameDirectoryType image24x2;
}

View File

@ -0,0 +1,53 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.image;
import lombok.Getter;
import com.openeggbert.core.configuration.IsThisFeatureEnabledForStrictMode;
/**
*
* @author robertvokac
*/
public enum ImageFormat implements IsThisFeatureEnabledForStrictMode{
BLP("blp", true),
BMP("bmp", false),
PNG("png", false),
JPEG("jpeg", false)
;
@Getter
private final String fileExtension;
@Getter
private final boolean enabledInCaseOfStrictMode;
ImageFormat(String fileExtensionIn, boolean enabledInCaseOfStrictMode) {
this.fileExtension = fileExtensionIn;
this.enabledInCaseOfStrictMode = enabledInCaseOfStrictMode;
}
@Override
public boolean isThisFeatureEnabledForStrictMode() {
return enabledInCaseOfStrictMode;
}
public ImageFormat getTargetFormat() {
return this == BLP ? BMP : this;
}
}

View File

@ -17,24 +17,26 @@
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.image;
package com.openeggbert.entity.common;
import com.openeggbert.entity.common.compatibility.CompatibilityMode;
import com.openeggbert.entity.common.compatibility.GraphicsMode;
import com.openeggbert.entity.common.compatibility.ResolutionMode;
import lombok.Data;
import lombok.Getter;
import com.openeggbert.core.configuration.IsThisFeatureEnabledForStrictMode;
/**
*
* @author robertvokac
*/
@Data
public class GameExecution {
private CompatibilityMode compatibilityMode;
private ResolutionMode resolutionMode = ResolutionMode.RESOLUTION_640_480;
private GraphicsMode graphicsMode = GraphicsMode.ORIGINAL;
private Boolean cheatsEnabled = true;
public enum ImageResolution implements IsThisFeatureEnabledForStrictMode{
NORMAL(true), DOUBLE(false);
@Getter
private final boolean enabledInCaseOfStrictMode;
ImageResolution(boolean enabledInCaseOfStrictMode) {
this.enabledInCaseOfStrictMode = enabledInCaseOfStrictMode;
}
@Override
public boolean isThisFeatureEnabledForStrictMode() {
return enabledInCaseOfStrictMode;
}
}

View File

@ -18,13 +18,14 @@
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.image;
package com.openeggbert.entity.common;
/**
*
* @author robertvokac
*/
public enum EggbertMusic {
public enum ImageType {
SPRITE, SCREEN_BACKGROUND;
}

View File

@ -0,0 +1,28 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.image;
/**
*
* @author robertvokac
*/
public class TextureManager {
}

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.11.0//EN" "https://www.gwtproject.org/doctype/2.11.0/gwt-module.dtd">
<module>
<!-- Paths to source are relative to this file and separated by slashes ('/'). -->
<source path="" />
<!-- Reflection includes may be needed for your code or library code. Each value is separated by periods ('.'). -->
<!-- You can include a full package by not including the name of a type at the end. -->
</module>

View File

@ -0,0 +1,57 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.main;
import com.openeggbert.core.gamespace.GameSpace;
import com.pixelgamelibrary.api.PixelApplication;
import java.util.Map;
import com.pixelgamelibrary.api.game.Game;
/**
* {@link com.pixelgamelibrary.api.PixelApplication} implementation shared by all
* platforms.
*/
public class OpenEggbertApplication extends PixelApplication {
private static final String GAME_SPACE = "gameSpace";
private static final String ABSOLUTE_PATH_OF_ROOT_DIRECTORY_IN = "absolutePathOfRootDirectoryIn";
@Override
public Game createGameViaMap(Map<String, Object> objects) {
String absolutePathOfRootDirectoryIn = null;
GameSpace gameSpace = null;
if (objects.containsKey(ABSOLUTE_PATH_OF_ROOT_DIRECTORY_IN)) {
absolutePathOfRootDirectoryIn = (String) objects.get(ABSOLUTE_PATH_OF_ROOT_DIRECTORY_IN);
}
if (objects.containsKey(GAME_SPACE)) {
gameSpace = (GameSpace) objects.get(GAME_SPACE);
}
if (absolutePathOfRootDirectoryIn != null) {
return gameSpace == null ? new OpenEggbertGame(absolutePathOfRootDirectoryIn) : new OpenEggbertGame(gameSpace, absolutePathOfRootDirectoryIn);
} else {
return new OpenEggbertGame();
}
}
}

View File

@ -0,0 +1,33 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.main;
/**
*
* @author robertvokac
*/
public class OpenEggbertException extends RuntimeException{
public OpenEggbertException(String string) {
super(string);
}
}

View File

@ -0,0 +1,170 @@
package com.openeggbert.core.main;
import com.openeggbert.core.configuration.ConfigDef;
import com.openeggbert.core.configuration.OpenEggbertDisplayMode;
import com.openeggbert.core.gamespace.GameSpace;
import com.openeggbert.core.mod.Mod;
import com.openeggbert.core.mod.ModIdentification;
import com.openeggbert.core.screen.GameSpaceListScreen;
import com.openeggbert.core.screen.InitScreen;
import com.openeggbert.core.utils.OpenEggbertUtils;
import com.pixelgamelibrary.api.game.GameAdapter;
import com.pixelgamelibrary.api.Pixel;
import com.pixelgamelibrary.api.graphics.BitmapFont;
import com.pixelgamelibrary.api.graphics.SpriteBatch;
import com.pixelgamelibrary.api.graphics.Texture;
import java.util.List;
import java.util.Optional;
import lombok.Data;
import com.pixelgamelibrary.api.files.File;
import com.pixelgamelibrary.api.graphics.ShapeRenderer;
import com.pixelgamelibrary.api.utils.collections.Map;
import lombok.Getter;
/**
*
* @author robertvokac
*/
@Data
public class OpenEggbertGame extends GameAdapter {
private Texture image;
private GameSpace gameSpace = null;
private String absolutePathOfRootDirectory;
private SpriteBatch batch;
@Getter
private ShapeRenderer shapeRenderer;
private BitmapFont font;
private Map<String, Texture> imageTextures = Pixel.utils().collections().objectMap();
private List<Mod> embeddedMods = Pixel.utils().collections().list();
private int heightInPixels = 480;
private int widthInPixels = 640;
private ConfigDef configDef;
private OpenEggbertDisplayMode openEggbertDisplayMode = OpenEggbertDisplayMode.WINDOW;
public OpenEggbertGame() {
this(null, null);
}
public OpenEggbertGame(String absolutePathOfRootDirectoryIn) {
this(null, absolutePathOfRootDirectoryIn);
}
public OpenEggbertGame(GameSpace gameSpace, String absolutePathOfRootDirectoryIn) {
this.gameSpace = gameSpace;
this.absolutePathOfRootDirectory = absolutePathOfRootDirectoryIn;
Pixel.app().setGame(this);
}
@Override
public void create() {
System.out.println("Searching mods");
// for(FileHandle f:Gdx.files.internal(".").list()) {
// System.out.println("assets contains also: " + f.name());
// }
com.pixelgamelibrary.api.files.File embeddedModsDirectory = Pixel.files().assets("/embedded_mods");
System.out.println("embeddedModsDirectory.exists=" + embeddedModsDirectory.exists());
System.out.println("embeddedModsDirectory.list().size()=" + embeddedModsDirectory.list().size());
embeddedModsDirectory.list().forEach(e -> System.out.println(e.path()));
Pixel.files().assetsFileSystem().list().forEach(e -> System.out.println(e));
for (File embeddedModGroup : embeddedModsDirectory.list()) {
if (embeddedModGroup.name().equals("README.md")) {
continue;
}
System.out.println("Found group " + embeddedModGroup.name());
for (File embeddedMod : embeddedModGroup.list()) {
if (embeddedMod.name().equals("README.md")) {
continue;
}
System.out.println("Found mod " + embeddedMod.name());
File modXml = null;
for (File file : embeddedMod.list()) {
if (file.name().equals("mod.xml")) {
modXml = file;
}
}
if (modXml == null) {
continue;
}
System.out.println("Found mod: " + embeddedMod.name());
Mod mod = new Mod(modXml.readString());
embeddedMods.add(mod);
System.out.println("embeddedMods.size(): " + embeddedMods.size());
// for (int i = 0; i < 42; i++) embeddedMods.add(mod);//for testing purposes
}
}
////
batch = Pixel.graphics().newSpriteBatch();
//batch.setProjectionMatrix(viewport.getCamera().combined);
image = Pixel.graphics().newTexture("libgdx.png");
shapeRenderer = batch.drawShape();
font = Pixel.graphics().newBitmapFont(
Pixel.files().assets("com/badlogic/gdx/utils/lsans-15.fnt"), Pixel.files().assets("com/badlogic/gdx/utils/lsans-15.png"),
false
);
System.out.println("Going to set screen");
setScreen(gameSpace == null ? new GameSpaceListScreen(this) : new InitScreen(this));
}
@Override
public void dispose() {
batch.dispose();
image.dispose();
shapeRenderer.dispose();
font.dispose();
for (String key : imageTextures.keySet()) {
imageTextures.get(key).dispose();
}
}
public void loadImageTexture(File fileHandle) {
Texture texture = Pixel.graphics().newTexture(fileHandle);
if(!fileHandle.exists()) {
throw new OpenEggbertException("File does not exist: " + fileHandle.path());
}
imageTextures.put(OpenEggbertUtils.getFileNameWithoutExtension(fileHandle.name().toUpperCase()), texture);
}
public boolean existsImageTexture(String key) {
return imageTextures.containsKey(key);
}
public void disposeImageTexture(String key) {
if (imageTextures.containsKey(key)) {
imageTextures.get(key).dispose();
imageTextures.remove(key);
}
}
public void disposeImageTextures() {
for (String key : imageTextures.keySet()) {
imageTextures.get(key).dispose();
imageTextures.remove(key);
}
}
public Optional<Texture> getImageTexture(String key) {
if (imageTextures.containsKey(key)) {
return Optional.of(imageTextures.get(key));
} else {
return Optional.empty();
}
}
public Mod loadMod(ModIdentification modIdentification) {
return embeddedMods.stream().filter(m -> m.getIdentification().asString().equals(modIdentification.asString())).findFirst().get();
}
}

View File

@ -0,0 +1,85 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.mod;
import com.pixelgamelibrary.api.interfaces.XmlElement;
import com.pixelgamelibrary.api.Pixel;
import com.openeggbert.core.release.Release;
import java.util.ArrayList;
import java.util.List;
import lombok.Data;
/**
*
* @author robertvokac
*/
@Data
public class Mod {
public Mod(String xml) {
XmlElement root = Pixel.utils().parseXml(xml);
XmlElement parentElement = root.getChildByName("parent");
if (parentElement != null) {
parent = new ModIdentification(parentElement);
}
identification = new ModIdentification(
root.get("groupId"),
root.get("modId"),
root.get("version"));
modPackaging = ModPackaging.valueOf(root.get("packaging"));
modType = ModType.valueOf(root.get("type"));
featureLevel = Release.valueOf(root.get("featureLevel"));
name = root.get("name");
description = root.get("description");
XmlElement imports = root.getChildByName("imports");
if (imports != null) {
for (int i = 0; i < imports.getChildCount(); i++) {
XmlElement import_ = imports.getChild(i);
importedMods.add(new ModIdentification(import_));
}
}
XmlElement files_ = root.getChildByName("files");
if (files_ != null) {
for (int i = 0; i < files_.getChildCount(); i++) {
XmlElement file = files_.getChild(i);
files.add(file.getText());
}
}
XmlElement stores_ = root.getChildByName("stores");
if (stores_ != null) {
for (int i = 0; i < stores_.getChildCount(); i++) {
XmlElement store = stores_.getChild(i);
stores.add(new Store(store));
}
}
}
private ModIdentification parent;
private ModIdentification identification;
private ModPackaging modPackaging;
private ModType modType;
private Release featureLevel;
private String name;
private String description;
private List<ModIdentification> importedMods = new ArrayList<>();
private List<String> files = new ArrayList<>();
private List<Store> stores = new ArrayList<>();
}

View File

@ -0,0 +1,50 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.mod;
import com.pixelgamelibrary.api.interfaces.XmlElement;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
*
* @author robertvokac
*/
@Data
@AllArgsConstructor
public class ModIdentification {
private final String groupId;
private final String modId;
private final String version;
public ModIdentification(XmlElement element) {
groupId = element.get("groupId");
modId = element.get("modId");
version = element.get("version");
}
public String asString() {
return groupId + DOT + modId + DOT + version;
}
private static final String DOT = ".";
}

View File

@ -0,0 +1,46 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.mod;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author robertvokac
*/
public class ModManager {
public ModManager() {
}
private List<Mod> embeddedMods = new ArrayList<>();
private List<Mod> installedMods = new ArrayList<>();
public List<Mod> listEmbeddedMods() {
return embeddedMods;
}
public List<Mod> listInstalledMods() {
return installedMods;
}
public Mod findMod(ModIdentification modIdentification) {
return null;
}
}

View File

@ -18,13 +18,12 @@
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.entity.common;
package com.openeggbert.core.mod;
/**
*
* @author robertvokac
*/
public enum EggbertState {
public enum ModPackaging {
EGM, XML;
}

View File

@ -0,0 +1,29 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.mod;
/**
*
* @author robertvokac
*/
public enum ModType {
FULL, LEVEL, SOUND, MUSIC, IMAGE08, IMAGE16, IMAGE24, IMAGE24X2, TEXT, PARTIAL;
}

View File

@ -17,19 +17,24 @@
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.mod;
package com.openeggbert.entity.common;
import com.openeggbert.entity.common.compatibility.CompatibilityMode;
import com.pixelgamelibrary.api.interfaces.XmlElement;
/**
*
* @author robertvokac
*/
public class Utils {
private Utils() {
//Instantiate not needed.
public class Store {
String id;
String name;
String url;
Store(XmlElement store) {
id = store.get("id");
name = store.get("name");
url = store.get("url");
}
public static final CompatibilityMode[] ALL__COMPATIBILITY_MODES = CompatibilityMode.values();
}

View File

@ -17,34 +17,38 @@
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.entity.common.compatibility;
package com.openeggbert.core.music;
import lombok.Getter;
import com.openeggbert.core.configuration.IsThisFeatureEnabledForStrictMode;
/**
*
* @author robertvokac
*/
public enum CompatibilityMode {
SPEEDY_BLUPI_DEMO(ReleaseType.BLUPI, ReleaseVersion.DEMO),
SPEEDY_BLUPI_I(ReleaseType.BLUPI, ReleaseVersion.ONE),
SPEEDY_BLUPI_II(ReleaseType.BLUPI, ReleaseVersion.TWO),
SPEEDY_EGGBERT_DEMO(ReleaseType.EGGBERT, ReleaseVersion.DEMO),
SPEEDY_EGGBERT_1(ReleaseType.EGGBERT, ReleaseVersion.ONE),
SPEEDY_EGGBERT_2(ReleaseType.EGGBERT, ReleaseVersion.TWO),
OPEN_EGGBERT(ReleaseType.OPEN, ReleaseVersion.THREE);
public enum MusicFormat implements IsThisFeatureEnabledForStrictMode {
BLP("blp", true),
MIDI("mid", false),
WAV("wav", false),
MP3("mp3", false),
OGG("ogg", false),
;
@Getter
private final ReleaseType releaseType;
private String fileExtension;
@Getter
private final ReleaseVersion releaseVersion;
private boolean enabledInCaseOfStrictMode;
MusicFormat(String fileExtension, boolean enabledInCaseOfStrictMode) {
this.fileExtension = fileExtension;
this.enabledInCaseOfStrictMode = enabledInCaseOfStrictMode;
}
private CompatibilityMode(ReleaseType releaseType, ReleaseVersion releaseVersion) {
this.releaseType = releaseType;
this.releaseVersion = releaseVersion;
@Override
public boolean isThisFeatureEnabledForStrictMode() {
return enabledInCaseOfStrictMode;
}
public MusicFormat getTargetFormat() {
return this == BLP ? MIDI : this;
}
}

View File

@ -0,0 +1,28 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.music;
/**
*
* @author robertvokac
*/
public class MusicManager {
}

View File

@ -18,12 +18,12 @@
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.entity.common;
package com.openeggbert.core.music;
/**
*
* @author robertvokac
*/
public class GameFiles {
public class MusicSheet {
}

View File

@ -0,0 +1,47 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.music;
import com.openeggbert.core.release.Release;
import lombok.Getter;
/**
*
* @author robertvokac
*/
public enum MusicType {
MUSIC1(0),
MUSIC2(1),
MUSIC3(2),
MUSIC4(3),
MUSIC5(4),
MUSIC6(5),
MUSIC7(6),
MUSIC8(7),
MUSIC9(8),
MUSIC10(9);
@Getter
private int number;
MusicType(int numberIn, Release... featureLevels) {
this.number = numberIn;
}
}

View File

@ -0,0 +1,28 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.release;
/**
*
* @author robertvokac
*/
public enum Publisher {
EPSITEC_SA, E_GAMES, DADA_GAMES, OPEN_EGGBERT;
}

View File

@ -0,0 +1,82 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.release;
import com.openeggbert.core.gamespace.GameDirectoryType;
import com.openeggbert.core.gamespace.ImageDirectories;
import com.openeggbert.core.utils.FileNameCaseType;
import lombok.Getter;
/**
*
* @author robertvokac
*/
public enum Release {
SPEEDY_BLUPI_DEMO(ReleaseType.BLUPI, ReleaseVersion.DEMO, Publisher.EPSITEC_SA, "SBD", FileNameCaseType.CAPITALIZATION, new ImageDirectories(GameDirectoryType.IMAGE, null, null, null)),
SPEEDY_BLUPI_I(ReleaseType.BLUPI, ReleaseVersion.ONE, Publisher.EPSITEC_SA, "SBI"),
SPEEDY_BLUPI_II(ReleaseType.BLUPI, ReleaseVersion.TWO, Publisher.EPSITEC_SA, "SBII"),
SPEEDY_EGGBERT_DEMO(ReleaseType.EGGBERT, ReleaseVersion.DEMO, Publisher.E_GAMES, "SED"),
SPEEDY_EGGBERT_1(ReleaseType.EGGBERT, ReleaseVersion.ONE, Publisher.E_GAMES, "SE1"),
SPEEDY_EGGBERT_2(ReleaseType.EGGBERT, ReleaseVersion.TWO, Publisher.E_GAMES, "SE2"),
SPEEDY_EGGBERT_VALUEWARE(ReleaseType.EGGBERT, ReleaseVersion.VALUEWARE, Publisher.E_GAMES, "SEW"),
SPEEDY_BLUPI_FOR_WINDOWS_PHONE(ReleaseType.BLUPI, ReleaseVersion.WINDOWS_PHONE, Publisher.DADA_GAMES, "SBP"),
OPEN_EGGBERT_3(ReleaseType.OPEN, ReleaseVersion.THREE, Publisher.OPEN_EGGBERT, "OE3", FileNameCaseType.UPPERCASE, new ImageDirectories(GameDirectoryType.IMAGE08, GameDirectoryType.IMAGE16, GameDirectoryType.IMAGE24, GameDirectoryType.IMAGE24X2));
@Getter
private final ReleaseType releaseType;
@Getter
private final ReleaseVersion releaseVersion;
@Getter
private final Publisher publisher;
@Getter
private final String abbreviation;
@Getter
private final ImageDirectories imageDirectories;
@Getter
public static final Release[] ALL_RELEASES = Release.values();
@Getter
private FileNameCaseType caseModeForDirectories;
private Release(ReleaseType releaseType, ReleaseVersion releaseVersion, Publisher publisher, String abbreviation) {
this(releaseType, releaseVersion, publisher, abbreviation, FileNameCaseType.UPPERCASE, ImageDirectories.DEFAULT);
}
private Release(ReleaseType releaseType, ReleaseVersion releaseVersion, Publisher publisher, String abbreviation, FileNameCaseType caseModeForDirectories, ImageDirectories imageDirectories) {
this.releaseType = releaseType;
this.releaseVersion = releaseVersion;
this.publisher = publisher;
this.abbreviation = abbreviation;
this.caseModeForDirectories = caseModeForDirectories;
this.imageDirectories = imageDirectories;
}
public String createLabel() {
String[] array = this.name().split(UNDERSCORE);
StringBuilder sb = new StringBuilder();
for(int i = 0;i < array.length; i++) {
sb.append(FileNameCaseType.convertToString(array[i], FileNameCaseType.CAPITALIZATION));
if(i < (array.length - 1)) {
sb.append(" ");
}
}
return sb.toString();
}
private static final String UNDERSCORE = "_";
}

View File

@ -19,7 +19,7 @@
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.entity.common.compatibility;
package com.openeggbert.core.release;
/**
*

View File

@ -19,12 +19,12 @@
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.entity.common.compatibility;
package com.openeggbert.core.release;
/**
*
* @author robertvokac
*/
public enum ReleaseVersion {
DEMO, ONE, TWO, THREE
DEMO, ONE, TWO, WINDOWS_PHONE, VALUEWARE, THREE;
}

View File

@ -0,0 +1,34 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.screen;
import com.openeggbert.core.main.OpenEggbertGame;
/**
*
* @author robertvokac
*/
public abstract class AbstractBasicScreen extends OpenEggbertScreen {
public AbstractBasicScreen(OpenEggbertGame openEggbertGame) {
super(openEggbertGame);
}
}

View File

@ -0,0 +1,80 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.screen;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.InputAdapter;
import com.pixelgamelibrary.api.graphics.Color;
import com.badlogic.gdx.utils.ScreenUtils;
import com.openeggbert.core.main.OpenEggbertGame;
import com.pixelgamelibrary.api.graphics.BitmapFont;
/**
*
* @author robertvokac
*/
public class AbstractGameScreen extends OpenEggbertScreen {
public AbstractGameScreen(OpenEggbertGame openEggbertGame) {
super(openEggbertGame);
}
@Override
public void show() {
Gdx.input.setInputProcessor(new InputAdapter() {
@Override
public boolean keyDown(int keyCode) {
game.setScreen(new InitScreen(game));
return true;
}
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
game.setScreen(new InitScreen(game));
return true;
}
});
}
@Override
public void renderOpenEggbertScreen(float delta) {
ScreenUtils.clear(0f, 0f, 0f, 1f);
batch.begin();
drawBackgroundIfAvailable();
BitmapFont font;
font = game.getFont();
font.setScale(2.0f);
font.setColor(Color.RED);
font.draw(batch, "Sorry, game is not yet implemented", 40, 400);
font.draw(batch, "Please, press any key", 40, 300);
font.draw(batch, "to return to the main screen", 40, 250);
batch.end();
}
@Override
public void hide() {
Gdx.input.setInputProcessor(null);
}
}

View File

@ -0,0 +1,86 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.screen;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.InputAdapter;
import com.pixelgamelibrary.api.graphics.Color;
import com.badlogic.gdx.utils.ScreenUtils;
import com.openeggbert.core.main.OpenEggbertGame;
import com.pixelgamelibrary.api.graphics.BitmapFont;
import java.util.Optional;
/**
*
* @author robertvokac
*/
public class DemoScreen extends OpenEggbertScreen {
public DemoScreen(OpenEggbertGame openEggbertGame) {
super(openEggbertGame);
}
@Override
protected final Optional<ScreenType> getScreenType() {
return Optional.of(ScreenType.DEMO);
}
@Override
public void show() {
Gdx.input.setInputProcessor(new InputAdapter() {
@Override
public boolean keyDown(int keyCode) {
game.setScreen(new InitScreen(game));
return true;
}
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
game.setScreen(new InitScreen(game));
return true;
}
});
}
@Override
public void renderOpenEggbertScreen(float delta) {
ScreenUtils.clear(0f, 0f, 0f, 1f);
batch.begin();
drawBackgroundIfAvailable();
BitmapFont font;
font = game.getFont();
font.setScale(2.0f);
font.setColor(Color.RED);
font.draw(batch, "Sorry, demo is not yet implemented", 40, 400);
font.draw(batch, "Please, press any key", 40, 300);
font.draw(batch, "to return to the main screen", 40, 250);
batch.end();
}
@Override
public void hide() {
Gdx.input.setInputProcessor(null);
}
}

View File

@ -0,0 +1,85 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.screen;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.InputAdapter;
import com.pixelgamelibrary.api.graphics.Color;
import com.badlogic.gdx.utils.ScreenUtils;
import com.openeggbert.core.main.OpenEggbertGame;
import com.pixelgamelibrary.api.graphics.BitmapFont;
import java.util.Optional;
/**
*
* @author robertvokac
*/
public class GameScreen extends AbstractGameScreen {
public GameScreen(OpenEggbertGame openEggbertGame) {
super(openEggbertGame);
}
protected final Optional<ScreenType> getScreenType() {
return Optional.of(ScreenType.GAME);
}
@Override
public void show() {
Gdx.input.setInputProcessor(new InputAdapter() {
@Override
public boolean keyDown(int keyCode) {
game.setScreen(new InitScreen(game));
return true;
}
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
game.setScreen(new InitScreen(game));
return true;
}
});
}
@Override
public void renderOpenEggbertScreen(float delta) {
ScreenUtils.clear(0f, 0f, 0f, 1f);
batch.begin();
drawBackgroundIfAvailable();
BitmapFont font;
font = game.getFont();
font.setScale(2.0f);
font.setColor(Color.RED);
font.draw(batch, "Sorry, demo is not yet implemented", 40, 400);
font.draw(batch, "Please, press any key", 40, 300);
font.draw(batch, "to return to the main screen", 40, 250);
batch.end();
}
@Override
public void hide() {
Gdx.input.setInputProcessor(null);
}
}

View File

@ -0,0 +1,304 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.screen;
import com.badlogic.gdx.Application;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.InputAdapter;
import com.badlogic.gdx.Preferences;
import com.pixelgamelibrary.api.graphics.Color;
import com.pixelgamelibrary.api.graphics.ShapeRenderer;
import com.openeggbert.core.gamespace.GameSpace;
import com.openeggbert.core.main.OpenEggbertGame;
import com.openeggbert.core.mod.Mod;
import com.openeggbert.core.mod.ModType;
import com.pixelgamelibrary.api.Pixel;
import com.pixelgamelibrary.api.graphics.BitmapFont;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.ToString;
import com.pixelgamelibrary.api.files.FileSystem;
import com.pixelgamelibrary.api.graphics.Texture;
/**
*
* @author robertvokac
*/
public class GameSpaceListScreen extends AbstractBasicScreen {
private int pageNumber = 1;
private final int pageSize = 5;
private final List<Mod> fullEmbeddedMods;
private float timeSeconds = 0f;
private ShapeRenderer shapeRenderer;
@ToString
@AllArgsConstructor
@NoArgsConstructor
class Rectangle {
float x, y, width, height;
}
private Rectangle[] buttons = new Rectangle[5];
private Rectangle previousPageButton = new Rectangle();
private Rectangle nextPageButton = new Rectangle();
private Texture backgroundShapes;
public GameSpaceListScreen(OpenEggbertGame openEggbertGame) {
super(openEggbertGame);
this.fullEmbeddedMods = openEggbertGame.getEmbeddedMods().stream().filter(m -> m.getModType() == ModType.FULL).collect(Collectors.toList());
if (Gdx.app.getType() == Application.ApplicationType.Android) {
game.setHeightInPixels(Gdx.app.getGraphics().getHeight());
game.setWidthInPixels(Gdx.app.getGraphics().getWidth());
}
Preferences prefs = Gdx.app.getPreferences("My Preferences");
prefs.putString("test", "abc");
prefs.flush();
final FileSystem storage = Pixel.files().localFileSystem();
storage.createDirectory("modes");
storage.createDirectory("gameSpaces");
System.out.println(storage.debug());
//storage.file("modes").child("text.txt").writeString("textabc");
storage.flush();
shapeRenderer = openEggbertGame.getShapeRenderer();
}
@Override
protected final Optional<ScreenType> getScreenType() {
return Optional.of(ScreenType.GAME_SPACE_LIST);
}
@Override
public void show() {
backgroundShapes = Pixel.graphics().getTextureFactory().createTransparent(640, 480);
shapeRenderer.setTexture(backgroundShapes);
System.out.println("Calling : GameSpaceListScreen : show");
Gdx.input.setInputProcessor(new InputAdapter() {
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
timeSeconds = 0f;
return false;
}
public boolean touchCancelled(int screenX, int screenY, int pointer, int button) {
timeSeconds = 0f;
return false;
}
public boolean touchDragged(int screenX, int screenY, int pointer) {
timeSeconds = 0f;
return false;
}
@Override
public boolean mouseMoved(int screenX, int screenY) {
timeSeconds = 0f;
return false;
}
@Override
public boolean keyDown(int keyCode) {
if (keyCode == Input.Keys.SPACE) {
game.setScreen(new TestScreen(game));
}
if (keyCode == Input.Keys.ESCAPE) {
Gdx.app.exit();
}
return true;
}
@Override
public boolean touchDown(int x, int y, int pointer, int button) {
timeSeconds = 0f;
Gdx.app.log("touchDown: ", "x=" + x + " " + "y=" + y);
if (x <= Gdx.graphics.getWidth() / 3f && y >= (Gdx.graphics.getHeight() * 0.92f) && pageNumber > 1) {
pageNumber--;
}
if (x >= Gdx.graphics.getWidth() * 2f / 3f && y >= (Gdx.graphics.getHeight() * 0.92f) && (pageNumber * pageSize) < fullEmbeddedMods.size()) {
pageNumber++;
}
for (int i = 0; i < 5; i++) {
if (buttons[i] == null) {
continue;
}
System.out.println(buttons[i].toString());
}
y = Gdx.graphics.getHeight() - y;
for (int i = 0; i < 5; i++) {
if (buttons[i] == null) {
break;
}
if (x > buttons[i].x && x < (buttons[i].x + buttons[i].width)
&& y > buttons[i].y && y < (buttons[i].y + buttons[i].height)) {
activateButton(i);
}
}
return true;
}
});
}
private void activateButton(int i) {
Mod mod = fullEmbeddedMods.get(pageSize * (pageNumber - 1) + i);
GameSpace gameSpace = new GameSpace();
gameSpace.setFeatureLevel(mod.getFeatureLevel());
mod.getImportedMods().stream().map(m -> game.loadMod(m))
.filter(m -> m.getModType().name().startsWith("IMAGE"))
.forEach(m -> {
if (m.getModType() == ModType.IMAGE08) {
gameSpace.setImage08Directory("embedded_mods/" + m.getIdentification().getGroupId() + "/" + m.getIdentification().getModId());
}
if (m.getModType() == ModType.IMAGE16) {
gameSpace.setImage16Directory("embedded_mods/" + m.getIdentification().getGroupId() + "/" + m.getIdentification().getModId());
}
if (m.getModType() == ModType.IMAGE24) {
gameSpace.setImage24Directory("embedded_mods/" + m.getIdentification().getGroupId() + "/" + m.getIdentification().getModId());
}
if (m.getModType() == ModType.IMAGE24X2) {
gameSpace.setImage24x2Directory("embedded_mods/" + m.getIdentification().getGroupId() + "/" + m.getIdentification().getModId());
}
});
gameSpace.setEmbeddedAssets(true);
game.setGameSpace(gameSpace);
game.setScreen(new InitScreen(game));
}
@Override
public void renderOpenEggbertScreen(float delta) {
System.out.println("Calling : GameSpaceListScreen : renderOpenEggbertScreen");
//Gdx.app.log(getClass().getName(), game.getStorage().debug());
timeSeconds += Gdx.graphics.getRawDeltaTime();
if (timeSeconds > 60) {
activateButton(0);
}
//ScreenUtils.clear(1f, 1f, 0.6f, 0.5f);
int buttonHeight = (int) (game.getHeightInPixels() * 0.1f);
batch.begin();
drawBackgroundIfAvailable();
BitmapFont font;
font = game.getFont();
font.setScale(4.0f);
font.setColor(Color.BLACK);
int x = (int) (game.getWidthInPixels() * 0.1875f);
int y = (int) (game.getHeightInPixels() * 0.95f);
font.draw(batch, "Open Eggbert", x, y);
List<Mod> modsForPage = fullEmbeddedMods.stream().skip(pageSize * (pageNumber - 1)).limit(5).collect(Collectors.toList());
float margin = 0.05f * game.getWidthInPixels();
y = (int) (game.getHeightInPixels() * 0.7f);
font.setScale(2.0f);
final float spaceBetweenLargeButtons = game.getHeightInPixels() * 0.06f;
for (int i = 0; i < modsForPage.size(); i++) {
buttons[i] = new Rectangle(margin, y, game.getWidthInPixels() * 0.9f, margin * 1.5f);
y = (int) (y - spaceBetweenLargeButtons - margin);
}
final boolean isLastPage = !(pageNumber * pageSize < fullEmbeddedMods.size());
backgroundShapes.clear();
shapeRenderer.setColor(1f, 1f, 0.8f, 0.5f);
int q = 0;
for (Rectangle r : buttons) {
q++;
if (q > modsForPage.size()) {
break;
}
shapeRenderer.filledRectangle(r.x, r.y, r.width, r.height);
}
if (pageNumber
> 1) {
shapeRenderer.filledRectangle(margin, margin / 4f, game.getWidthInPixels() * 0.3f, buttonHeight);
}
if (!isLastPage) {
shapeRenderer.filledRectangle(game.getWidthInPixels() * 0.66f, margin / 4f, game.getWidthInPixels() * 0.3f, buttonHeight);
}
batch.draw(backgroundShapes, 0, 0);
font.setColor(
0f, 0f, 1f, 1f);
for (int i = 0;
i < modsForPage.size();
i++) {
Mod mod = modsForPage.get(i);
String name = mod.getName() == null || mod.getName().isEmpty() ? mod.getIdentification().asString() : mod.getName();
name = "#" + ((pageNumber - 1) * pageSize + (i + 1)) + " " + name;
font.draw(batch, name, margin * 1.5f, buttons[i].y + 0.8f * buttons[i].height);
}
font
.setScale(1.5f);
font.setColor(
0f, 0f, 1f, 1f);
float lastRowHeight = game.getHeightInPixels() * 0.08f;
if (pageNumber
> 1) {
font.draw(batch, "Previous page", margin, lastRowHeight);
}
if (!isLastPage) {
font.draw(batch, "Next page", game.getWidthInPixels() * 0.765625f, lastRowHeight);
}
font.setColor(
0f, 0f, 0f, 1f);
int pageCount = fullEmbeddedMods.size() / 5;
if (fullEmbeddedMods.size()
> pageCount * pageSize) {
pageCount++;
}
font.draw(batch,
"Page " + pageNumber + " from " + pageCount, game.getWidthInPixels() / 2 - 80, lastRowHeight);
batch.end();
}
@Override
public void hide() {
backgroundShapes.dispose();
Gdx.input.setInputProcessor(null);
}
}

View File

@ -0,0 +1,164 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.screen;
import com.badlogic.gdx.Application;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.InputAdapter;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.ScreenUtils;
import com.openeggbert.core.configuration.ConfigDef;
import com.openeggbert.core.main.OpenEggbertGame;
import com.openeggbert.core.configuration.OpenEggbertDisplayMode;
import java.util.Optional;
/**
*
* @author robertvokac
*/
public class InitScreen extends OpenEggbertScreen {
private float timeSeconds = 0f;
public InitScreen(OpenEggbertGame openEggbertGame) {
super(openEggbertGame);
System.out.println("game.getGameSpace().getDataDirectory() != null" + (game.getGameSpace().getDataDirectory() != null));
// Pixel.app().log("###1");
// Arrays.asList(Gdx.files.local(".").list()).forEach(e->Pixel.app().log(e.path()));
// Pixel.app().log("###2");
if (game.getGameSpace().getDataDirectory() != null) {
FileHandle configDefFileHandle = null;
String[] array = new String[]{"config.def", "Config.def", "CONFIG.DEF"};
if (game.getGameSpace().isEmbeddedAssets()) {
// for (String a : array) {
// configDefFileHandle = EmbeddedFileHandleFactory.create(game.getGameSpace().getDataDirectory() + "/" + a);
// if (configDefFileHandle.exists()) {
// break;
// } else {
// continue;
// }
// }
} else {
for (String a : array) {
configDefFileHandle = Gdx.files.absolute(game.getGameSpace().getDataDirectory() + "/" + a);
if (configDefFileHandle.exists()) {
break;
} else {
continue;
}
}
}
if (configDefFileHandle != null && configDefFileHandle.exists()) {
game.setConfigDef(new ConfigDef(configDefFileHandle.readString()));
}
}
if (game.getConfigDef() == null) {
game.setConfigDef(new ConfigDef("CD-Rom=E:\\US\n"
+ "FullScreen=0\n"
+ "TrueColor=0\n"
+ "MouseType=1\n"
+ "SpeedRate=1\n"
+ "Timer=150ms\n"
+ "Language=U\n"
+ "Benchmark=251674"));
System.out.println("game.getConfigDef()=" + game.getConfigDef());
}
OpenEggbertDisplayMode openEggbertDisplayMode = OpenEggbertDisplayMode.setDisplayModeFromConfig(game.getConfigDef());
game.setOpenEggbertDisplayMode(openEggbertDisplayMode);
}
protected final Optional<ScreenType> getScreenType() {
return Optional.of(ScreenType.INIT);
}
@Override
public void show() {
Gdx.input.setInputProcessor(new InputAdapter() {
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
// timeSeconds = 0f;
return false;
}
public boolean touchCancelled(int screenX, int screenY, int pointer, int button) {
// timeSeconds = 0f;
return false;
}
public boolean touchDragged(int screenX, int screenY, int pointer) {
// timeSeconds = 0f;
return false;
}
@Override
public boolean mouseMoved(int screenX, int screenY) {
//timeSeconds = 0f;
return false;
}
@Override
public boolean keyDown(int keyCode) {
// timeSeconds = 0f;
if (keyCode == Input.Keys.ESCAPE) {
Gdx.app.exit();
}
if (keyCode == Input.Keys.SPACE) {
game.setScreen(new GameSpaceListScreen(game));
}
if (game.getConfigDef() != null && Gdx.app.getType() == Application.ApplicationType.Desktop && !game.getConfigDef().isStrictCompatibility() && keyCode == Input.Keys.F) {
OpenEggbertDisplayMode currentDisplayMode = game.getOpenEggbertDisplayMode();
OpenEggbertDisplayMode newDisplayMode = currentDisplayMode.flip();
OpenEggbertDisplayMode.setDisplayMode(newDisplayMode);
game.setOpenEggbertDisplayMode(newDisplayMode);
}
return true;
}
});
}
@Override
public void renderOpenEggbertScreen(float delta) {
timeSeconds += Gdx.graphics.getRawDeltaTime();
if (timeSeconds >= 50) {
timeSeconds = 0;
game.setScreen(new DemoScreen(game));
}
ScreenUtils.clear(0f, 0f, 0f, 1f);
batch.begin();
drawBackgroundIfAvailable();
batch.end();
}
@Override
public void hide() {
Gdx.input.setInputProcessor(null);
}
}

View File

@ -0,0 +1,85 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.screen;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.InputAdapter;
import com.pixelgamelibrary.api.graphics.Color;
import com.badlogic.gdx.utils.ScreenUtils;
import com.openeggbert.core.main.OpenEggbertGame;
import com.pixelgamelibrary.api.graphics.BitmapFont;
import java.util.Optional;
/**
*
* @author robertvokac
*/
public class MainHubScreen extends AbstractGameScreen {
public MainHubScreen(OpenEggbertGame openEggbertGame) {
super(openEggbertGame);
}
protected final Optional<ScreenType> getScreenType() {
return Optional.of(ScreenType.MAIN_HUB);
}
@Override
public void show() {
Gdx.input.setInputProcessor(new InputAdapter() {
@Override
public boolean keyDown(int keyCode) {
game.setScreen(new InitScreen(game));
return true;
}
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
game.setScreen(new InitScreen(game));
return true;
}
});
}
@Override
public void renderOpenEggbertScreen(float delta) {
ScreenUtils.clear(0f, 0f, 0f, 1f);
batch.begin();
drawBackgroundIfAvailable();
BitmapFont font;
font = game.getFont();
font.setScale(2.0f);
font.setColor(Color.RED);
font.draw(batch, "Sorry, demo is not yet implemented", 40, 400);
font.draw(batch, "Please, press any key", 40, 300);
font.draw(batch, "to return to the main screen", 40, 250);
batch.end();
}
@Override
public void hide() {
Gdx.input.setInputProcessor(null);
}
}

View File

@ -0,0 +1,144 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.screen;
import com.openeggbert.core.gamespace.GameFileType;
import com.openeggbert.core.main.OpenEggbertGame;
import com.openeggbert.core.utils.OpenEggbertUtils;
import com.pixelgamelibrary.api.Pixel;
import com.pixelgamelibrary.api.Platform;
import com.pixelgamelibrary.api.app.LogLevel;
import com.pixelgamelibrary.api.graphics.SpriteBatch;
import com.pixelgamelibrary.api.graphics.Texture;
import com.pixelgamelibrary.api.screen.ScreenAdapter;
import java.util.List;
import java.util.Optional;
import com.pixelgamelibrary.api.files.File;
/**
*
* @author robertvokac
*/
public abstract class OpenEggbertScreen extends ScreenAdapter {
protected OpenEggbertGame game;
protected SpriteBatch batch;
public OpenEggbertScreen(OpenEggbertGame openEggbertGame) {
this.game = openEggbertGame;
this.batch = openEggbertGame.getBatch();
loadBackgroundTextureIfNeeded();
}
private String getBackgroundFileName() {
//return "INIT.BLP.BMP";
return getScreenType().isPresent() ? getScreenType().get().getFileNameWithoutExtension(): "";
}
protected Optional<ScreenType> getScreenType() {
return Optional.empty();
}
protected Optional<Texture> getBackgroundTexture() {
if (getBackgroundFileName().isEmpty()) {
return Optional.empty();
}
return game.getImageTexture(getBackgroundFileName());
}
private void loadBackgroundTextureIfNeeded() {
//if(true) return;//todo
if (getBackgroundFileName().isEmpty()) {
return;
}
String fileName = getBackgroundFileName();
if(getScreenType().isPresent() && getScreenType().get().isBasic()) {
if (!game.existsImageTexture("BASIC")) {
File fileHandle;
if (Pixel.app().isOneOfPlatforms(Platform.ANDROID, Platform.WEB)) {
Pixel.app().log("screen","loading from internal");
fileHandle = Pixel.files().assets("BASIC/BASIC.PNG");
} else {
Pixel.app().log("screen","loading from classpath");
fileHandle = Pixel.files().assets("BASIC/BASIC.PNG");
}
game.loadImageTexture(fileHandle);
}
return;
}
List<String> possibleFileNames = OpenEggbertUtils.createPossibleFileNames(GameFileType.IMAGE8, fileName);
for(String possibleFileName: possibleFileNames) {
if (!game.existsImageTexture(possibleFileName)) {
String name = game.getGameSpace().getImage08Directory() + "/" + possibleFileName;
Pixel.app().setLogLevel(LogLevel.INFO);
Pixel.app().log("screen","name=" + name);
File fileHandle = null;
if (game.getGameSpace().isEmbeddedAssets()) {
if (Pixel.app().isOneOfPlatforms(Platform.ANDROID, Platform.WEB)) {
Pixel.app().log("screen","loading from internal");
fileHandle = Pixel.files().assets(name);
} else {
Pixel.app().log("screen","loading from classpath");
fileHandle = Pixel.files().assets(name);
}
} else {
Pixel.app().log("screen","loading from absolute");
fileHandle = Pixel.files().absolute(name);
}
Pixel.app().log("screen", "fileHandleUpperCase.exists()=" + fileHandle.exists());
if (fileHandle.exists()) {
game.loadImageTexture(fileHandle);
break;
}
// else {
// throw new OpenEggbertException("Could not load file: " + fileName);
// }
}
}
}
protected void drawBackgroundIfAvailable() {
if(getScreenType().isPresent() && getScreenType().get().isBasic()) {
batch.draw(game.getImageTexture("BASIC").get(), 0, 0, 640,480);
return;
}
if (getBackgroundTexture().isPresent()) {
batch.draw(getBackgroundTexture().get(), 0, 0);
}
}
@Override
public final void render(float delta) {
renderOpenEggbertScreen(delta);
}
public abstract void renderOpenEggbertScreen(float delta);
}

View File

@ -18,13 +18,12 @@
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.entity.common;
package com.openeggbert.core.screen;
/**
*
* @author robertvokac
*/
public class ScreenType {
public class ScreenSheet {
}

View File

@ -0,0 +1,68 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.screen;
import lombok.Getter;
/**
*
* @author robertvokac
*/
public enum ScreenType {
MAIN,
GAME_SPACE_LIST("BASIC"),
GAME_SPACE_CREATE("BASIC"),
GAME_SPACE_RENAME("BASIC"),
GAME_SPACE_DELETE("BASIC"),
GAME_SPACE_RESET("BASIC"),
GAME_SPACE_EDIT("BASIC"),
GAME_SPACE_CONFIGURE("BASIC"),
GAME_SPACE_CONFIGURE_ENTRY("BASIC"),
GAME_SPACE_SELECT_MODE("BASIC"),
//
MOD_LIST,
MOD_VIEW,
//
INIT("INIT"),
GAMER("GAMER"),
MAIN_HUB(""),
SUB_HUB(""),
GAME(""),
EDITOR(""),
EDITOR_DEMO(""),
DEMO("DECOR016"),//todo fix me
;
@Getter
private String fileNameWithoutExtension;
ScreenType() {
this.fileNameWithoutExtension = "";
}
ScreenType(String fileName) {
this.fileNameWithoutExtension = fileName;
}
public boolean isBasic() {
return name().startsWith("GAME_SPACE") || name().startsWith("MOD");
}
}

View File

@ -0,0 +1,85 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.screen;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.InputAdapter;
import com.pixelgamelibrary.api.graphics.Color;
import com.badlogic.gdx.utils.ScreenUtils;
import com.openeggbert.core.main.OpenEggbertGame;
import com.pixelgamelibrary.api.graphics.BitmapFont;
import java.util.Optional;
/**
*
* @author robertvokac
*/
public class SubHubScreen extends AbstractGameScreen {
public SubHubScreen(OpenEggbertGame openEggbertGame) {
super(openEggbertGame);
}
protected final Optional<ScreenType> getScreenType() {
return Optional.of(ScreenType.SUB_HUB);
}
@Override
public void show() {
Gdx.input.setInputProcessor(new InputAdapter() {
@Override
public boolean keyDown(int keyCode) {
game.setScreen(new InitScreen(game));
return true;
}
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
game.setScreen(new InitScreen(game));
return true;
}
});
}
@Override
public void renderOpenEggbertScreen(float delta) {
ScreenUtils.clear(0f, 0f, 0f, 1f);
batch.begin();
drawBackgroundIfAvailable();
BitmapFont font;
font = game.getFont();
font.setScale(2.0f);
font.setColor(Color.RED);
font.draw(batch, "Sorry, demo is not yet implemented", 40, 400);
font.draw(batch, "Please, press any key", 40, 300);
font.draw(batch, "to return to the main screen", 40, 250);
batch.end();
}
@Override
public void hide() {
Gdx.input.setInputProcessor(null);
}
}

View File

@ -0,0 +1,92 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.screen;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.InputAdapter;
import com.badlogic.gdx.utils.ScreenUtils;
import com.openeggbert.core.main.OpenEggbertGame;
import com.pixelgamelibrary.api.Pixel;
import com.pixelgamelibrary.api.graphics.BitmapFont;
import java.util.function.Function;
/**
*
* @author robertvokac
*/
public class TestScreen extends OpenEggbertScreen {
public TestScreen(OpenEggbertGame openEggbertGame) {
super(openEggbertGame);
}
@Override
public void show() {
Gdx.input.setInputProcessor(new InputAdapter() {
@Override
public boolean keyDown(int keyCode) {
if (keyCode == Input.Keys.SPACE) {
game.setScreen(new GameSpaceListScreen(game));
}
return true;
}
});
}
@Override
public void renderOpenEggbertScreen(float delta) {
ScreenUtils.clear(0.15f, 0.15f, 0.2f, 1f);
game.getBatch().begin();
Function<String, String> removeCurrentDir = i -> i == null ? null : i.replace(game.getAbsolutePathOfRootDirectory()+ "/", "");
if (Pixel.app().getPlatform().isDesktop() && game.getGameSpace() != null) {
BitmapFont font;
font = game.getFont();
int x = 140;
font.draw(game.getBatch(), "getFeatureLevel=" + game.getGameSpace().getFeatureLevel(), 40, x);
x += 25;
font.draw(game.getBatch(), "getDataDirectory=" + removeCurrentDir.apply(game.getGameSpace().getDataDirectory()), 40, x);
x += 25;
font.draw(game.getBatch(), "getImage08Directory=" + removeCurrentDir.apply(game.getGameSpace().getImage08Directory()), 40, x);
x += 25;
font.draw(game.getBatch(), "getImage16Directory=" + removeCurrentDir.apply(game.getGameSpace().getImage16Directory()), 40, x);
x += 25;
font.draw(game.getBatch(), "getImage24Directory=" + removeCurrentDir.apply(game.getGameSpace().getImage24Directory()), 40, x);
x += 25;
font.draw(game.getBatch(), "getImage24x2Directory=" + removeCurrentDir.apply(game.getGameSpace().getImage24x2Directory()), 40, x);
x += 25;
font.draw(game.getBatch(), "getSoundDirectory=" + removeCurrentDir.apply(game.getGameSpace().getSoundDirectory()), 40, x);
}
if (game.getAbsolutePathOfRootDirectory()!= null) {
BitmapFont font;
font = game.getFont();
font.draw(game.getBatch(), game.getAbsolutePathOfRootDirectory(), 40, 340);
}
batch.draw(game.getImage(), 40, 400);
game.getBatch().end();
}
@Override
public void hide() {
Gdx.input.setInputProcessor(null);
}
}

View File

@ -0,0 +1,52 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.sound;
import lombok.Getter;
import com.openeggbert.core.configuration.IsThisFeatureEnabledForStrictMode;
/**
*
* @author robertvokac
*/
public enum SoundFormat implements IsThisFeatureEnabledForStrictMode {
BLP("blp", true),
WAV("wav", false),
MP3("mp3", false),
OGG("ogg", false),
;
@Getter
private String fileExtension;
SoundFormat(String fileExtensionIn, boolean enabledInCaseOfStrictMode) {
this.fileExtension = fileExtensionIn;
this.enabledInCaseOfStrictMode = enabledInCaseOfStrictMode;
}
@Getter
private boolean enabledInCaseOfStrictMode;
@Override
public boolean isThisFeatureEnabledForStrictMode() {
return enabledInCaseOfStrictMode;
}
public SoundFormat getTargetFormat() {
return this == BLP ? WAV : this;
}
}

View File

@ -0,0 +1,30 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.sound;
import com.openeggbert.core.image.*;
/**
*
* @author robertvokac
*/
public class SoundManager {
}

View File

@ -18,13 +18,12 @@
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.entity.gameplay;
package com.openeggbert.core.sound;
/**
*
* @author robertvokac
*/
public class Buldozer {
public class SoundSheet {
}

View File

@ -0,0 +1,115 @@
///////////////////////////////////////////////////////////////////////////////////////////////
// Open Eggbert: Free recreation of the computer game Speedy Eggbert.
// Copyright (C) 2024 the original author or authors.
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// <https://www.gnu.org/licenses/> or write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
///////////////////////////////////////////////////////////////////////////////////////////////
package com.openeggbert.core.sound;
import com.openeggbert.core.release.Release;
import lombok.Getter;
/**
*
* @author robertvokac
*/
public enum SoundType {
CLICK(0),
MEDIUM_JUMP(1),
HIGH_JUMP(2),
FALLING_ON_FLOOR(3),
HEAD_WAS_BANGED_THE_HEAD_SOUND(4),
TURNING_ON_THE_OTHER_SIDE(5),
ALMOST_FALLED(6),
LOOKING_DOWN(7),
INSTANT_DEATH(8),
NEW_LIFE(9),
EXPLOSION(10),
ONE_TREASURE_WAS_COLLECTED(11),
ONE_EGG_WAS_COLLECTED(12),
REACHED_GOAL_BUT_NOT_TREASURES_ARE_COLLECTED(13),
REACHED_GOAL_BUT_AND_ALL_TREASURES_ARE_COLLECTED(14),
HELICOPTER_IS_BEING_STARTED(15),
HELICOPTER_IS_WORKING(16),
HELICOPTER_IS_BEING_STOPPED(17),
HELICOPTER_IS_WORKING_IN_REDUCED_POWER(18),
//19
//20
//21
LOG_JUMP(22),
FALLING_IN_WATER(23),
SWIMMING_IN_WATER(24),
SAILING_TO_WATER_SURFACE(25),
DROWNED_IN_THE_WATER(26),
//27
JEEP_IS_BEING_STARTED(28),
JEEP_IS_WORKING(29),
JEEP_IS_BEING_STOPPED(30),
JEEP_IS_WORKING_IN_REDUCED_POWER(31),
GOODBYE_BEFORE_VISITING_ANOTHER_WORLD(32),
OPENING_DOORS(33),
//34
//35
MONKEY_SOUND_IF_TOO_LONG_HANGING_ON_BAR_WITHOUT_AN_ACTIVITY(36),
FEET_TAPPING(37),
PUSHING_CASE_FORWARD(38),
PULLING_CASE_BACKWARD(39),
HEAD_WAS_BANGED_THE_BLUPI_VOICE(40),
JUMPING_FROM_SPRING(41),
COLLECTED_SHIELD_AND_INSTANTLY_USING(42),
SHIELD_LOST_EFFECT(43),
LOLLIPOP_EFFECT_STARTED(44),
LOLLIPOP_EFFECT_ENDED(45),
SIGHING_FROM_THE_FATIGUE_OF_PUSHING_THE_CASE(46),
//47
ANGRY_FROM_PULLING_THE_CASE_FOR_TOO_LONG_TIME(48),
FEAR(49),
LICKING_LOLLIPOP(50),
//51
//52
EMPTY_TANK(53),
//54
RECHARGING_DEVICE_EFFECT_STARTING(55),
RECHARGING_DEVICE_EFFECT_ENDING(56),
DRINKING_INVISIBILITY_POTION(57),
//58
//59
HAPPY_BECAUSE_COLLECTED_ONE_DYNAMITE(60),
HAPPY_BECAUSE_FIRED_ONE_DYNAMITE(61),
//62
//63
SPLASH_OF_WATER(64),
STICKING_OUT_THE_TONGUE(65),
//66-69
CRUSHER_EFFECT(70),
//71
BRIDGE_IS_COLLAPSING(72);
//LAST_TREASURE_WAS_COLLECTED(12)
;
@Getter
private int number;
SoundType(int numberIn, Release... featureLevels) {
this.number = numberIn;
}
}

Some files were not shown because too many files have changed in this diff Show More