diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..67df35c --- /dev/null +++ b/.editorconfig @@ -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 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..6c84be0 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +* text=auto eol=lf +*.bat text=auto eol=crlf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..36f8fb3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,163 @@ +## 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 +*.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 + +## 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 diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..c5f3f6b --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "java.configuration.updateBuildConfiguration": "interactive" +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..3467a3f --- /dev/null +++ b/README.md @@ -0,0 +1,33 @@ +# Space-Game-setup + +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. + +## Platforms + +- `core`: Main module with the application logic shared by all platforms. +- `lwjgl3`: Primary desktop platform using LWJGL3. + +## 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. +- `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. +- `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. +- `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. diff --git a/assets/Space Game.ico b/assets/Space Game.ico new file mode 100644 index 0000000..ccf03d0 Binary files /dev/null and b/assets/Space Game.ico differ diff --git a/assets/fonts/nasalization-rg.otf b/assets/fonts/nasalization-rg.otf new file mode 100644 index 0000000..ce4625f Binary files /dev/null and b/assets/fonts/nasalization-rg.otf differ diff --git a/assets/fonts/space-age.ttf b/assets/fonts/space-age.ttf new file mode 100644 index 0000000..85a62a8 Binary files /dev/null and b/assets/fonts/space-age.ttf differ diff --git a/assets/images/aliens/alien_green.png b/assets/images/aliens/alien_green.png new file mode 100644 index 0000000..82e84ad Binary files /dev/null and b/assets/images/aliens/alien_green.png differ diff --git a/assets/images/aliens/alien_red.png b/assets/images/aliens/alien_red.png new file mode 100644 index 0000000..69f4bac Binary files /dev/null and b/assets/images/aliens/alien_red.png differ diff --git a/assets/images/aliens/ase/alien1.ase b/assets/images/aliens/ase/alien1.ase new file mode 100644 index 0000000..8cedf48 Binary files /dev/null and b/assets/images/aliens/ase/alien1.ase differ diff --git a/assets/images/guns/ase/bullet.ase b/assets/images/guns/ase/bullet.ase new file mode 100644 index 0000000..9397734 Binary files /dev/null and b/assets/images/guns/ase/bullet.ase differ diff --git a/assets/images/guns/ase/bullet2.ase b/assets/images/guns/ase/bullet2.ase new file mode 100644 index 0000000..e5ebe06 Binary files /dev/null and b/assets/images/guns/ase/bullet2.ase differ diff --git a/assets/images/guns/ase/tiro1.ase b/assets/images/guns/ase/tiro1.ase new file mode 100644 index 0000000..a7285b3 Binary files /dev/null and b/assets/images/guns/ase/tiro1.ase differ diff --git a/assets/images/guns/ase/tiro2.ase b/assets/images/guns/ase/tiro2.ase new file mode 100644 index 0000000..26fe9a1 Binary files /dev/null and b/assets/images/guns/ase/tiro2.ase differ diff --git a/assets/images/guns/bullet.png b/assets/images/guns/bullet.png new file mode 100644 index 0000000..c24bc04 Binary files /dev/null and b/assets/images/guns/bullet.png differ diff --git a/assets/images/guns/bullet2.png b/assets/images/guns/bullet2.png new file mode 100644 index 0000000..41eabb7 Binary files /dev/null and b/assets/images/guns/bullet2.png differ diff --git a/assets/images/guns/tiro1.png b/assets/images/guns/tiro1.png new file mode 100644 index 0000000..5655ff2 Binary files /dev/null and b/assets/images/guns/tiro1.png differ diff --git a/assets/images/guns/tiro2.png b/assets/images/guns/tiro2.png new file mode 100644 index 0000000..4afe5c6 Binary files /dev/null and b/assets/images/guns/tiro2.png differ diff --git a/assets/images/scenario/ECadente1.png b/assets/images/scenario/ECadente1.png new file mode 100644 index 0000000..5e3174a Binary files /dev/null and b/assets/images/scenario/ECadente1.png differ diff --git a/assets/images/scenario/Planeta1.png b/assets/images/scenario/Planeta1.png new file mode 100644 index 0000000..ad36ae3 Binary files /dev/null and b/assets/images/scenario/Planeta1.png differ diff --git a/assets/images/scenario/Planeta2.png b/assets/images/scenario/Planeta2.png new file mode 100644 index 0000000..d5c9992 Binary files /dev/null and b/assets/images/scenario/Planeta2.png differ diff --git a/assets/images/scenario/Planeta3.png b/assets/images/scenario/Planeta3.png new file mode 100644 index 0000000..1d0a120 Binary files /dev/null and b/assets/images/scenario/Planeta3.png differ diff --git a/assets/images/scenario/ase/ECadente1.ase b/assets/images/scenario/ase/ECadente1.ase new file mode 100644 index 0000000..4203979 Binary files /dev/null and b/assets/images/scenario/ase/ECadente1.ase differ diff --git a/assets/images/scenario/ase/ECadente2.ase b/assets/images/scenario/ase/ECadente2.ase new file mode 100644 index 0000000..1f893c6 Binary files /dev/null and b/assets/images/scenario/ase/ECadente2.ase differ diff --git a/assets/images/scenario/ase/ECadente3.ase b/assets/images/scenario/ase/ECadente3.ase new file mode 100644 index 0000000..f8bfd77 Binary files /dev/null and b/assets/images/scenario/ase/ECadente3.ase differ diff --git a/assets/images/scenario/ase/Planeta1.ase b/assets/images/scenario/ase/Planeta1.ase new file mode 100644 index 0000000..49538e8 Binary files /dev/null and b/assets/images/scenario/ase/Planeta1.ase differ diff --git a/assets/images/scenario/ase/Planeta2.ase b/assets/images/scenario/ase/Planeta2.ase new file mode 100644 index 0000000..edc88fe Binary files /dev/null and b/assets/images/scenario/ase/Planeta2.ase differ diff --git a/assets/images/scenario/ase/Planeta3.ase b/assets/images/scenario/ase/Planeta3.ase new file mode 100644 index 0000000..ee08d9f Binary files /dev/null and b/assets/images/scenario/ase/Planeta3.ase differ diff --git a/assets/images/scenario/ase/background.ase b/assets/images/scenario/ase/background.ase new file mode 100644 index 0000000..8fce586 Binary files /dev/null and b/assets/images/scenario/ase/background.ase differ diff --git a/assets/images/scenario/ase/galaxia.ase b/assets/images/scenario/ase/galaxia.ase new file mode 100644 index 0000000..7caf067 Binary files /dev/null and b/assets/images/scenario/ase/galaxia.ase differ diff --git a/assets/images/scenario/ase/galaxia2.ase b/assets/images/scenario/ase/galaxia2.ase new file mode 100644 index 0000000..2e47359 Binary files /dev/null and b/assets/images/scenario/ase/galaxia2.ase differ diff --git a/assets/images/scenario/ase/nebulosa.ase b/assets/images/scenario/ase/nebulosa.ase new file mode 100644 index 0000000..eb34ae3 Binary files /dev/null and b/assets/images/scenario/ase/nebulosa.ase differ diff --git a/assets/images/scenario/ase/star1.ase b/assets/images/scenario/ase/star1.ase new file mode 100644 index 0000000..0d0fa7b Binary files /dev/null and b/assets/images/scenario/ase/star1.ase differ diff --git a/assets/images/scenario/ase/star2.ase b/assets/images/scenario/ase/star2.ase new file mode 100644 index 0000000..145f6fb Binary files /dev/null and b/assets/images/scenario/ase/star2.ase differ diff --git a/assets/images/scenario/ase/star3.ase b/assets/images/scenario/ase/star3.ase new file mode 100644 index 0000000..c62bcf5 Binary files /dev/null and b/assets/images/scenario/ase/star3.ase differ diff --git a/assets/images/scenario/background.png b/assets/images/scenario/background.png new file mode 100644 index 0000000..97f5464 Binary files /dev/null and b/assets/images/scenario/background.png differ diff --git a/assets/images/scenario/galaxia.png b/assets/images/scenario/galaxia.png new file mode 100644 index 0000000..53f005d Binary files /dev/null and b/assets/images/scenario/galaxia.png differ diff --git a/assets/images/scenario/galaxia2.png b/assets/images/scenario/galaxia2.png new file mode 100644 index 0000000..aefdd86 Binary files /dev/null and b/assets/images/scenario/galaxia2.png differ diff --git a/assets/images/scenario/nebulosa.png b/assets/images/scenario/nebulosa.png new file mode 100644 index 0000000..b14ac78 Binary files /dev/null and b/assets/images/scenario/nebulosa.png differ diff --git a/assets/images/scenario/nebulosa1.png b/assets/images/scenario/nebulosa1.png new file mode 100644 index 0000000..b017daf Binary files /dev/null and b/assets/images/scenario/nebulosa1.png differ diff --git a/assets/images/scenario/star1.png b/assets/images/scenario/star1.png new file mode 100644 index 0000000..0f874ed Binary files /dev/null and b/assets/images/scenario/star1.png differ diff --git a/assets/images/scenario/star2.png b/assets/images/scenario/star2.png new file mode 100644 index 0000000..7689a9c Binary files /dev/null and b/assets/images/scenario/star2.png differ diff --git a/assets/images/scenario/star3.png b/assets/images/scenario/star3.png new file mode 100644 index 0000000..0610fc3 Binary files /dev/null and b/assets/images/scenario/star3.png differ diff --git a/assets/images/spaceships/ase/spaceship1-2.ase b/assets/images/spaceships/ase/spaceship1-2.ase new file mode 100644 index 0000000..cc5eb76 Binary files /dev/null and b/assets/images/spaceships/ase/spaceship1-2.ase differ diff --git a/assets/images/spaceships/ase/spaceship1.ase b/assets/images/spaceships/ase/spaceship1.ase new file mode 100644 index 0000000..a412134 Binary files /dev/null and b/assets/images/spaceships/ase/spaceship1.ase differ diff --git a/assets/images/spaceships/ase/spaceship2.ase b/assets/images/spaceships/ase/spaceship2.ase new file mode 100644 index 0000000..7c827ad Binary files /dev/null and b/assets/images/spaceships/ase/spaceship2.ase differ diff --git a/assets/images/spaceships/ase/spaceship3.ase b/assets/images/spaceships/ase/spaceship3.ase new file mode 100644 index 0000000..7cc2413 Binary files /dev/null and b/assets/images/spaceships/ase/spaceship3.ase differ diff --git a/assets/images/spaceships/spaceship.png b/assets/images/spaceships/spaceship.png new file mode 100644 index 0000000..a5fdb6f Binary files /dev/null and b/assets/images/spaceships/spaceship.png differ diff --git a/assets/musics/gameover/gameover.mp3 b/assets/musics/gameover/gameover.mp3 new file mode 100644 index 0000000..fbc1c15 Binary files /dev/null and b/assets/musics/gameover/gameover.mp3 differ diff --git a/assets/musics/menu/Echoes of the Last Stand.mp3 b/assets/musics/menu/Echoes of the Last Stand.mp3 new file mode 100644 index 0000000..02ce009 Binary files /dev/null and b/assets/musics/menu/Echoes of the Last Stand.mp3 differ diff --git a/assets/musics/playing/Galactic Clash pt. 1.mp3 b/assets/musics/playing/Galactic Clash pt. 1.mp3 new file mode 100644 index 0000000..a6e05f6 Binary files /dev/null and b/assets/musics/playing/Galactic Clash pt. 1.mp3 differ diff --git a/assets/musics/playing/Galactic Clash pt. 2.mp3 b/assets/musics/playing/Galactic Clash pt. 2.mp3 new file mode 100644 index 0000000..add0a3a Binary files /dev/null and b/assets/musics/playing/Galactic Clash pt. 2.mp3 differ diff --git a/assets/musics/playing/Galactic Memories pt. 1.mp3 b/assets/musics/playing/Galactic Memories pt. 1.mp3 new file mode 100644 index 0000000..a262c22 Binary files /dev/null and b/assets/musics/playing/Galactic Memories pt. 1.mp3 differ diff --git a/assets/musics/playing/Galactic Memories pt. 2.mp3 b/assets/musics/playing/Galactic Memories pt. 2.mp3 new file mode 100644 index 0000000..ce9dbf2 Binary files /dev/null and b/assets/musics/playing/Galactic Memories pt. 2.mp3 differ diff --git a/assets/musics/playing/Ghosts in the Circuits.mp3 b/assets/musics/playing/Ghosts in the Circuits.mp3 new file mode 100644 index 0000000..655951e Binary files /dev/null and b/assets/musics/playing/Ghosts in the Circuits.mp3 differ diff --git a/assets/musics/playing/Odyssey.mp3 b/assets/musics/playing/Odyssey.mp3 new file mode 100644 index 0000000..39676c5 Binary files /dev/null and b/assets/musics/playing/Odyssey.mp3 differ diff --git a/assets/musics/playing/Warcry.mp3 b/assets/musics/playing/Warcry.mp3 new file mode 100644 index 0000000..35c806d Binary files /dev/null and b/assets/musics/playing/Warcry.mp3 differ diff --git a/assets/musics/playing/mechanical delusions pt. 1.mp3 b/assets/musics/playing/mechanical delusions pt. 1.mp3 new file mode 100644 index 0000000..6182737 Binary files /dev/null and b/assets/musics/playing/mechanical delusions pt. 1.mp3 differ diff --git a/assets/musics/playing/mechanical delusions pt. 2.mp3 b/assets/musics/playing/mechanical delusions pt. 2.mp3 new file mode 100644 index 0000000..4e7e833 Binary files /dev/null and b/assets/musics/playing/mechanical delusions pt. 2.mp3 differ diff --git a/assets/skins/default/README.md b/assets/skins/default/README.md new file mode 100644 index 0000000..f1d4e4a --- /dev/null +++ b/assets/skins/default/README.md @@ -0,0 +1,17 @@ +# LibGDX default skin + +The one, the only, [*the default one*](https://github.com/libgdx/libgdx/tree/master/tests/gdx-tests-android/assets/data). + +Majority of LibGDX devs started with this skin, as it's easy to find with ~~Goog~~ your search engine of choice. And, well, it *works*. + +Supports most of the **Scene2D** widgets (including the newest tooltips), with notable exceptions being the image buttons. Features no additional icons, so if you want fancy controls for turning music on and off, you might want to [modify it](https://github.com/libgdx/libgdx/tree/master/tests/gdx-tests-android/assets-raw/skin). + +![Default](preview.png) + +Preview taken from [LibGDX skins](https://github.com/libgdx/libgdx-skins): + +![Default](preview-large.png) + +### License + +Seems to be the same as the whole **LibGDX** framework. But then again - in commercial products, you might want to try out something fancier. diff --git a/assets/skins/default/preview-large.png b/assets/skins/default/preview-large.png new file mode 100644 index 0000000..2aa158e Binary files /dev/null and b/assets/skins/default/preview-large.png differ diff --git a/assets/skins/default/preview.png b/assets/skins/default/preview.png new file mode 100644 index 0000000..15bae49 Binary files /dev/null and b/assets/skins/default/preview.png differ diff --git a/assets/skins/default/raw/check-off.png b/assets/skins/default/raw/check-off.png new file mode 100644 index 0000000..14b6512 Binary files /dev/null and b/assets/skins/default/raw/check-off.png differ diff --git a/assets/skins/default/raw/check-on.png b/assets/skins/default/raw/check-on.png new file mode 100644 index 0000000..5d21b76 Binary files /dev/null and b/assets/skins/default/raw/check-on.png differ diff --git a/assets/skins/default/raw/cursor.9.png b/assets/skins/default/raw/cursor.9.png new file mode 100644 index 0000000..aeed93c Binary files /dev/null and b/assets/skins/default/raw/cursor.9.png differ diff --git a/assets/skins/default/raw/default-pane-noborder.9.png b/assets/skins/default/raw/default-pane-noborder.9.png new file mode 100644 index 0000000..d2c3e66 Binary files /dev/null and b/assets/skins/default/raw/default-pane-noborder.9.png differ diff --git a/assets/skins/default/raw/default-pane.9.png b/assets/skins/default/raw/default-pane.9.png new file mode 100644 index 0000000..6b3f904 Binary files /dev/null and b/assets/skins/default/raw/default-pane.9.png differ diff --git a/assets/skins/default/raw/default-rect-down.9.png b/assets/skins/default/raw/default-rect-down.9.png new file mode 100644 index 0000000..81a63e0 Binary files /dev/null and b/assets/skins/default/raw/default-rect-down.9.png differ diff --git a/assets/skins/default/raw/default-rect-pad.9.png b/assets/skins/default/raw/default-rect-pad.9.png new file mode 100644 index 0000000..6b3f904 Binary files /dev/null and b/assets/skins/default/raw/default-rect-pad.9.png differ diff --git a/assets/skins/default/raw/default-rect.9.png b/assets/skins/default/raw/default-rect.9.png new file mode 100644 index 0000000..f1f5363 Binary files /dev/null and b/assets/skins/default/raw/default-rect.9.png differ diff --git a/assets/skins/default/raw/default-round-down.9.png b/assets/skins/default/raw/default-round-down.9.png new file mode 100644 index 0000000..e017404 Binary files /dev/null and b/assets/skins/default/raw/default-round-down.9.png differ diff --git a/assets/skins/default/raw/default-round-large.9.png b/assets/skins/default/raw/default-round-large.9.png new file mode 100644 index 0000000..ffc12fd Binary files /dev/null and b/assets/skins/default/raw/default-round-large.9.png differ diff --git a/assets/skins/default/raw/default-round.9.png b/assets/skins/default/raw/default-round.9.png new file mode 100644 index 0000000..adf9568 Binary files /dev/null and b/assets/skins/default/raw/default-round.9.png differ diff --git a/assets/skins/default/raw/default-scroll.9.png b/assets/skins/default/raw/default-scroll.9.png new file mode 100644 index 0000000..832c1a3 Binary files /dev/null and b/assets/skins/default/raw/default-scroll.9.png differ diff --git a/assets/skins/default/raw/default-select-selection.9.png b/assets/skins/default/raw/default-select-selection.9.png new file mode 100644 index 0000000..4649412 Binary files /dev/null and b/assets/skins/default/raw/default-select-selection.9.png differ diff --git a/assets/skins/default/raw/default-select.9.png b/assets/skins/default/raw/default-select.9.png new file mode 100644 index 0000000..38b951a Binary files /dev/null and b/assets/skins/default/raw/default-select.9.png differ diff --git a/assets/skins/default/raw/default-slider-knob.png b/assets/skins/default/raw/default-slider-knob.png new file mode 100644 index 0000000..e03d374 Binary files /dev/null and b/assets/skins/default/raw/default-slider-knob.png differ diff --git a/assets/skins/default/raw/default-slider.9.png b/assets/skins/default/raw/default-slider.9.png new file mode 100644 index 0000000..5d7a781 Binary files /dev/null and b/assets/skins/default/raw/default-slider.9.png differ diff --git a/assets/skins/default/raw/default-splitpane-vertical.9.png b/assets/skins/default/raw/default-splitpane-vertical.9.png new file mode 100644 index 0000000..f6cffa3 Binary files /dev/null and b/assets/skins/default/raw/default-splitpane-vertical.9.png differ diff --git a/assets/skins/default/raw/default-splitpane.9.png b/assets/skins/default/raw/default-splitpane.9.png new file mode 100644 index 0000000..bd72370 Binary files /dev/null and b/assets/skins/default/raw/default-splitpane.9.png differ diff --git a/assets/skins/default/raw/default-window.9.png b/assets/skins/default/raw/default-window.9.png new file mode 100644 index 0000000..0db9e67 Binary files /dev/null and b/assets/skins/default/raw/default-window.9.png differ diff --git a/assets/skins/default/raw/default.png b/assets/skins/default/raw/default.png new file mode 100644 index 0000000..e203acc Binary files /dev/null and b/assets/skins/default/raw/default.png differ diff --git a/assets/skins/default/raw/pack.json b/assets/skins/default/raw/pack.json new file mode 100644 index 0000000..c699c33 --- /dev/null +++ b/assets/skins/default/raw/pack.json @@ -0,0 +1,5 @@ +{ +duplicatePadding: false, +paddingX: 1, +paddingY: 1 +} \ No newline at end of file diff --git a/assets/skins/default/raw/selection.png b/assets/skins/default/raw/selection.png new file mode 100644 index 0000000..d2533cb Binary files /dev/null and b/assets/skins/default/raw/selection.png differ diff --git a/assets/skins/default/raw/textfield.9.png b/assets/skins/default/raw/textfield.9.png new file mode 100644 index 0000000..cb8ad31 Binary files /dev/null and b/assets/skins/default/raw/textfield.9.png differ diff --git a/assets/skins/default/raw/tree-minus.png b/assets/skins/default/raw/tree-minus.png new file mode 100644 index 0000000..f8e4079 Binary files /dev/null and b/assets/skins/default/raw/tree-minus.png differ diff --git a/assets/skins/default/raw/tree-plus.png b/assets/skins/default/raw/tree-plus.png new file mode 100644 index 0000000..85d23cc Binary files /dev/null and b/assets/skins/default/raw/tree-plus.png differ diff --git a/assets/skins/default/raw/white.png b/assets/skins/default/raw/white.png new file mode 100644 index 0000000..5c94704 Binary files /dev/null and b/assets/skins/default/raw/white.png differ diff --git a/assets/skins/default/skin/default.fnt b/assets/skins/default/skin/default.fnt new file mode 100644 index 0000000..f99f782 --- /dev/null +++ b/assets/skins/default/skin/default.fnt @@ -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 + diff --git a/assets/skins/default/skin/uiskin.atlas b/assets/skins/default/skin/uiskin.atlas new file mode 100644 index 0000000..e51dee1 --- /dev/null +++ b/assets/skins/default/skin/uiskin.atlas @@ -0,0 +1,201 @@ + +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 + diff --git a/assets/skins/default/skin/uiskin.json b/assets/skins/default/skin/uiskin.json new file mode 100644 index 0000000..bce7b4f --- /dev/null +++ b/assets/skins/default/skin/uiskin.json @@ -0,0 +1,71 @@ +{ +com.badlogic.gdx.graphics.g2d.BitmapFont: { default-font: { file: default.fnt } }, +com.badlogic.gdx.graphics.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 }, +}, +com.badlogic.gdx.scenes.scene2d.ui.Skin$TintedDrawable: { + dialogDim: { name: white, color: { r: 0, g: 0, b: 0, a: 0.45 } }, +}, +com.badlogic.gdx.scenes.scene2d.ui.Button$ButtonStyle: { + default: { down: default-round-down, up: default-round }, + toggle: { down: default-round-down, checked: default-round-down, up: default-round } +}, +com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle: { + default: { down: default-round-down, up: default-round, font: default-font, fontColor: white }, + toggle: { down: default-round-down, up: default-round, checked: default-round-down, font: default-font, fontColor: white, downFontColor: red } +}, +com.badlogic.gdx.scenes.scene2d.ui.ScrollPane$ScrollPaneStyle: { + default: { vScroll: default-scroll, hScrollKnob: default-round-large, background: default-rect, hScroll: default-scroll, vScrollKnob: default-round-large } +}, +com.badlogic.gdx.scenes.scene2d.ui.SelectBox$SelectBoxStyle: { + default: { + font: default-font, fontColor: white, background: default-select, + scrollStyle: default, + listStyle: { font: default-font, selection: default-select-selection } + } +}, +com.badlogic.gdx.scenes.scene2d.ui.SplitPane$SplitPaneStyle: { + default-vertical: { handle: default-splitpane-vertical }, + default-horizontal: { handle: default-splitpane } +}, +com.badlogic.gdx.scenes.scene2d.ui.Window$WindowStyle: { + default: { titleFont: default-font, background: default-window, titleFontColor: white }, + dialog: { titleFont: default-font, background: default-window, titleFontColor: white, stageBackground: dialogDim } +}, +com.badlogic.gdx.scenes.scene2d.ui.ProgressBar$ProgressBarStyle: { + default-horizontal: { background: default-slider, knob: default-slider-knob }, + default-vertical: { background: default-slider, knob: default-round-large } +}, +com.badlogic.gdx.scenes.scene2d.ui.Slider$SliderStyle: { + default-horizontal: { background: default-slider, knob: default-slider-knob }, + default-vertical: { background: default-slider, knob: default-round-large } +}, +com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle: { + default: { font: default-font, fontColor: white } +}, +com.badlogic.gdx.scenes.scene2d.ui.TextField$TextFieldStyle: { + default: { selection: selection, background: textfield, font: default-font, fontColor: white, cursor: cursor } +}, +com.badlogic.gdx.scenes.scene2d.ui.CheckBox$CheckBoxStyle: { + default: { checkboxOn: check-on, checkboxOff: check-off, font: default-font, fontColor: white } +}, +com.badlogic.gdx.scenes.scene2d.ui.List$ListStyle: { + default: { fontColorUnselected: white, selection: selection, fontColorSelected: white, font: default-font } +}, +com.badlogic.gdx.scenes.scene2d.ui.Touchpad$TouchpadStyle: { + default: { background: default-pane, knob: default-round-large } +}, +com.badlogic.gdx.scenes.scene2d.ui.Tree$TreeStyle: { + default: { minus: tree-minus, plus: tree-plus, selection: default-select-selection } +}, +com.badlogic.gdx.scenes.scene2d.ui.TextTooltip$TextTooltipStyle: { + default: { + label: { font: default-font, fontColor: white }, + background: default-pane, wrapWidth: 150 + } +}, +} + diff --git a/assets/skins/default/skin/uiskin.png b/assets/skins/default/skin/uiskin.png new file mode 100644 index 0000000..c1e5f1a Binary files /dev/null and b/assets/skins/default/skin/uiskin.png differ diff --git a/assets/skins/neon/README.md b/assets/skins/neon/README.md new file mode 100644 index 0000000..41cec3d --- /dev/null +++ b/assets/skins/neon/README.md @@ -0,0 +1,22 @@ +# Neon UI + +``` +Neon UI Ver. 1 + +Created by Raymond "Raeleus" Buckley +Visit ray3k.wordpress.com for games, tutorials, and much more! + +Neon UI can be used under the CC BY license. +http://creativecommons.org/licenses/by/4.0/ +``` + +Features styles of most of **Scene2D** widgets. A neon GUI skin that can be easily recolored programmatically by modifying `Color` values in JSON skin definition file. Great for prototyping! + +![Neon](preview.gif) + +### About + +Created with [Skin Composer](https://github.com/raeleus/skin-composer) by [**Raeleus**](https://ray3k.wordpress.com/neon-ui-skin-for-libgdx/). + +### License +[CC BY 4.0](http://creativecommons.org/licenses/by/4.0/). Give credit to [***Raymond "Raeleus" Buckley***](https://ray3k.wordpress.com/software/skin-composer-for-libgdx/). diff --git a/assets/skins/neon/preview.gif b/assets/skins/neon/preview.gif new file mode 100644 index 0000000..28a7223 Binary files /dev/null and b/assets/skins/neon/preview.gif differ diff --git a/assets/skins/neon/raw/button-over.9.png b/assets/skins/neon/raw/button-over.9.png new file mode 100644 index 0000000..607da21 Binary files /dev/null and b/assets/skins/neon/raw/button-over.9.png differ diff --git a/assets/skins/neon/raw/button-over.png b/assets/skins/neon/raw/button-over.png new file mode 100644 index 0000000..eaea6ef Binary files /dev/null and b/assets/skins/neon/raw/button-over.png differ diff --git a/assets/skins/neon/raw/button-pressed.9.png b/assets/skins/neon/raw/button-pressed.9.png new file mode 100644 index 0000000..78687b2 Binary files /dev/null and b/assets/skins/neon/raw/button-pressed.9.png differ diff --git a/assets/skins/neon/raw/button-pressed.png b/assets/skins/neon/raw/button-pressed.png new file mode 100644 index 0000000..a5256a7 Binary files /dev/null and b/assets/skins/neon/raw/button-pressed.png differ diff --git a/assets/skins/neon/raw/button.9.png b/assets/skins/neon/raw/button.9.png new file mode 100644 index 0000000..051b9c1 Binary files /dev/null and b/assets/skins/neon/raw/button.9.png differ diff --git a/assets/skins/neon/raw/button.png b/assets/skins/neon/raw/button.png new file mode 100644 index 0000000..e0b41f9 Binary files /dev/null and b/assets/skins/neon/raw/button.png differ diff --git a/assets/skins/neon/raw/checkbox-over.png b/assets/skins/neon/raw/checkbox-over.png new file mode 100644 index 0000000..4cd2e93 Binary files /dev/null and b/assets/skins/neon/raw/checkbox-over.png differ diff --git a/assets/skins/neon/raw/checkbox-pressed-over.png b/assets/skins/neon/raw/checkbox-pressed-over.png new file mode 100644 index 0000000..a0600e7 Binary files /dev/null and b/assets/skins/neon/raw/checkbox-pressed-over.png differ diff --git a/assets/skins/neon/raw/checkbox-pressed.png b/assets/skins/neon/raw/checkbox-pressed.png new file mode 100644 index 0000000..3d4d4bb Binary files /dev/null and b/assets/skins/neon/raw/checkbox-pressed.png differ diff --git a/assets/skins/neon/raw/checkbox.png b/assets/skins/neon/raw/checkbox.png new file mode 100644 index 0000000..8b21a18 Binary files /dev/null and b/assets/skins/neon/raw/checkbox.png differ diff --git a/assets/skins/neon/raw/font-export.fnt b/assets/skins/neon/raw/font-export.fnt new file mode 100644 index 0000000..25809da --- /dev/null +++ b/assets/skins/neon/raw/font-export.fnt @@ -0,0 +1,710 @@ +info face="font-export" size=32 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=1,1 +common lineHeight=18 base=18 scaleW=116 scaleH=117 pages=1 packed=0 alphaChnl=1 redChnl=0 greenChnl=0 blueChnl=0 +page id=0 file="font-export.png" +chars count=98 +char id=33 x=106 y=17 width=4 height=13 xoffset=0 yoffset=5 xadvance=4 page=0 chnl=0 letter="!" +char id=34 x=98 y=109 width=6 height=7 xoffset=0 yoffset=5 xadvance=6 page=0 chnl=0 letter=""" +char id=35 x=27 y=14 width=11 height=13 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=0 letter="#" +char id=36 x=38 y=42 width=10 height=16 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=0 letter="$" +char id=37 x=0 y=14 width=14 height=14 xoffset=0 yoffset=4 xadvance=14 page=0 chnl=0 letter="%" +char id=38 x=26 y=85 width=11 height=13 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=0 letter="&" +char id=39 x=100 y=25 width=5 height=7 xoffset=0 yoffset=5 xadvance=5 page=0 chnl=0 letter="'" +char id=40 x=100 y=0 width=6 height=16 xoffset=0 yoffset=5 xadvance=6 page=0 chnl=0 letter="(" +char id=41 x=99 y=59 width=6 height=16 xoffset=0 yoffset=5 xadvance=6 page=0 chnl=0 letter=")" +char id=42 x=90 y=109 width=7 height=7 xoffset=0 yoffset=5 xadvance=7 page=0 chnl=0 letter="*" +char id=43 x=49 y=80 width=10 height=10 xoffset=0 yoffset=7 xadvance=10 page=0 chnl=0 letter="+" +char id=44 x=100 y=17 width=5 height=7 xoffset=0 yoffset=13 xadvance=5 page=0 chnl=0 letter="," +char id=45 x=61 y=28 width=7 height=4 xoffset=0 yoffset=10 xadvance=7 page=0 chnl=0 letter="-" +char id=46 x=100 y=33 width=4 height=4 xoffset=0 yoffset=14 xadvance=4 page=0 chnl=0 letter="." +char id=47 x=70 y=83 width=9 height=14 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0 letter="/" +char id=48 x=49 y=54 width=10 height=13 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=0 letter="0" +char id=49 x=91 y=0 width=6 height=13 xoffset=0 yoffset=5 xadvance=6 page=0 chnl=0 letter="1" +char id=50 x=90 y=28 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="2" +char id=51 x=61 y=0 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="3" +char id=52 x=49 y=40 width=10 height=13 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=0 letter="4" +char id=53 x=80 y=71 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="5" +char id=54 x=80 y=57 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="6" +char id=55 x=80 y=85 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="7" +char id=56 x=80 y=99 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="8" +char id=57 x=90 y=14 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="9" +char id=58 x=106 y=49 width=4 height=11 xoffset=0 yoffset=7 xadvance=4 page=0 chnl=0 letter=":" +char id=59 x=99 y=76 width=5 height=14 xoffset=0 yoffset=7 xadvance=5 page=0 chnl=0 letter=";" +char id=60 x=49 y=91 width=10 height=10 xoffset=0 yoffset=8 xadvance=10 page=0 chnl=0 letter="<" +char id=61 x=14 y=71 width=10 height=7 xoffset=0 yoffset=9 xadvance=10 page=0 chnl=0 letter="=" +char id=62 x=50 y=28 width=10 height=10 xoffset=0 yoffset=8 xadvance=10 page=0 chnl=0 letter=">" +char id=63 x=81 y=0 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="?" +char id=64 x=0 y=29 width=13 height=13 xoffset=0 yoffset=5 xadvance=13 page=0 chnl=0 letter="@" +char id=65 x=13 y=81 width=12 height=13 xoffset=0 yoffset=5 xadvance=12 page=0 chnl=0 letter="A" +char id=66 x=39 y=26 width=10 height=13 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=0 letter="B" +char id=67 x=15 y=14 width=11 height=13 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=0 letter="C" +char id=68 x=16 y=0 width=11 height=13 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=0 letter="D" +char id=69 x=80 y=29 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="E" +char id=70 x=80 y=15 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="F" +char id=71 x=26 y=43 width=11 height=13 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=0 letter="G" +char id=72 x=26 y=71 width=11 height=13 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=0 letter="H" +char id=73 x=106 y=61 width=4 height=13 xoffset=0 yoffset=5 xadvance=4 page=0 chnl=0 letter="I" +char id=74 x=70 y=69 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="J" +char id=75 x=26 y=57 width=11 height=13 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=0 letter="K" +char id=76 x=80 y=43 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="L" +char id=77 x=0 y=55 width=13 height=13 xoffset=0 yoffset=5 xadvance=13 page=0 chnl=0 letter="M" +char id=78 x=26 y=99 width=11 height=13 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=0 letter="N" +char id=79 x=13 y=95 width=12 height=13 xoffset=0 yoffset=5 xadvance=12 page=0 chnl=0 letter="O" +char id=80 x=49 y=102 width=10 height=13 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=0 letter="P" +char id=81 x=0 y=94 width=12 height=13 xoffset=0 yoffset=5 xadvance=12 page=0 chnl=0 letter="Q" +char id=82 x=50 y=14 width=10 height=13 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=0 letter="R" +char id=83 x=38 y=74 width=10 height=13 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=0 letter="S" +char id=84 x=14 y=57 width=11 height=13 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=0 letter="T" +char id=85 x=28 y=0 width=11 height=13 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=0 letter="U" +char id=86 x=14 y=43 width=11 height=13 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=0 letter="V" +char id=87 x=0 y=0 width=15 height=13 xoffset=0 yoffset=5 xadvance=15 page=0 chnl=0 letter="W" +char id=88 x=27 y=28 width=11 height=13 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=0 letter="X" +char id=89 x=14 y=29 width=12 height=13 xoffset=0 yoffset=5 xadvance=12 page=0 chnl=0 letter="Y" +char id=90 x=38 y=103 width=10 height=13 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=0 letter="Z" +char id=91 x=105 y=76 width=5 height=16 xoffset=0 yoffset=5 xadvance=5 page=0 chnl=0 letter="[" +char id=92 x=60 y=39 width=9 height=14 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0 letter="\" +char id=93 x=105 y=93 width=5 height=16 xoffset=0 yoffset=5 xadvance=5 page=0 chnl=0 letter="]" +char id=94 x=60 y=94 width=9 height=9 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="^" +char id=95 x=0 y=109 width=10 height=4 xoffset=0 yoffset=16 xadvance=10 page=0 chnl=0 letter="_" +char id=96 x=61 y=33 width=6 height=5 xoffset=0 yoffset=5 xadvance=6 page=0 chnl=0 letter="`" +char id=97 x=90 y=80 width=8 height=11 xoffset=0 yoffset=7 xadvance=8 page=0 chnl=0 letter="a" +char id=98 x=40 y=0 width=10 height=13 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=0 letter="b" +char id=99 x=51 y=0 width=9 height=11 xoffset=0 yoffset=7 xadvance=9 page=0 chnl=0 letter="c" +char id=100 x=61 y=14 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="d" +char id=101 x=60 y=104 width=9 height=11 xoffset=0 yoffset=7 xadvance=9 page=0 chnl=0 letter="e" +char id=102 x=70 y=43 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="f" +char id=103 x=70 y=28 width=9 height=14 xoffset=0 yoffset=7 xadvance=9 page=0 chnl=0 letter="g" +char id=104 x=60 y=66 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="h" +char id=105 x=111 y=14 width=4 height=13 xoffset=0 yoffset=5 xadvance=4 page=0 chnl=0 letter="i" +char id=106 x=90 y=92 width=7 height=16 xoffset=0 yoffset=5 xadvance=7 page=0 chnl=0 letter="j" +char id=107 x=60 y=80 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="k" +char id=108 x=107 y=0 width=4 height=13 xoffset=0 yoffset=5 xadvance=4 page=0 chnl=0 letter="l" +char id=109 x=0 y=69 width=13 height=11 xoffset=0 yoffset=7 xadvance=13 page=0 chnl=0 letter="m" +char id=110 x=70 y=57 width=9 height=11 xoffset=0 yoffset=7 xadvance=9 page=0 chnl=0 letter="n" +char id=111 x=70 y=98 width=9 height=11 xoffset=0 yoffset=7 xadvance=9 page=0 chnl=0 letter="o" +char id=112 x=38 y=59 width=10 height=14 xoffset=0 yoffset=7 xadvance=10 page=0 chnl=0 letter="p" +char id=113 x=71 y=0 width=9 height=14 xoffset=0 yoffset=7 xadvance=9 page=0 chnl=0 letter="q" +char id=114 x=71 y=15 width=8 height=11 xoffset=0 yoffset=7 xadvance=8 page=0 chnl=0 letter="r" +char id=115 x=90 y=68 width=8 height=11 xoffset=0 yoffset=7 xadvance=8 page=0 chnl=0 letter="s" +char id=116 x=90 y=42 width=8 height=13 xoffset=0 yoffset=5 xadvance=8 page=0 chnl=0 letter="t" +char id=117 x=60 y=54 width=9 height=11 xoffset=0 yoffset=7 xadvance=9 page=0 chnl=0 letter="u" +char id=118 x=39 y=14 width=10 height=11 xoffset=0 yoffset=7 xadvance=10 page=0 chnl=0 letter="v" +char id=119 x=0 y=43 width=13 height=11 xoffset=0 yoffset=7 xadvance=13 page=0 chnl=0 letter="w" +char id=120 x=49 y=68 width=10 height=11 xoffset=0 yoffset=7 xadvance=10 page=0 chnl=0 letter="x" +char id=121 x=38 y=88 width=10 height=14 xoffset=0 yoffset=7 xadvance=10 page=0 chnl=0 letter="y" +char id=122 x=90 y=56 width=8 height=11 xoffset=0 yoffset=7 xadvance=8 page=0 chnl=0 letter="z" +char id=123 x=98 y=92 width=6 height=16 xoffset=0 yoffset=5 xadvance=6 page=0 chnl=0 letter="{" +char id=124 x=106 y=31 width=4 height=17 xoffset=0 yoffset=4 xadvance=4 page=0 chnl=0 letter="|" +char id=125 x=99 y=42 width=6 height=16 xoffset=0 yoffset=5 xadvance=6 page=0 chnl=0 letter="}" +char id=126 x=11 y=109 width=10 height=5 xoffset=0 yoffset=8 xadvance=10 page=0 chnl=0 letter="~" +char id=8226 x=70 y=110 width=5 height=5 xoffset=0 yoffset=9 xadvance=5 page=0 chnl=0 letter="•" +char id=169 x=0 y=81 width=12 height=12 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="©" +char id=32 x=0 y=0 width=0 height=0 xoffset=0 yoffset=0 xadvance=6 page=0 chnl=0 letter=" " +char id=9 x=0 y=0 width=0 height=0 xoffset=0 yoffset=0 xadvance=48 page=0 chnl=0 letter=" " + +kernings count=606 +kerning first=65 second=39 amount=-3 +kerning first=65 second=67 amount=-1 +kerning first=65 second=71 amount=-1 +kerning first=65 second=79 amount=-1 +kerning first=65 second=81 amount=-1 +kerning first=65 second=84 amount=-3 +kerning first=65 second=85 amount=-1 +kerning first=65 second=86 amount=-3 +kerning first=65 second=87 amount=-3 +kerning first=65 second=89 amount=-3 +kerning first=66 second=65 amount=-1 +kerning first=66 second=69 amount=-1 +kerning first=66 second=76 amount=-1 +kerning first=66 second=80 amount=-1 +kerning first=66 second=82 amount=-1 +kerning first=66 second=85 amount=-1 +kerning first=66 second=86 amount=-1 +kerning first=66 second=87 amount=-1 +kerning first=66 second=89 amount=-1 +kerning first=67 second=65 amount=-1 +kerning first=67 second=79 amount=-1 +kerning first=67 second=82 amount=-1 +kerning first=68 second=65 amount=-1 +kerning first=68 second=68 amount=-1 +kerning first=68 second=69 amount=-1 +kerning first=68 second=73 amount=-1 +kerning first=68 second=76 amount=-1 +kerning first=68 second=77 amount=-1 +kerning first=68 second=78 amount=-1 +kerning first=68 second=79 amount=-1 +kerning first=68 second=80 amount=-1 +kerning first=68 second=82 amount=-1 +kerning first=68 second=85 amount=-1 +kerning first=68 second=86 amount=-1 +kerning first=68 second=87 amount=-1 +kerning first=68 second=89 amount=-1 +kerning first=69 second=67 amount=-1 +kerning first=69 second=79 amount=-1 +kerning first=70 second=65 amount=-2 +kerning first=70 second=67 amount=-1 +kerning first=70 second=71 amount=-1 +kerning first=70 second=79 amount=-1 +kerning first=70 second=46 amount=-5 +kerning first=70 second=44 amount=-6 +kerning first=71 second=69 amount=-1 +kerning first=71 second=79 amount=-1 +kerning first=71 second=82 amount=-1 +kerning first=71 second=85 amount=-1 +kerning first=72 second=79 amount=-1 +kerning first=73 second=67 amount=-1 +kerning first=73 second=71 amount=-1 +kerning first=73 second=79 amount=-1 +kerning first=74 second=65 amount=-1 +kerning first=74 second=79 amount=-1 +kerning first=75 second=79 amount=-1 +kerning first=76 second=39 amount=-6 +kerning first=76 second=67 amount=-1 +kerning first=76 second=84 amount=-4 +kerning first=76 second=86 amount=-4 +kerning first=76 second=87 amount=-3 +kerning first=76 second=89 amount=-5 +kerning first=76 second=71 amount=-1 +kerning first=76 second=79 amount=-1 +kerning first=76 second=85 amount=-1 +kerning first=77 second=71 amount=-1 +kerning first=77 second=79 amount=-1 +kerning first=78 second=67 amount=-1 +kerning first=78 second=71 amount=-1 +kerning first=78 second=79 amount=-1 +kerning first=79 second=65 amount=-1 +kerning first=79 second=66 amount=-1 +kerning first=79 second=68 amount=-1 +kerning first=79 second=69 amount=-1 +kerning first=79 second=70 amount=-1 +kerning first=79 second=72 amount=-1 +kerning first=79 second=73 amount=-1 +kerning first=79 second=75 amount=-1 +kerning first=79 second=76 amount=-1 +kerning first=79 second=77 amount=-1 +kerning first=79 second=78 amount=-1 +kerning first=79 second=80 amount=-1 +kerning first=79 second=82 amount=-1 +kerning first=79 second=84 amount=-1 +kerning first=79 second=85 amount=-1 +kerning first=79 second=86 amount=-1 +kerning first=79 second=87 amount=-1 +kerning first=79 second=88 amount=-1 +kerning first=79 second=89 amount=-1 +kerning first=80 second=65 amount=-3 +kerning first=80 second=69 amount=-1 +kerning first=80 second=76 amount=-1 +kerning first=80 second=79 amount=-1 +kerning first=80 second=80 amount=-1 +kerning first=80 second=85 amount=-1 +kerning first=80 second=89 amount=-1 +kerning first=80 second=46 amount=-5 +kerning first=80 second=44 amount=-6 +kerning first=80 second=59 amount=-2 +kerning first=80 second=58 amount=-1 +kerning first=81 second=85 amount=-1 +kerning first=82 second=67 amount=-1 +kerning first=82 second=71 amount=-1 +kerning first=82 second=89 amount=-1 +kerning first=82 second=84 amount=-1 +kerning first=82 second=85 amount=-1 +kerning first=82 second=86 amount=-1 +kerning first=82 second=87 amount=-1 +kerning first=82 second=89 amount=-1 +kerning first=83 second=73 amount=-1 +kerning first=83 second=77 amount=-1 +kerning first=83 second=84 amount=-2 +kerning first=83 second=85 amount=-1 +kerning first=84 second=65 amount=-4 +kerning first=84 second=67 amount=-1 +kerning first=84 second=79 amount=-1 +kerning first=85 second=65 amount=-1 +kerning first=85 second=67 amount=-1 +kerning first=85 second=71 amount=-1 +kerning first=85 second=79 amount=-1 +kerning first=85 second=83 amount=-1 +kerning first=86 second=65 amount=-3 +kerning first=86 second=67 amount=-1 +kerning first=86 second=71 amount=-1 +kerning first=86 second=79 amount=-1 +kerning first=86 second=83 amount=-1 +kerning first=87 second=65 amount=-3 +kerning first=87 second=67 amount=-1 +kerning first=87 second=71 amount=-1 +kerning first=87 second=79 amount=-1 +kerning first=89 second=65 amount=-4 +kerning first=89 second=67 amount=-1 +kerning first=89 second=79 amount=-1 +kerning first=89 second=83 amount=-1 +kerning first=90 second=79 amount=-1 +kerning first=65 second=99 amount=-1 +kerning first=65 second=100 amount=-1 +kerning first=65 second=101 amount=-1 +kerning first=65 second=103 amount=-1 +kerning first=65 second=111 amount=-1 +kerning first=65 second=112 amount=-1 +kerning first=65 second=113 amount=-1 +kerning first=65 second=116 amount=-3 +kerning first=65 second=117 amount=-1 +kerning first=65 second=118 amount=-2 +kerning first=65 second=119 amount=-2 +kerning first=65 second=121 amount=-2 +kerning first=66 second=98 amount=-1 +kerning first=66 second=105 amount=-1 +kerning first=66 second=107 amount=-1 +kerning first=66 second=108 amount=-1 +kerning first=66 second=114 amount=-1 +kerning first=66 second=117 amount=-1 +kerning first=66 second=121 amount=-1 +kerning first=66 second=46 amount=-1 +kerning first=66 second=44 amount=-1 +kerning first=67 second=97 amount=-1 +kerning first=67 second=114 amount=-1 +kerning first=67 second=46 amount=-1 +kerning first=67 second=44 amount=-1 +kerning first=68 second=97 amount=-1 +kerning first=68 second=46 amount=-1 +kerning first=68 second=44 amount=-2 +kerning first=69 second=117 amount=-1 +kerning first=69 second=118 amount=-1 +kerning first=70 second=97 amount=-1 +kerning first=70 second=101 amount=-1 +kerning first=70 second=105 amount=-1 +kerning first=70 second=111 amount=-1 +kerning first=70 second=114 amount=-1 +kerning first=70 second=116 amount=-1 +kerning first=70 second=117 amount=-1 +kerning first=70 second=121 amount=-1 +kerning first=70 second=46 amount=-5 +kerning first=70 second=44 amount=-6 +kerning first=70 second=59 amount=-2 +kerning first=70 second=58 amount=-1 +kerning first=71 second=117 amount=-1 +kerning first=72 second=101 amount=-1 +kerning first=72 second=111 amount=-1 +kerning first=72 second=117 amount=-1 +kerning first=72 second=121 amount=-1 +kerning first=73 second=99 amount=-1 +kerning first=73 second=100 amount=-1 +kerning first=73 second=113 amount=-1 +kerning first=73 second=111 amount=-1 +kerning first=73 second=116 amount=-1 +kerning first=74 second=97 amount=-1 +kerning first=74 second=101 amount=-1 +kerning first=74 second=111 amount=-1 +kerning first=74 second=117 amount=-1 +kerning first=74 second=46 amount=-1 +kerning first=74 second=44 amount=-1 +kerning first=75 second=101 amount=-1 +kerning first=75 second=111 amount=-1 +kerning first=75 second=117 amount=-1 +kerning first=76 second=117 amount=-1 +kerning first=76 second=121 amount=-3 +kerning first=77 second=97 amount=-1 +kerning first=77 second=99 amount=-1 +kerning first=77 second=100 amount=-1 +kerning first=77 second=101 amount=-1 +kerning first=77 second=111 amount=-1 +kerning first=78 second=117 amount=-1 +kerning first=78 second=97 amount=-1 +kerning first=78 second=101 amount=-1 +kerning first=78 second=105 amount=-1 +kerning first=78 second=111 amount=-1 +kerning first=78 second=117 amount=-1 +kerning first=78 second=46 amount=-1 +kerning first=78 second=44 amount=-1 +kerning first=79 second=97 amount=-1 +kerning first=79 second=98 amount=-1 +kerning first=79 second=104 amount=-1 +kerning first=79 second=107 amount=-1 +kerning first=79 second=108 amount=-1 +kerning first=79 second=46 amount=-1 +kerning first=79 second=44 amount=-2 +kerning first=80 second=97 amount=-1 +kerning first=80 second=101 amount=-1 +kerning first=80 second=111 amount=-1 +kerning first=82 second=100 amount=-1 +kerning first=82 second=101 amount=-1 +kerning first=82 second=111 amount=-1 +kerning first=82 second=116 amount=-1 +kerning first=82 second=117 amount=-1 +kerning first=83 second=105 amount=-1 +kerning first=83 second=112 amount=-1 +kerning first=83 second=117 amount=-1 +kerning first=83 second=46 amount=-1 +kerning first=83 second=44 amount=-2 +kerning first=84 second=97 amount=-1 +kerning first=84 second=99 amount=-2 +kerning first=84 second=101 amount=-1 +kerning first=84 second=105 amount=-1 +kerning first=84 second=111 amount=-1 +kerning first=84 second=114 amount=-1 +kerning first=84 second=115 amount=-1 +kerning first=84 second=117 amount=-1 +kerning first=84 second=119 amount=-1 +kerning first=84 second=121 amount=-1 +kerning first=84 second=46 amount=-5 +kerning first=84 second=44 amount=-5 +kerning first=84 second=59 amount=-2 +kerning first=84 second=58 amount=-1 +kerning first=85 second=97 amount=-1 +kerning first=85 second=103 amount=-1 +kerning first=85 second=109 amount=-1 +kerning first=85 second=110 amount=-1 +kerning first=85 second=112 amount=-1 +kerning first=85 second=115 amount=-1 +kerning first=85 second=46 amount=-1 +kerning first=85 second=44 amount=-2 +kerning first=86 second=97 amount=-1 +kerning first=86 second=101 amount=-1 +kerning first=86 second=105 amount=-1 +kerning first=86 second=111 amount=-1 +kerning first=86 second=114 amount=-1 +kerning first=86 second=117 amount=-1 +kerning first=86 second=46 amount=-3 +kerning first=86 second=44 amount=-4 +kerning first=86 second=59 amount=-2 +kerning first=86 second=58 amount=-1 +kerning first=87 second=100 amount=-1 +kerning first=87 second=105 amount=-1 +kerning first=87 second=109 amount=-1 +kerning first=87 second=114 amount=-1 +kerning first=87 second=116 amount=-1 +kerning first=87 second=117 amount=-1 +kerning first=87 second=121 amount=-1 +kerning first=87 second=46 amount=-3 +kerning first=87 second=44 amount=-3 +kerning first=87 second=59 amount=-2 +kerning first=87 second=58 amount=-1 +kerning first=88 second=97 amount=-1 +kerning first=88 second=101 amount=-1 +kerning first=88 second=111 amount=-1 +kerning first=88 second=117 amount=-1 +kerning first=88 second=121 amount=-1 +kerning first=89 second=100 amount=-1 +kerning first=89 second=101 amount=-1 +kerning first=89 second=105 amount=-1 +kerning first=89 second=112 amount=-1 +kerning first=89 second=117 amount=-1 +kerning first=89 second=118 amount=-1 +kerning first=89 second=46 amount=-5 +kerning first=89 second=44 amount=-5 +kerning first=89 second=59 amount=-2 +kerning first=89 second=58 amount=-1 +kerning first=97 second=99 amount=-1 +kerning first=97 second=100 amount=-1 +kerning first=97 second=101 amount=-1 +kerning first=97 second=103 amount=-1 +kerning first=97 second=112 amount=-1 +kerning first=97 second=102 amount=-1 +kerning first=97 second=116 amount=-1 +kerning first=97 second=117 amount=-1 +kerning first=97 second=118 amount=-1 +kerning first=97 second=119 amount=-1 +kerning first=97 second=121 amount=-1 +kerning first=97 second=112 amount=-1 +kerning first=98 second=108 amount=-1 +kerning first=98 second=114 amount=-1 +kerning first=98 second=117 amount=-1 +kerning first=98 second=121 amount=-1 +kerning first=98 second=46 amount=-1 +kerning first=98 second=44 amount=-2 +kerning first=99 second=97 amount=-1 +kerning first=99 second=104 amount=-1 +kerning first=99 second=107 amount=-1 +kerning first=100 second=97 amount=-1 +kerning first=100 second=99 amount=-1 +kerning first=100 second=101 amount=-1 +kerning first=100 second=103 amount=-1 +kerning first=100 second=111 amount=-1 +kerning first=100 second=116 amount=-1 +kerning first=100 second=117 amount=-1 +kerning first=100 second=118 amount=-1 +kerning first=100 second=119 amount=-1 +kerning first=100 second=121 amount=-1 +kerning first=100 second=46 amount=-1 +kerning first=100 second=44 amount=-1 +kerning first=101 second=97 amount=-1 +kerning first=101 second=105 amount=-1 +kerning first=101 second=108 amount=-1 +kerning first=101 second=109 amount=-1 +kerning first=101 second=110 amount=-1 +kerning first=101 second=112 amount=-1 +kerning first=101 second=114 amount=-1 +kerning first=101 second=116 amount=-1 +kerning first=101 second=117 amount=-1 +kerning first=101 second=118 amount=-1 +kerning first=101 second=119 amount=-1 +kerning first=101 second=121 amount=-1 +kerning first=101 second=46 amount=-1 +kerning first=101 second=44 amount=-1 +kerning first=102 second=97 amount=-1 +kerning first=102 second=101 amount=-1 +kerning first=102 second=102 amount=-1 +kerning first=102 second=105 amount=-1 +kerning first=102 second=108 amount=-1 +kerning first=102 second=111 amount=-1 +kerning first=102 second=46 amount=-4 +kerning first=102 second=44 amount=-4 +kerning first=103 second=97 amount=-1 +kerning first=103 second=101 amount=-1 +kerning first=103 second=104 amount=-1 +kerning first=103 second=108 amount=-1 +kerning first=103 second=111 amount=-1 +kerning first=103 second=103 amount=-1 +kerning first=103 second=46 amount=-1 +kerning first=103 second=44 amount=-1 +kerning first=104 second=99 amount=-1 +kerning first=104 second=100 amount=-1 +kerning first=104 second=101 amount=-1 +kerning first=104 second=103 amount=-1 +kerning first=104 second=111 amount=-1 +kerning first=104 second=112 amount=-1 +kerning first=104 second=116 amount=-1 +kerning first=104 second=117 amount=-1 +kerning first=104 second=118 amount=-1 +kerning first=104 second=119 amount=-1 +kerning first=104 second=121 amount=-1 +kerning first=105 second=99 amount=-1 +kerning first=105 second=100 amount=-1 +kerning first=105 second=101 amount=-1 +kerning first=105 second=103 amount=-1 +kerning first=105 second=111 amount=-1 +kerning first=105 second=112 amount=-1 +kerning first=105 second=116 amount=-1 +kerning first=105 second=117 amount=-1 +kerning first=105 second=118 amount=-1 +kerning first=106 second=97 amount=-1 +kerning first=106 second=101 amount=-1 +kerning first=106 second=111 amount=-1 +kerning first=106 second=117 amount=-1 +kerning first=106 second=46 amount=-2 +kerning first=106 second=44 amount=-2 +kerning first=107 second=97 amount=-1 +kerning first=107 second=99 amount=-1 +kerning first=107 second=100 amount=-1 +kerning first=107 second=101 amount=-1 +kerning first=107 second=103 amount=-1 +kerning first=107 second=111 amount=-1 +kerning first=108 second=97 amount=-1 +kerning first=108 second=99 amount=-1 +kerning first=108 second=100 amount=-1 +kerning first=108 second=101 amount=-1 +kerning first=108 second=102 amount=-1 +kerning first=108 second=103 amount=-1 +kerning first=108 second=111 amount=-1 +kerning first=108 second=112 amount=-1 +kerning first=108 second=113 amount=-1 +kerning first=108 second=117 amount=-1 +kerning first=108 second=118 amount=-1 +kerning first=108 second=119 amount=-1 +kerning first=108 second=121 amount=-1 +kerning first=109 second=97 amount=-1 +kerning first=109 second=99 amount=-1 +kerning first=109 second=100 amount=-1 +kerning first=109 second=101 amount=-1 +kerning first=109 second=103 amount=-1 +kerning first=109 second=110 amount=-1 +kerning first=109 second=111 amount=-1 +kerning first=109 second=112 amount=-1 +kerning first=109 second=116 amount=-1 +kerning first=109 second=117 amount=-1 +kerning first=109 second=118 amount=-1 +kerning first=109 second=121 amount=-1 +kerning first=110 second=99 amount=-1 +kerning first=110 second=100 amount=-1 +kerning first=110 second=101 amount=-1 +kerning first=110 second=103 amount=-1 +kerning first=110 second=111 amount=-1 +kerning first=110 second=112 amount=-1 +kerning first=110 second=116 amount=-1 +kerning first=110 second=117 amount=-1 +kerning first=110 second=118 amount=-1 +kerning first=110 second=119 amount=-1 +kerning first=110 second=121 amount=-1 +kerning first=111 second=98 amount=-1 +kerning first=111 second=102 amount=-1 +kerning first=111 second=104 amount=-1 +kerning first=111 second=106 amount=-3 +kerning first=111 second=107 amount=-1 +kerning first=111 second=108 amount=-1 +kerning first=111 second=109 amount=-1 +kerning first=111 second=110 amount=-1 +kerning first=111 second=112 amount=-1 +kerning first=111 second=114 amount=-1 +kerning first=111 second=117 amount=-1 +kerning first=111 second=118 amount=-1 +kerning first=111 second=119 amount=-1 +kerning first=111 second=120 amount=-1 +kerning first=111 second=121 amount=-1 +kerning first=111 second=46 amount=-1 +kerning first=111 second=44 amount=-1 +kerning first=112 second=97 amount=-1 +kerning first=112 second=104 amount=-1 +kerning first=112 second=105 amount=-1 +kerning first=112 second=108 amount=-1 +kerning first=112 second=112 amount=-1 +kerning first=112 second=117 amount=-1 +kerning first=112 second=46 amount=-1 +kerning first=112 second=44 amount=-2 +kerning first=113 second=117 amount=-1 +kerning first=116 second=46 amount=-1 +kerning first=114 second=97 amount=-1 +kerning first=114 second=100 amount=-1 +kerning first=114 second=101 amount=-1 +kerning first=114 second=103 amount=-1 +kerning first=114 second=107 amount=-1 +kerning first=114 second=108 amount=-1 +kerning first=114 second=109 amount=-1 +kerning first=114 second=110 amount=-1 +kerning first=114 second=111 amount=-1 +kerning first=114 second=113 amount=-1 +kerning first=114 second=114 amount=-1 +kerning first=114 second=116 amount=-1 +kerning first=114 second=118 amount=-1 +kerning first=114 second=121 amount=-1 +kerning first=114 second=46 amount=-5 +kerning first=114 second=44 amount=-5 +kerning first=115 second=104 amount=-1 +kerning first=115 second=116 amount=-1 +kerning first=115 second=117 amount=-1 +kerning first=115 second=46 amount=-1 +kerning first=115 second=44 amount=-1 +kerning first=116 second=100 amount=-1 +kerning first=116 second=97 amount=-1 +kerning first=116 second=101 amount=-1 +kerning first=116 second=111 amount=-1 +kerning first=116 second=46 amount=-1 +kerning first=116 second=44 amount=-1 +kerning first=117 second=97 amount=-1 +kerning first=117 second=99 amount=-1 +kerning first=117 second=100 amount=-1 +kerning first=117 second=101 amount=-1 +kerning first=117 second=103 amount=-1 +kerning first=117 second=111 amount=-1 +kerning first=117 second=112 amount=-1 +kerning first=117 second=113 amount=-1 +kerning first=117 second=116 amount=-1 +kerning first=117 second=118 amount=-1 +kerning first=117 second=119 amount=-1 +kerning first=117 second=121 amount=-1 +kerning first=118 second=97 amount=-1 +kerning first=118 second=98 amount=-1 +kerning first=118 second=99 amount=-1 +kerning first=118 second=100 amount=-1 +kerning first=118 second=101 amount=-1 +kerning first=118 second=103 amount=-1 +kerning first=118 second=111 amount=-1 +kerning first=118 second=118 amount=-1 +kerning first=118 second=121 amount=-1 +kerning first=118 second=46 amount=-3 +kerning first=118 second=44 amount=-3 +kerning first=119 second=97 amount=-1 +kerning first=119 second=120 amount=-1 +kerning first=119 second=100 amount=-1 +kerning first=119 second=101 amount=-1 +kerning first=119 second=103 amount=-1 +kerning first=119 second=104 amount=-1 +kerning first=119 second=111 amount=-1 +kerning first=119 second=46 amount=-2 +kerning first=119 second=44 amount=-3 +kerning first=120 second=97 amount=-1 +kerning first=120 second=101 amount=-1 +kerning first=120 second=111 amount=-1 +kerning first=121 second=46 amount=-3 +kerning first=121 second=44 amount=-3 +kerning first=121 second=97 amount=-1 +kerning first=121 second=99 amount=-1 +kerning first=121 second=100 amount=-1 +kerning first=121 second=101 amount=-1 +kerning first=121 second=111 amount=-1 +kerning first=117 second=109 amount=-1 +kerning first=84 second=104 amount=-1 +kerning first=118 second=101 amount=-1 +kerning first=119 second=110 amount=-1 +kerning first=112 second=115 amount=-1 +kerning first=76 second=97 amount=-1 +kerning first=117 second=105 amount=-1 +kerning first=98 second=101 amount=-1 +kerning first=99 second=111 amount=-1 +kerning first=102 second=103 amount=-1 +kerning first=118 second=119 amount=-1 +kerning first=120 second=121 amount=-1 +kerning first=121 second=122 amount=-1 +kerning first=119 second=119 amount=-1 +kerning first=99 second=101 amount=-1 +kerning first=101 second=115 amount=-1 +kerning first=101 second=102 amount=-1 +kerning first=98 second=97 amount=-1 +kerning first=116 second=104 amount=-1 +kerning first=116 second=105 amount=-1 +kerning first=101 second=101 amount=-1 +kerning first=104 second=97 amount=-1 +kerning first=111 second=101 amount=-1 +kerning first=119 second=105 amount=-1 +kerning first=88 second=89 amount=-1 +kerning first=89 second=90 amount=-1 +kerning first=82 second=83 amount=-1 +kerning first=75 second=76 amount=-1 +kerning first=101 second=100 amount=-1 +kerning first=116 second=111 amount=-1 +kerning first=87 second=104 amount=-1 +kerning first=107 second=110 amount=-1 +kerning first=119 second=115 amount=-1 +kerning first=116 second=114 amount=-1 +kerning first=102 second=114 amount=-1 +kerning first=65 second=110 amount=-1 +kerning first=116 second=116 amount=-1 +kerning first=66 second=67 amount=-1 +kerning first=67 second=68 amount=-1 +kerning first=65 second=66 amount=-1 +kerning first=89 second=111 amount=-1 +kerning first=102 second=117 amount=-1 +kerning first=67 second=111 amount=-1 +kerning first=116 second=115 amount=-1 +kerning first=111 second=111 amount=-1 +kerning first=68 second=111 amount=-1 +kerning first=101 second=97 amount=-1 +kerning first=76 second=111 amount=-1 +kerning first=115 second=105 amount=-1 +kerning first=111 second=116 amount=-1 +kerning first=111 second=103 amount=-1 +kerning first=82 second=97 amount=-1 +kerning first=101 second=99 amount=-1 +kerning first=66 second=111 amount=-1 +kerning first=111 second=99 amount=-1 +kerning first=115 second=111 amount=-1 +kerning first=83 second=119 amount=-2 +kerning first=66 second=101 amount=-1 +kerning first=99 second=116 amount=-1 +kerning first=98 second=106 amount=-3 +kerning first=115 second=101 amount=-1 +kerning first=121 second=119 amount=-1 +kerning first=111 second=97 amount=-1 +kerning first=68 second=88 amount=-1 +kerning first=101 second=98 amount=-1 +kerning first=115 second=119 amount=-1 +kerning first=97 second=120 amount=-1 +kerning first=73 second=110 amount=-1 +kerning first=73 second=74 amount=-1 +kerning first=116 second=112 amount=-1 +kerning first=104 second=105 amount=-1 +kerning first=105 second=115 amount=-1 +kerning first=98 second=99 amount=-1 +kerning first=115 second=112 amount=-1 +kerning first=100 second=105 amount=-1 +kerning first=105 second=106 amount=-3 +kerning first=108 second=109 amount=-1 +kerning first=107 second=108 amount=-1 +kerning first=108 second=105 amount=-1 +kerning first=112 second=113 amount=-1 +kerning first=108 second=108 amount=-1 +kerning first=49 second=50 amount=-1 +kerning first=106 second=107 amount=-1 +kerning first=117 second=110 amount=-1 +kerning first=113 second=114 amount=-1 +kerning first=116 second=117 amount=-1 +kerning first=114 second=115 amount=-1 +kerning first=117 second=114 amount=-1 +kerning first=73 second=112 amount=-1 +kerning first=79 second=112 amount=-1 +kerning first=101 second=103 amount=-1 diff --git a/assets/skins/neon/raw/font-export.png b/assets/skins/neon/raw/font-export.png new file mode 100644 index 0000000..d8c0dac Binary files /dev/null and b/assets/skins/neon/raw/font-export.png differ diff --git a/assets/skins/neon/raw/font-over-export.fnt b/assets/skins/neon/raw/font-over-export.fnt new file mode 100644 index 0000000..3e0feef --- /dev/null +++ b/assets/skins/neon/raw/font-over-export.fnt @@ -0,0 +1,710 @@ +info face="font-over-export" size=32 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=1,1 +common lineHeight=22 base=22 scaleW=142 scaleH=144 pages=1 packed=0 alphaChnl=1 redChnl=0 greenChnl=0 blueChnl=0 +page id=0 file="font-over-export.png" +chars count=98 +char id=33 x=133 y=101 width=7 height=16 xoffset=0 yoffset=6 xadvance=7 page=0 chnl=0 letter="!" +char id=34 x=123 y=132 width=9 height=10 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter=""" +char id=35 x=16 y=68 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="#" +char id=36 x=74 y=98 width=12 height=18 xoffset=0 yoffset=5 xadvance=12 page=0 chnl=0 letter="$" +char id=37 x=0 y=0 width=17 height=16 xoffset=0 yoffset=6 xadvance=17 page=0 chnl=0 letter="%" +char id=38 x=16 y=100 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="&" +char id=39 x=133 y=0 width=7 height=9 xoffset=0 yoffset=6 xadvance=7 page=0 chnl=0 letter="'" +char id=40 x=113 y=115 width=9 height=19 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter="(" +char id=41 x=124 y=61 width=9 height=19 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter=")" +char id=42 x=60 y=132 width=10 height=10 xoffset=0 yoffset=6 xadvance=10 page=0 chnl=0 letter="*" +char id=43 x=74 y=68 width=12 height=12 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="+" +char id=44 x=114 y=20 width=8 height=9 xoffset=0 yoffset=15 xadvance=8 page=0 chnl=0 letter="," +char id=45 x=27 y=136 width=11 height=7 xoffset=0 yoffset=12 xadvance=11 page=0 chnl=0 letter="-" +char id=46 x=124 y=81 width=7 height=8 xoffset=0 yoffset=14 xadvance=7 page=0 chnl=0 letter="." +char id=47 x=113 y=61 width=10 height=16 xoffset=0 yoffset=6 xadvance=10 page=0 chnl=0 letter="/" +char id=48 x=74 y=81 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="0" +char id=49 x=123 y=115 width=9 height=16 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter="1" +char id=50 x=75 y=34 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="2" +char id=51 x=76 y=17 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="3" +char id=52 x=60 y=67 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="4" +char id=53 x=88 y=34 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="5" +char id=54 x=62 y=17 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="6" +char id=55 x=60 y=84 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="7" +char id=56 x=100 y=111 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="8" +char id=57 x=60 y=115 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="9" +char id=58 x=134 y=44 width=7 height=13 xoffset=0 yoffset=9 xadvance=7 page=0 chnl=0 letter=":" +char id=59 x=125 y=40 width=8 height=15 xoffset=0 yoffset=9 xadvance=8 page=0 chnl=0 letter=";" +char id=60 x=100 y=128 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="<" +char id=61 x=46 y=130 width=13 height=10 xoffset=0 yoffset=10 xadvance=13 page=0 chnl=0 letter="=" +char id=62 x=60 y=101 width=13 height=13 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=0 letter=">" +char id=63 x=102 y=13 width=11 height=16 xoffset=0 yoffset=6 xadvance=11 page=0 chnl=0 letter="?" +char id=64 x=0 y=85 width=15 height=16 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=0 letter="@" +char id=65 x=16 y=117 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="A" +char id=66 x=18 y=0 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="B" +char id=67 x=31 y=85 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="C" +char id=68 x=18 y=17 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="D" +char id=69 x=89 y=17 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="E" +char id=70 x=89 y=0 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="F" +char id=71 x=16 y=51 width=15 height=16 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=0 letter="G" +char id=72 x=32 y=34 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="H" +char id=73 x=134 y=27 width=7 height=16 xoffset=0 yoffset=6 xadvance=7 page=0 chnl=0 letter="I" +char id=74 x=87 y=113 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="J" +char id=75 x=32 y=51 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="K" +char id=76 x=48 y=17 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="L" +char id=77 x=0 y=34 width=16 height=16 xoffset=0 yoffset=6 xadvance=16 page=0 chnl=0 letter="M" +char id=78 x=17 y=34 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="N" +char id=79 x=0 y=68 width=15 height=16 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=0 letter="O" +char id=80 x=76 y=0 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="P" +char id=81 x=0 y=51 width=15 height=16 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=0 letter="Q" +char id=82 x=74 y=51 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="R" +char id=83 x=62 y=0 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="S" +char id=84 x=31 y=68 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="T" +char id=85 x=31 y=102 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="U" +char id=86 x=33 y=0 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="V" +char id=87 x=0 y=17 width=17 height=16 xoffset=0 yoffset=6 xadvance=17 page=0 chnl=0 letter="W" +char id=88 x=33 y=17 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="X" +char id=89 x=31 y=119 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="Y" +char id=90 x=61 y=34 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="Z" +char id=91 x=113 y=95 width=9 height=19 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter="[" +char id=92 x=113 y=30 width=11 height=16 xoffset=0 yoffset=6 xadvance=11 page=0 chnl=0 letter="\" +char id=93 x=133 y=81 width=8 height=19 xoffset=0 yoffset=6 xadvance=8 page=0 chnl=0 letter="]" +char id=94 x=102 y=0 width=11 height=12 xoffset=0 yoffset=6 xadvance=11 page=0 chnl=0 letter="^" +char id=95 x=0 y=136 width=13 height=7 xoffset=0 yoffset=17 xadvance=13 page=0 chnl=0 letter="_" +char id=96 x=71 y=134 width=8 height=8 xoffset=0 yoffset=6 xadvance=8 page=0 chnl=0 letter="`" +char id=97 x=100 y=97 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="a" +char id=98 x=48 y=0 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="b" +char id=99 x=101 y=34 width=11 height=13 xoffset=0 yoffset=9 xadvance=11 page=0 chnl=0 letter="c" +char id=100 x=47 y=34 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="d" +char id=101 x=46 y=116 width=13 height=13 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=0 letter="e" +char id=102 x=101 y=48 width=11 height=16 xoffset=0 yoffset=6 xadvance=11 page=0 chnl=0 letter="f" +char id=103 x=46 y=83 width=13 height=16 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=0 letter="g" +char id=104 x=74 y=117 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="h" +char id=105 x=134 y=10 width=7 height=16 xoffset=0 yoffset=6 xadvance=7 page=0 chnl=0 letter="i" +char id=106 x=123 y=95 width=9 height=19 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter="j" +char id=107 x=87 y=96 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="k" +char id=108 x=133 y=118 width=7 height=16 xoffset=0 yoffset=6 xadvance=7 page=0 chnl=0 letter="l" +char id=109 x=0 y=116 width=15 height=14 xoffset=0 yoffset=8 xadvance=15 page=0 chnl=0 letter="m" +char id=110 x=46 y=68 width=13 height=14 xoffset=0 yoffset=8 xadvance=13 page=0 chnl=0 letter="n" +char id=111 x=100 y=83 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="o" +char id=112 x=46 y=100 width=13 height=15 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=0 letter="p" +char id=113 x=47 y=51 width=13 height=15 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=0 letter="q" +char id=114 x=88 y=51 width=12 height=14 xoffset=0 yoffset=8 xadvance=12 page=0 chnl=0 letter="r" +char id=115 x=113 y=47 width=11 height=13 xoffset=0 yoffset=9 xadvance=11 page=0 chnl=0 letter="s" +char id=116 x=113 y=78 width=10 height=16 xoffset=0 yoffset=6 xadvance=10 page=0 chnl=0 letter="t" +char id=117 x=61 y=51 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="u" +char id=118 x=87 y=68 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="v" +char id=119 x=0 y=102 width=15 height=13 xoffset=0 yoffset=9 xadvance=15 page=0 chnl=0 letter="w" +char id=120 x=87 y=82 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="x" +char id=121 x=100 y=66 width=12 height=16 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="y" +char id=122 x=87 y=130 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="z" +char id=123 x=125 y=20 width=8 height=19 xoffset=0 yoffset=6 xadvance=8 page=0 chnl=0 letter="{" +char id=124 x=124 y=0 width=8 height=19 xoffset=0 yoffset=6 xadvance=8 page=0 chnl=0 letter="|" +char id=125 x=114 y=0 width=9 height=19 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter="}" +char id=126 x=14 y=134 width=12 height=8 xoffset=0 yoffset=10 xadvance=12 page=0 chnl=0 letter="~" +char id=8226 x=113 y=135 width=8 height=8 xoffset=0 yoffset=10 xadvance=8 page=0 chnl=0 letter="•" +char id=169 x=16 y=85 width=14 height=14 xoffset=0 yoffset=7 xadvance=14 page=0 chnl=0 letter="©" +char id=32 x=0 y=0 width=0 height=0 xoffset=0 yoffset=0 xadvance=8 page=0 chnl=0 letter=" " +char id=9 x=0 y=0 width=0 height=0 xoffset=0 yoffset=0 xadvance=64 page=0 chnl=0 letter=" " + +kernings count=606 +kerning first=65 second=39 amount=-3 +kerning first=65 second=67 amount=-1 +kerning first=65 second=71 amount=-2 +kerning first=65 second=79 amount=-1 +kerning first=65 second=81 amount=-1 +kerning first=65 second=84 amount=-3 +kerning first=65 second=85 amount=-2 +kerning first=65 second=86 amount=-4 +kerning first=65 second=87 amount=-3 +kerning first=65 second=89 amount=-4 +kerning first=66 second=65 amount=-1 +kerning first=66 second=69 amount=-1 +kerning first=66 second=76 amount=-1 +kerning first=66 second=80 amount=-1 +kerning first=66 second=82 amount=-1 +kerning first=66 second=85 amount=-1 +kerning first=66 second=86 amount=-2 +kerning first=66 second=87 amount=-2 +kerning first=66 second=89 amount=-2 +kerning first=67 second=65 amount=-1 +kerning first=67 second=79 amount=-1 +kerning first=67 second=82 amount=-1 +kerning first=68 second=65 amount=-1 +kerning first=68 second=68 amount=-1 +kerning first=68 second=69 amount=-1 +kerning first=68 second=73 amount=-1 +kerning first=68 second=76 amount=-1 +kerning first=68 second=77 amount=-1 +kerning first=68 second=78 amount=-1 +kerning first=68 second=79 amount=-1 +kerning first=68 second=80 amount=-1 +kerning first=68 second=82 amount=-1 +kerning first=68 second=85 amount=-1 +kerning first=68 second=86 amount=-2 +kerning first=68 second=87 amount=-1 +kerning first=68 second=89 amount=-2 +kerning first=69 second=67 amount=-1 +kerning first=69 second=79 amount=-1 +kerning first=70 second=65 amount=-1 +kerning first=70 second=67 amount=-1 +kerning first=70 second=71 amount=-1 +kerning first=70 second=79 amount=-1 +kerning first=70 second=46 amount=-2 +kerning first=70 second=44 amount=-3 +kerning first=71 second=69 amount=-1 +kerning first=71 second=79 amount=-1 +kerning first=71 second=82 amount=-1 +kerning first=71 second=85 amount=-1 +kerning first=72 second=79 amount=-1 +kerning first=73 second=67 amount=-1 +kerning first=73 second=71 amount=-1 +kerning first=73 second=79 amount=-1 +kerning first=74 second=65 amount=-1 +kerning first=74 second=79 amount=-1 +kerning first=75 second=79 amount=-2 +kerning first=76 second=39 amount=-6 +kerning first=76 second=67 amount=-2 +kerning first=76 second=84 amount=-5 +kerning first=76 second=86 amount=-5 +kerning first=76 second=87 amount=-4 +kerning first=76 second=89 amount=-5 +kerning first=76 second=71 amount=-3 +kerning first=76 second=79 amount=-2 +kerning first=76 second=85 amount=-3 +kerning first=77 second=71 amount=-1 +kerning first=77 second=79 amount=-1 +kerning first=78 second=67 amount=-1 +kerning first=78 second=71 amount=-1 +kerning first=78 second=79 amount=-1 +kerning first=79 second=65 amount=-1 +kerning first=79 second=66 amount=-1 +kerning first=79 second=68 amount=-1 +kerning first=79 second=69 amount=-1 +kerning first=79 second=70 amount=-1 +kerning first=79 second=72 amount=-1 +kerning first=79 second=73 amount=-1 +kerning first=79 second=75 amount=-1 +kerning first=79 second=76 amount=-1 +kerning first=79 second=77 amount=-1 +kerning first=79 second=78 amount=-1 +kerning first=79 second=80 amount=-1 +kerning first=79 second=82 amount=-1 +kerning first=79 second=84 amount=-1 +kerning first=79 second=85 amount=-1 +kerning first=79 second=86 amount=-2 +kerning first=79 second=87 amount=-1 +kerning first=79 second=88 amount=-2 +kerning first=79 second=89 amount=-2 +kerning first=80 second=65 amount=-1 +kerning first=80 second=69 amount=-1 +kerning first=80 second=76 amount=-1 +kerning first=80 second=79 amount=-1 +kerning first=80 second=80 amount=-1 +kerning first=80 second=85 amount=-1 +kerning first=80 second=89 amount=-1 +kerning first=80 second=46 amount=-2 +kerning first=80 second=44 amount=-3 +kerning first=80 second=59 amount=-2 +kerning first=80 second=58 amount=-1 +kerning first=81 second=85 amount=-1 +kerning first=82 second=67 amount=-1 +kerning first=82 second=71 amount=-1 +kerning first=82 second=89 amount=-1 +kerning first=82 second=84 amount=-1 +kerning first=82 second=85 amount=-1 +kerning first=82 second=86 amount=-1 +kerning first=82 second=87 amount=-1 +kerning first=82 second=89 amount=-1 +kerning first=83 second=73 amount=-1 +kerning first=83 second=77 amount=-1 +kerning first=83 second=84 amount=-2 +kerning first=83 second=85 amount=-1 +kerning first=84 second=65 amount=-4 +kerning first=84 second=67 amount=-2 +kerning first=84 second=79 amount=-2 +kerning first=85 second=65 amount=-1 +kerning first=85 second=67 amount=-1 +kerning first=85 second=71 amount=-1 +kerning first=85 second=79 amount=-1 +kerning first=85 second=83 amount=-1 +kerning first=86 second=65 amount=-3 +kerning first=86 second=67 amount=-2 +kerning first=86 second=71 amount=-2 +kerning first=86 second=79 amount=-2 +kerning first=86 second=83 amount=-1 +kerning first=87 second=65 amount=-2 +kerning first=87 second=67 amount=-1 +kerning first=87 second=71 amount=-2 +kerning first=87 second=79 amount=-1 +kerning first=89 second=65 amount=-4 +kerning first=89 second=67 amount=-2 +kerning first=89 second=79 amount=-2 +kerning first=89 second=83 amount=-1 +kerning first=90 second=79 amount=-2 +kerning first=65 second=99 amount=-1 +kerning first=65 second=100 amount=-2 +kerning first=65 second=101 amount=-2 +kerning first=65 second=103 amount=-1 +kerning first=65 second=111 amount=-1 +kerning first=65 second=112 amount=-1 +kerning first=65 second=113 amount=-2 +kerning first=65 second=116 amount=-2 +kerning first=65 second=117 amount=-2 +kerning first=65 second=118 amount=-2 +kerning first=65 second=119 amount=-2 +kerning first=65 second=121 amount=-2 +kerning first=66 second=98 amount=-1 +kerning first=66 second=105 amount=-1 +kerning first=66 second=107 amount=-1 +kerning first=66 second=108 amount=-1 +kerning first=66 second=114 amount=-1 +kerning first=66 second=117 amount=-1 +kerning first=66 second=121 amount=-2 +kerning first=66 second=46 amount=-1 +kerning first=66 second=44 amount=-2 +kerning first=67 second=97 amount=-1 +kerning first=67 second=114 amount=-1 +kerning first=67 second=46 amount=-1 +kerning first=67 second=44 amount=-2 +kerning first=68 second=97 amount=-1 +kerning first=68 second=46 amount=-2 +kerning first=68 second=44 amount=-3 +kerning first=69 second=117 amount=-1 +kerning first=69 second=118 amount=-1 +kerning first=70 second=97 amount=-1 +kerning first=70 second=101 amount=-1 +kerning first=70 second=105 amount=-1 +kerning first=70 second=111 amount=-1 +kerning first=70 second=114 amount=-1 +kerning first=70 second=116 amount=-1 +kerning first=70 second=117 amount=-1 +kerning first=70 second=121 amount=-1 +kerning first=70 second=46 amount=-2 +kerning first=70 second=44 amount=-3 +kerning first=70 second=59 amount=-2 +kerning first=70 second=58 amount=-1 +kerning first=71 second=117 amount=-1 +kerning first=72 second=101 amount=-1 +kerning first=72 second=111 amount=-1 +kerning first=72 second=117 amount=-1 +kerning first=72 second=121 amount=-1 +kerning first=73 second=99 amount=-1 +kerning first=73 second=100 amount=-1 +kerning first=73 second=113 amount=-1 +kerning first=73 second=111 amount=-1 +kerning first=73 second=116 amount=-1 +kerning first=74 second=97 amount=-1 +kerning first=74 second=101 amount=-1 +kerning first=74 second=111 amount=-1 +kerning first=74 second=117 amount=-1 +kerning first=74 second=46 amount=-2 +kerning first=74 second=44 amount=-2 +kerning first=75 second=101 amount=-3 +kerning first=75 second=111 amount=-2 +kerning first=75 second=117 amount=-2 +kerning first=76 second=117 amount=-3 +kerning first=76 second=121 amount=-2 +kerning first=77 second=97 amount=-1 +kerning first=77 second=99 amount=-1 +kerning first=77 second=100 amount=-1 +kerning first=77 second=101 amount=-1 +kerning first=77 second=111 amount=-1 +kerning first=78 second=117 amount=-1 +kerning first=78 second=97 amount=-1 +kerning first=78 second=101 amount=-1 +kerning first=78 second=105 amount=-1 +kerning first=78 second=111 amount=-1 +kerning first=78 second=117 amount=-1 +kerning first=78 second=46 amount=-1 +kerning first=78 second=44 amount=-2 +kerning first=79 second=97 amount=-1 +kerning first=79 second=98 amount=-1 +kerning first=79 second=104 amount=-1 +kerning first=79 second=107 amount=-1 +kerning first=79 second=108 amount=-1 +kerning first=79 second=46 amount=-1 +kerning first=79 second=44 amount=-2 +kerning first=80 second=97 amount=-1 +kerning first=80 second=101 amount=-1 +kerning first=80 second=111 amount=-1 +kerning first=82 second=100 amount=-2 +kerning first=82 second=101 amount=-2 +kerning first=82 second=111 amount=-1 +kerning first=82 second=116 amount=-1 +kerning first=82 second=117 amount=-1 +kerning first=83 second=105 amount=-1 +kerning first=83 second=112 amount=-1 +kerning first=83 second=117 amount=-1 +kerning first=83 second=46 amount=-2 +kerning first=83 second=44 amount=-2 +kerning first=84 second=97 amount=-2 +kerning first=84 second=99 amount=-2 +kerning first=84 second=101 amount=-3 +kerning first=84 second=105 amount=-1 +kerning first=84 second=111 amount=-2 +kerning first=84 second=114 amount=-3 +kerning first=84 second=115 amount=-2 +kerning first=84 second=117 amount=-3 +kerning first=84 second=119 amount=-2 +kerning first=84 second=121 amount=-2 +kerning first=84 second=46 amount=-5 +kerning first=84 second=44 amount=-5 +kerning first=84 second=59 amount=-3 +kerning first=84 second=58 amount=-2 +kerning first=85 second=97 amount=-1 +kerning first=85 second=103 amount=-1 +kerning first=85 second=109 amount=-1 +kerning first=85 second=110 amount=-1 +kerning first=85 second=112 amount=-1 +kerning first=85 second=115 amount=-1 +kerning first=85 second=46 amount=-1 +kerning first=85 second=44 amount=-2 +kerning first=86 second=97 amount=-2 +kerning first=86 second=101 amount=-3 +kerning first=86 second=105 amount=-1 +kerning first=86 second=111 amount=-2 +kerning first=86 second=114 amount=-2 +kerning first=86 second=117 amount=-2 +kerning first=86 second=46 amount=-4 +kerning first=86 second=44 amount=-4 +kerning first=86 second=59 amount=-3 +kerning first=86 second=58 amount=-2 +kerning first=87 second=100 amount=-2 +kerning first=87 second=105 amount=-1 +kerning first=87 second=109 amount=-1 +kerning first=87 second=114 amount=-2 +kerning first=87 second=116 amount=-1 +kerning first=87 second=117 amount=-2 +kerning first=87 second=121 amount=-1 +kerning first=87 second=46 amount=-3 +kerning first=87 second=44 amount=-3 +kerning first=87 second=59 amount=-2 +kerning first=87 second=58 amount=-1 +kerning first=88 second=97 amount=-1 +kerning first=88 second=101 amount=-2 +kerning first=88 second=111 amount=-1 +kerning first=88 second=117 amount=-2 +kerning first=88 second=121 amount=-1 +kerning first=89 second=100 amount=-3 +kerning first=89 second=101 amount=-3 +kerning first=89 second=105 amount=-1 +kerning first=89 second=112 amount=-3 +kerning first=89 second=117 amount=-3 +kerning first=89 second=118 amount=-2 +kerning first=89 second=46 amount=-4 +kerning first=89 second=44 amount=-5 +kerning first=89 second=59 amount=-3 +kerning first=89 second=58 amount=-2 +kerning first=97 second=99 amount=-1 +kerning first=97 second=100 amount=-1 +kerning first=97 second=101 amount=-1 +kerning first=97 second=103 amount=-1 +kerning first=97 second=112 amount=-1 +kerning first=97 second=102 amount=-1 +kerning first=97 second=116 amount=-1 +kerning first=97 second=117 amount=-1 +kerning first=97 second=118 amount=-1 +kerning first=97 second=119 amount=-1 +kerning first=97 second=121 amount=-1 +kerning first=97 second=112 amount=-1 +kerning first=98 second=108 amount=-1 +kerning first=98 second=114 amount=-1 +kerning first=98 second=117 amount=-1 +kerning first=98 second=121 amount=-2 +kerning first=98 second=46 amount=-2 +kerning first=98 second=44 amount=-2 +kerning first=99 second=97 amount=-1 +kerning first=99 second=104 amount=-1 +kerning first=99 second=107 amount=-1 +kerning first=100 second=97 amount=-1 +kerning first=100 second=99 amount=-1 +kerning first=100 second=101 amount=-1 +kerning first=100 second=103 amount=-1 +kerning first=100 second=111 amount=-1 +kerning first=100 second=116 amount=-1 +kerning first=100 second=117 amount=-1 +kerning first=100 second=118 amount=-1 +kerning first=100 second=119 amount=-1 +kerning first=100 second=121 amount=-1 +kerning first=100 second=46 amount=-1 +kerning first=100 second=44 amount=-1 +kerning first=101 second=97 amount=-1 +kerning first=101 second=105 amount=-1 +kerning first=101 second=108 amount=-1 +kerning first=101 second=109 amount=-1 +kerning first=101 second=110 amount=-1 +kerning first=101 second=112 amount=-1 +kerning first=101 second=114 amount=-1 +kerning first=101 second=116 amount=-1 +kerning first=101 second=117 amount=-1 +kerning first=101 second=118 amount=-1 +kerning first=101 second=119 amount=-1 +kerning first=101 second=121 amount=-1 +kerning first=101 second=46 amount=-2 +kerning first=101 second=44 amount=-2 +kerning first=102 second=97 amount=-2 +kerning first=102 second=101 amount=-3 +kerning first=102 second=102 amount=-2 +kerning first=102 second=105 amount=-1 +kerning first=102 second=108 amount=-1 +kerning first=102 second=111 amount=-2 +kerning first=102 second=46 amount=-4 +kerning first=102 second=44 amount=-4 +kerning first=103 second=97 amount=-1 +kerning first=103 second=101 amount=-1 +kerning first=103 second=104 amount=-1 +kerning first=103 second=108 amount=-1 +kerning first=103 second=111 amount=-1 +kerning first=103 second=103 amount=-1 +kerning first=103 second=46 amount=-1 +kerning first=103 second=44 amount=-2 +kerning first=104 second=99 amount=-1 +kerning first=104 second=100 amount=-1 +kerning first=104 second=101 amount=-1 +kerning first=104 second=103 amount=-1 +kerning first=104 second=111 amount=-1 +kerning first=104 second=112 amount=-1 +kerning first=104 second=116 amount=-2 +kerning first=104 second=117 amount=-1 +kerning first=104 second=118 amount=-2 +kerning first=104 second=119 amount=-2 +kerning first=104 second=121 amount=-2 +kerning first=105 second=99 amount=-1 +kerning first=105 second=100 amount=-1 +kerning first=105 second=101 amount=-1 +kerning first=105 second=103 amount=-1 +kerning first=105 second=111 amount=-1 +kerning first=105 second=112 amount=-1 +kerning first=105 second=116 amount=-1 +kerning first=105 second=117 amount=-1 +kerning first=105 second=118 amount=-1 +kerning first=106 second=97 amount=-1 +kerning first=106 second=101 amount=-1 +kerning first=106 second=111 amount=-1 +kerning first=106 second=117 amount=-1 +kerning first=106 second=46 amount=-1 +kerning first=106 second=44 amount=-1 +kerning first=107 second=97 amount=-1 +kerning first=107 second=99 amount=-1 +kerning first=107 second=100 amount=-2 +kerning first=107 second=101 amount=-2 +kerning first=107 second=103 amount=-1 +kerning first=107 second=111 amount=-1 +kerning first=108 second=97 amount=-1 +kerning first=108 second=99 amount=-1 +kerning first=108 second=100 amount=-1 +kerning first=108 second=101 amount=-1 +kerning first=108 second=102 amount=-1 +kerning first=108 second=103 amount=-1 +kerning first=108 second=111 amount=-1 +kerning first=108 second=112 amount=-1 +kerning first=108 second=113 amount=-1 +kerning first=108 second=117 amount=-1 +kerning first=108 second=118 amount=-1 +kerning first=108 second=119 amount=-1 +kerning first=108 second=121 amount=-1 +kerning first=109 second=97 amount=-1 +kerning first=109 second=99 amount=-1 +kerning first=109 second=100 amount=-1 +kerning first=109 second=101 amount=-1 +kerning first=109 second=103 amount=-1 +kerning first=109 second=110 amount=-1 +kerning first=109 second=111 amount=-1 +kerning first=109 second=112 amount=-1 +kerning first=109 second=116 amount=-1 +kerning first=109 second=117 amount=-1 +kerning first=109 second=118 amount=-1 +kerning first=109 second=121 amount=-1 +kerning first=110 second=99 amount=-1 +kerning first=110 second=100 amount=-1 +kerning first=110 second=101 amount=-1 +kerning first=110 second=103 amount=-1 +kerning first=110 second=111 amount=-1 +kerning first=110 second=112 amount=-1 +kerning first=110 second=116 amount=-2 +kerning first=110 second=117 amount=-1 +kerning first=110 second=118 amount=-2 +kerning first=110 second=119 amount=-2 +kerning first=110 second=121 amount=-2 +kerning first=111 second=98 amount=-1 +kerning first=111 second=102 amount=-1 +kerning first=111 second=104 amount=-1 +kerning first=111 second=106 amount=-2 +kerning first=111 second=107 amount=-1 +kerning first=111 second=108 amount=-1 +kerning first=111 second=109 amount=-1 +kerning first=111 second=110 amount=-1 +kerning first=111 second=112 amount=-1 +kerning first=111 second=114 amount=-1 +kerning first=111 second=117 amount=-1 +kerning first=111 second=118 amount=-1 +kerning first=111 second=119 amount=-1 +kerning first=111 second=120 amount=-1 +kerning first=111 second=121 amount=-1 +kerning first=111 second=46 amount=-1 +kerning first=111 second=44 amount=-2 +kerning first=112 second=97 amount=-1 +kerning first=112 second=104 amount=-1 +kerning first=112 second=105 amount=-1 +kerning first=112 second=108 amount=-1 +kerning first=112 second=112 amount=-1 +kerning first=112 second=117 amount=-1 +kerning first=112 second=46 amount=-1 +kerning first=112 second=44 amount=-2 +kerning first=113 second=117 amount=-1 +kerning first=116 second=46 amount=-1 +kerning first=114 second=97 amount=-1 +kerning first=114 second=100 amount=-2 +kerning first=114 second=101 amount=-2 +kerning first=114 second=103 amount=-1 +kerning first=114 second=107 amount=-1 +kerning first=114 second=108 amount=-1 +kerning first=114 second=109 amount=-1 +kerning first=114 second=110 amount=-1 +kerning first=114 second=111 amount=-1 +kerning first=114 second=113 amount=-2 +kerning first=114 second=114 amount=-1 +kerning first=114 second=116 amount=-1 +kerning first=114 second=118 amount=-1 +kerning first=114 second=121 amount=-1 +kerning first=114 second=46 amount=-3 +kerning first=114 second=44 amount=-4 +kerning first=115 second=104 amount=-1 +kerning first=115 second=116 amount=-1 +kerning first=115 second=117 amount=-1 +kerning first=115 second=46 amount=-1 +kerning first=115 second=44 amount=-2 +kerning first=116 second=100 amount=-2 +kerning first=116 second=97 amount=-1 +kerning first=116 second=101 amount=-2 +kerning first=116 second=111 amount=-1 +kerning first=116 second=46 amount=-1 +kerning first=116 second=44 amount=-1 +kerning first=117 second=97 amount=-1 +kerning first=117 second=99 amount=-1 +kerning first=117 second=100 amount=-1 +kerning first=117 second=101 amount=-1 +kerning first=117 second=103 amount=-1 +kerning first=117 second=111 amount=-1 +kerning first=117 second=112 amount=-1 +kerning first=117 second=113 amount=-1 +kerning first=117 second=116 amount=-1 +kerning first=117 second=118 amount=-1 +kerning first=117 second=119 amount=-1 +kerning first=117 second=121 amount=-1 +kerning first=118 second=97 amount=-1 +kerning first=118 second=98 amount=-1 +kerning first=118 second=99 amount=-1 +kerning first=118 second=100 amount=-2 +kerning first=118 second=101 amount=-2 +kerning first=118 second=103 amount=-1 +kerning first=118 second=111 amount=-1 +kerning first=118 second=118 amount=-1 +kerning first=118 second=121 amount=-1 +kerning first=118 second=46 amount=-2 +kerning first=118 second=44 amount=-3 +kerning first=119 second=97 amount=-1 +kerning first=119 second=120 amount=-1 +kerning first=119 second=100 amount=-2 +kerning first=119 second=101 amount=-2 +kerning first=119 second=103 amount=-1 +kerning first=119 second=104 amount=-1 +kerning first=119 second=111 amount=-1 +kerning first=119 second=46 amount=-2 +kerning first=119 second=44 amount=-3 +kerning first=120 second=97 amount=-1 +kerning first=120 second=101 amount=-2 +kerning first=120 second=111 amount=-1 +kerning first=121 second=46 amount=-2 +kerning first=121 second=44 amount=-3 +kerning first=121 second=97 amount=-1 +kerning first=121 second=99 amount=-1 +kerning first=121 second=100 amount=-2 +kerning first=121 second=101 amount=-2 +kerning first=121 second=111 amount=-1 +kerning first=117 second=109 amount=-1 +kerning first=84 second=104 amount=-1 +kerning first=118 second=101 amount=-2 +kerning first=119 second=110 amount=-1 +kerning first=112 second=115 amount=-1 +kerning first=76 second=97 amount=-2 +kerning first=117 second=105 amount=-1 +kerning first=98 second=101 amount=-1 +kerning first=99 second=111 amount=-1 +kerning first=102 second=103 amount=-2 +kerning first=118 second=119 amount=-1 +kerning first=120 second=121 amount=-1 +kerning first=121 second=122 amount=-1 +kerning first=119 second=119 amount=-1 +kerning first=99 second=101 amount=-1 +kerning first=101 second=115 amount=-1 +kerning first=101 second=102 amount=-1 +kerning first=98 second=97 amount=-1 +kerning first=116 second=104 amount=-1 +kerning first=116 second=105 amount=-1 +kerning first=101 second=101 amount=-1 +kerning first=104 second=97 amount=-1 +kerning first=111 second=101 amount=-1 +kerning first=119 second=105 amount=-1 +kerning first=88 second=89 amount=-1 +kerning first=89 second=90 amount=-1 +kerning first=82 second=83 amount=-1 +kerning first=75 second=76 amount=-2 +kerning first=101 second=100 amount=-1 +kerning first=116 second=111 amount=-1 +kerning first=87 second=104 amount=-1 +kerning first=107 second=110 amount=-2 +kerning first=119 second=115 amount=-1 +kerning first=116 second=114 amount=-1 +kerning first=102 second=114 amount=-2 +kerning first=65 second=110 amount=-1 +kerning first=116 second=116 amount=-1 +kerning first=66 second=67 amount=-1 +kerning first=67 second=68 amount=-1 +kerning first=65 second=66 amount=-1 +kerning first=89 second=111 amount=-2 +kerning first=102 second=117 amount=-2 +kerning first=67 second=111 amount=-1 +kerning first=116 second=115 amount=-1 +kerning first=111 second=111 amount=-1 +kerning first=68 second=111 amount=-1 +kerning first=101 second=97 amount=-1 +kerning first=76 second=111 amount=-2 +kerning first=115 second=105 amount=-1 +kerning first=111 second=116 amount=-1 +kerning first=111 second=103 amount=-1 +kerning first=82 second=97 amount=-1 +kerning first=101 second=99 amount=-1 +kerning first=66 second=111 amount=-1 +kerning first=111 second=99 amount=-1 +kerning first=115 second=111 amount=-1 +kerning first=83 second=119 amount=-2 +kerning first=66 second=101 amount=-1 +kerning first=99 second=116 amount=-1 +kerning first=98 second=106 amount=-3 +kerning first=115 second=101 amount=-1 +kerning first=121 second=119 amount=-1 +kerning first=111 second=97 amount=-1 +kerning first=68 second=88 amount=-2 +kerning first=101 second=98 amount=-1 +kerning first=115 second=119 amount=-1 +kerning first=97 second=120 amount=-1 +kerning first=73 second=110 amount=-1 +kerning first=73 second=74 amount=-1 +kerning first=116 second=112 amount=-1 +kerning first=104 second=105 amount=-1 +kerning first=105 second=115 amount=-1 +kerning first=98 second=99 amount=-1 +kerning first=115 second=112 amount=-1 +kerning first=100 second=105 amount=-1 +kerning first=105 second=106 amount=-1 +kerning first=108 second=109 amount=-1 +kerning first=107 second=108 amount=-1 +kerning first=108 second=105 amount=-1 +kerning first=112 second=113 amount=-1 +kerning first=108 second=108 amount=-1 +kerning first=49 second=50 amount=-1 +kerning first=106 second=107 amount=-1 +kerning first=117 second=110 amount=-1 +kerning first=113 second=114 amount=-1 +kerning first=116 second=117 amount=-1 +kerning first=114 second=115 amount=-1 +kerning first=117 second=114 amount=-1 +kerning first=73 second=112 amount=-1 +kerning first=79 second=112 amount=-1 +kerning first=101 second=103 amount=-1 diff --git a/assets/skins/neon/raw/font-over-export.png b/assets/skins/neon/raw/font-over-export.png new file mode 100644 index 0000000..2a1a270 Binary files /dev/null and b/assets/skins/neon/raw/font-over-export.png differ diff --git a/assets/skins/neon/raw/font-over.png b/assets/skins/neon/raw/font-over.png new file mode 100644 index 0000000..3a8e743 Binary files /dev/null and b/assets/skins/neon/raw/font-over.png differ diff --git a/assets/skins/neon/raw/font-pressed-export.fnt b/assets/skins/neon/raw/font-pressed-export.fnt new file mode 100644 index 0000000..eb5509d --- /dev/null +++ b/assets/skins/neon/raw/font-pressed-export.fnt @@ -0,0 +1,710 @@ +info face="font-pressed-export" size=32 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=1,1 +common lineHeight=22 base=22 scaleW=142 scaleH=144 pages=1 packed=0 alphaChnl=1 redChnl=0 greenChnl=0 blueChnl=0 +page id=0 file="font-pressed-export.png" +chars count=98 +char id=33 x=133 y=101 width=7 height=16 xoffset=0 yoffset=6 xadvance=7 page=0 chnl=0 letter="!" +char id=34 x=123 y=132 width=9 height=10 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter=""" +char id=35 x=16 y=68 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="#" +char id=36 x=74 y=98 width=12 height=18 xoffset=0 yoffset=5 xadvance=12 page=0 chnl=0 letter="$" +char id=37 x=0 y=0 width=17 height=16 xoffset=0 yoffset=6 xadvance=17 page=0 chnl=0 letter="%" +char id=38 x=16 y=100 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="&" +char id=39 x=133 y=0 width=7 height=9 xoffset=0 yoffset=6 xadvance=7 page=0 chnl=0 letter="'" +char id=40 x=113 y=115 width=9 height=19 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter="(" +char id=41 x=124 y=61 width=9 height=19 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter=")" +char id=42 x=60 y=132 width=10 height=10 xoffset=0 yoffset=6 xadvance=10 page=0 chnl=0 letter="*" +char id=43 x=74 y=68 width=12 height=12 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="+" +char id=44 x=114 y=20 width=8 height=9 xoffset=0 yoffset=15 xadvance=8 page=0 chnl=0 letter="," +char id=45 x=27 y=136 width=11 height=7 xoffset=0 yoffset=12 xadvance=11 page=0 chnl=0 letter="-" +char id=46 x=124 y=81 width=7 height=8 xoffset=0 yoffset=14 xadvance=7 page=0 chnl=0 letter="." +char id=47 x=113 y=61 width=10 height=16 xoffset=0 yoffset=6 xadvance=10 page=0 chnl=0 letter="/" +char id=48 x=74 y=81 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="0" +char id=49 x=123 y=115 width=9 height=16 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter="1" +char id=50 x=75 y=34 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="2" +char id=51 x=76 y=17 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="3" +char id=52 x=60 y=67 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="4" +char id=53 x=88 y=34 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="5" +char id=54 x=62 y=17 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="6" +char id=55 x=60 y=84 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="7" +char id=56 x=100 y=111 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="8" +char id=57 x=60 y=115 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="9" +char id=58 x=134 y=44 width=7 height=13 xoffset=0 yoffset=9 xadvance=7 page=0 chnl=0 letter=":" +char id=59 x=125 y=40 width=8 height=15 xoffset=0 yoffset=9 xadvance=8 page=0 chnl=0 letter=";" +char id=60 x=100 y=128 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="<" +char id=61 x=46 y=130 width=13 height=10 xoffset=0 yoffset=10 xadvance=13 page=0 chnl=0 letter="=" +char id=62 x=60 y=101 width=13 height=13 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=0 letter=">" +char id=63 x=102 y=13 width=11 height=16 xoffset=0 yoffset=6 xadvance=11 page=0 chnl=0 letter="?" +char id=64 x=0 y=85 width=15 height=16 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=0 letter="@" +char id=65 x=16 y=117 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="A" +char id=66 x=18 y=0 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="B" +char id=67 x=31 y=85 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="C" +char id=68 x=18 y=17 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="D" +char id=69 x=89 y=17 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="E" +char id=70 x=89 y=0 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="F" +char id=71 x=16 y=51 width=15 height=16 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=0 letter="G" +char id=72 x=32 y=34 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="H" +char id=73 x=134 y=27 width=7 height=16 xoffset=0 yoffset=6 xadvance=7 page=0 chnl=0 letter="I" +char id=74 x=87 y=113 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="J" +char id=75 x=32 y=51 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="K" +char id=76 x=48 y=17 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="L" +char id=77 x=0 y=34 width=16 height=16 xoffset=0 yoffset=6 xadvance=16 page=0 chnl=0 letter="M" +char id=78 x=17 y=34 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="N" +char id=79 x=0 y=68 width=15 height=16 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=0 letter="O" +char id=80 x=76 y=0 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="P" +char id=81 x=0 y=51 width=15 height=16 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=0 letter="Q" +char id=82 x=74 y=51 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="R" +char id=83 x=62 y=0 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="S" +char id=84 x=31 y=68 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="T" +char id=85 x=31 y=102 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="U" +char id=86 x=33 y=0 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="V" +char id=87 x=0 y=17 width=17 height=16 xoffset=0 yoffset=6 xadvance=17 page=0 chnl=0 letter="W" +char id=88 x=33 y=17 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="X" +char id=89 x=31 y=119 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="Y" +char id=90 x=61 y=34 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="Z" +char id=91 x=113 y=95 width=9 height=19 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter="[" +char id=92 x=113 y=30 width=11 height=16 xoffset=0 yoffset=6 xadvance=11 page=0 chnl=0 letter="\" +char id=93 x=133 y=81 width=8 height=19 xoffset=0 yoffset=6 xadvance=8 page=0 chnl=0 letter="]" +char id=94 x=102 y=0 width=11 height=12 xoffset=0 yoffset=6 xadvance=11 page=0 chnl=0 letter="^" +char id=95 x=0 y=136 width=13 height=7 xoffset=0 yoffset=17 xadvance=13 page=0 chnl=0 letter="_" +char id=96 x=71 y=134 width=8 height=8 xoffset=0 yoffset=6 xadvance=8 page=0 chnl=0 letter="`" +char id=97 x=100 y=97 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="a" +char id=98 x=48 y=0 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="b" +char id=99 x=101 y=34 width=11 height=13 xoffset=0 yoffset=9 xadvance=11 page=0 chnl=0 letter="c" +char id=100 x=47 y=34 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="d" +char id=101 x=46 y=116 width=13 height=13 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=0 letter="e" +char id=102 x=101 y=48 width=11 height=16 xoffset=0 yoffset=6 xadvance=11 page=0 chnl=0 letter="f" +char id=103 x=46 y=83 width=13 height=16 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=0 letter="g" +char id=104 x=74 y=117 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="h" +char id=105 x=134 y=10 width=7 height=16 xoffset=0 yoffset=6 xadvance=7 page=0 chnl=0 letter="i" +char id=106 x=123 y=95 width=9 height=19 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter="j" +char id=107 x=87 y=96 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="k" +char id=108 x=133 y=118 width=7 height=16 xoffset=0 yoffset=6 xadvance=7 page=0 chnl=0 letter="l" +char id=109 x=0 y=116 width=15 height=14 xoffset=0 yoffset=8 xadvance=15 page=0 chnl=0 letter="m" +char id=110 x=46 y=68 width=13 height=14 xoffset=0 yoffset=8 xadvance=13 page=0 chnl=0 letter="n" +char id=111 x=100 y=83 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="o" +char id=112 x=46 y=100 width=13 height=15 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=0 letter="p" +char id=113 x=47 y=51 width=13 height=15 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=0 letter="q" +char id=114 x=88 y=51 width=12 height=14 xoffset=0 yoffset=8 xadvance=12 page=0 chnl=0 letter="r" +char id=115 x=113 y=47 width=11 height=13 xoffset=0 yoffset=9 xadvance=11 page=0 chnl=0 letter="s" +char id=116 x=113 y=78 width=10 height=16 xoffset=0 yoffset=6 xadvance=10 page=0 chnl=0 letter="t" +char id=117 x=61 y=51 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="u" +char id=118 x=87 y=68 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="v" +char id=119 x=0 y=102 width=15 height=13 xoffset=0 yoffset=9 xadvance=15 page=0 chnl=0 letter="w" +char id=120 x=87 y=82 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="x" +char id=121 x=100 y=66 width=12 height=16 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="y" +char id=122 x=87 y=130 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="z" +char id=123 x=125 y=20 width=8 height=19 xoffset=0 yoffset=6 xadvance=8 page=0 chnl=0 letter="{" +char id=124 x=124 y=0 width=8 height=19 xoffset=0 yoffset=6 xadvance=8 page=0 chnl=0 letter="|" +char id=125 x=114 y=0 width=9 height=19 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter="}" +char id=126 x=14 y=134 width=12 height=8 xoffset=0 yoffset=10 xadvance=12 page=0 chnl=0 letter="~" +char id=8226 x=113 y=135 width=8 height=8 xoffset=0 yoffset=10 xadvance=8 page=0 chnl=0 letter="•" +char id=169 x=16 y=85 width=14 height=14 xoffset=0 yoffset=7 xadvance=14 page=0 chnl=0 letter="©" +char id=32 x=0 y=0 width=0 height=0 xoffset=0 yoffset=0 xadvance=8 page=0 chnl=0 letter=" " +char id=9 x=0 y=0 width=0 height=0 xoffset=0 yoffset=0 xadvance=64 page=0 chnl=0 letter=" " + +kernings count=606 +kerning first=65 second=39 amount=-3 +kerning first=65 second=67 amount=-1 +kerning first=65 second=71 amount=-2 +kerning first=65 second=79 amount=-1 +kerning first=65 second=81 amount=-1 +kerning first=65 second=84 amount=-3 +kerning first=65 second=85 amount=-2 +kerning first=65 second=86 amount=-4 +kerning first=65 second=87 amount=-3 +kerning first=65 second=89 amount=-4 +kerning first=66 second=65 amount=-1 +kerning first=66 second=69 amount=-1 +kerning first=66 second=76 amount=-1 +kerning first=66 second=80 amount=-1 +kerning first=66 second=82 amount=-1 +kerning first=66 second=85 amount=-1 +kerning first=66 second=86 amount=-2 +kerning first=66 second=87 amount=-2 +kerning first=66 second=89 amount=-2 +kerning first=67 second=65 amount=-1 +kerning first=67 second=79 amount=-1 +kerning first=67 second=82 amount=-1 +kerning first=68 second=65 amount=-1 +kerning first=68 second=68 amount=-1 +kerning first=68 second=69 amount=-1 +kerning first=68 second=73 amount=-1 +kerning first=68 second=76 amount=-1 +kerning first=68 second=77 amount=-1 +kerning first=68 second=78 amount=-1 +kerning first=68 second=79 amount=-1 +kerning first=68 second=80 amount=-1 +kerning first=68 second=82 amount=-1 +kerning first=68 second=85 amount=-1 +kerning first=68 second=86 amount=-2 +kerning first=68 second=87 amount=-1 +kerning first=68 second=89 amount=-2 +kerning first=69 second=67 amount=-1 +kerning first=69 second=79 amount=-1 +kerning first=70 second=65 amount=-1 +kerning first=70 second=67 amount=-1 +kerning first=70 second=71 amount=-1 +kerning first=70 second=79 amount=-1 +kerning first=70 second=46 amount=-2 +kerning first=70 second=44 amount=-3 +kerning first=71 second=69 amount=-1 +kerning first=71 second=79 amount=-1 +kerning first=71 second=82 amount=-1 +kerning first=71 second=85 amount=-1 +kerning first=72 second=79 amount=-1 +kerning first=73 second=67 amount=-1 +kerning first=73 second=71 amount=-1 +kerning first=73 second=79 amount=-1 +kerning first=74 second=65 amount=-1 +kerning first=74 second=79 amount=-1 +kerning first=75 second=79 amount=-2 +kerning first=76 second=39 amount=-6 +kerning first=76 second=67 amount=-2 +kerning first=76 second=84 amount=-5 +kerning first=76 second=86 amount=-5 +kerning first=76 second=87 amount=-4 +kerning first=76 second=89 amount=-5 +kerning first=76 second=71 amount=-3 +kerning first=76 second=79 amount=-2 +kerning first=76 second=85 amount=-3 +kerning first=77 second=71 amount=-1 +kerning first=77 second=79 amount=-1 +kerning first=78 second=67 amount=-1 +kerning first=78 second=71 amount=-1 +kerning first=78 second=79 amount=-1 +kerning first=79 second=65 amount=-1 +kerning first=79 second=66 amount=-1 +kerning first=79 second=68 amount=-1 +kerning first=79 second=69 amount=-1 +kerning first=79 second=70 amount=-1 +kerning first=79 second=72 amount=-1 +kerning first=79 second=73 amount=-1 +kerning first=79 second=75 amount=-1 +kerning first=79 second=76 amount=-1 +kerning first=79 second=77 amount=-1 +kerning first=79 second=78 amount=-1 +kerning first=79 second=80 amount=-1 +kerning first=79 second=82 amount=-1 +kerning first=79 second=84 amount=-1 +kerning first=79 second=85 amount=-1 +kerning first=79 second=86 amount=-2 +kerning first=79 second=87 amount=-1 +kerning first=79 second=88 amount=-2 +kerning first=79 second=89 amount=-2 +kerning first=80 second=65 amount=-1 +kerning first=80 second=69 amount=-1 +kerning first=80 second=76 amount=-1 +kerning first=80 second=79 amount=-1 +kerning first=80 second=80 amount=-1 +kerning first=80 second=85 amount=-1 +kerning first=80 second=89 amount=-1 +kerning first=80 second=46 amount=-2 +kerning first=80 second=44 amount=-3 +kerning first=80 second=59 amount=-2 +kerning first=80 second=58 amount=-1 +kerning first=81 second=85 amount=-1 +kerning first=82 second=67 amount=-1 +kerning first=82 second=71 amount=-1 +kerning first=82 second=89 amount=-1 +kerning first=82 second=84 amount=-1 +kerning first=82 second=85 amount=-1 +kerning first=82 second=86 amount=-1 +kerning first=82 second=87 amount=-1 +kerning first=82 second=89 amount=-1 +kerning first=83 second=73 amount=-1 +kerning first=83 second=77 amount=-1 +kerning first=83 second=84 amount=-2 +kerning first=83 second=85 amount=-1 +kerning first=84 second=65 amount=-4 +kerning first=84 second=67 amount=-2 +kerning first=84 second=79 amount=-2 +kerning first=85 second=65 amount=-1 +kerning first=85 second=67 amount=-1 +kerning first=85 second=71 amount=-1 +kerning first=85 second=79 amount=-1 +kerning first=85 second=83 amount=-1 +kerning first=86 second=65 amount=-3 +kerning first=86 second=67 amount=-2 +kerning first=86 second=71 amount=-2 +kerning first=86 second=79 amount=-2 +kerning first=86 second=83 amount=-1 +kerning first=87 second=65 amount=-2 +kerning first=87 second=67 amount=-1 +kerning first=87 second=71 amount=-2 +kerning first=87 second=79 amount=-1 +kerning first=89 second=65 amount=-4 +kerning first=89 second=67 amount=-2 +kerning first=89 second=79 amount=-2 +kerning first=89 second=83 amount=-1 +kerning first=90 second=79 amount=-2 +kerning first=65 second=99 amount=-1 +kerning first=65 second=100 amount=-2 +kerning first=65 second=101 amount=-2 +kerning first=65 second=103 amount=-1 +kerning first=65 second=111 amount=-1 +kerning first=65 second=112 amount=-1 +kerning first=65 second=113 amount=-2 +kerning first=65 second=116 amount=-2 +kerning first=65 second=117 amount=-2 +kerning first=65 second=118 amount=-2 +kerning first=65 second=119 amount=-2 +kerning first=65 second=121 amount=-2 +kerning first=66 second=98 amount=-1 +kerning first=66 second=105 amount=-1 +kerning first=66 second=107 amount=-1 +kerning first=66 second=108 amount=-1 +kerning first=66 second=114 amount=-1 +kerning first=66 second=117 amount=-1 +kerning first=66 second=121 amount=-2 +kerning first=66 second=46 amount=-1 +kerning first=66 second=44 amount=-2 +kerning first=67 second=97 amount=-1 +kerning first=67 second=114 amount=-1 +kerning first=67 second=46 amount=-1 +kerning first=67 second=44 amount=-2 +kerning first=68 second=97 amount=-1 +kerning first=68 second=46 amount=-2 +kerning first=68 second=44 amount=-3 +kerning first=69 second=117 amount=-1 +kerning first=69 second=118 amount=-1 +kerning first=70 second=97 amount=-1 +kerning first=70 second=101 amount=-1 +kerning first=70 second=105 amount=-1 +kerning first=70 second=111 amount=-1 +kerning first=70 second=114 amount=-1 +kerning first=70 second=116 amount=-1 +kerning first=70 second=117 amount=-1 +kerning first=70 second=121 amount=-1 +kerning first=70 second=46 amount=-2 +kerning first=70 second=44 amount=-3 +kerning first=70 second=59 amount=-2 +kerning first=70 second=58 amount=-1 +kerning first=71 second=117 amount=-1 +kerning first=72 second=101 amount=-1 +kerning first=72 second=111 amount=-1 +kerning first=72 second=117 amount=-1 +kerning first=72 second=121 amount=-1 +kerning first=73 second=99 amount=-1 +kerning first=73 second=100 amount=-1 +kerning first=73 second=113 amount=-1 +kerning first=73 second=111 amount=-1 +kerning first=73 second=116 amount=-1 +kerning first=74 second=97 amount=-1 +kerning first=74 second=101 amount=-1 +kerning first=74 second=111 amount=-1 +kerning first=74 second=117 amount=-1 +kerning first=74 second=46 amount=-2 +kerning first=74 second=44 amount=-2 +kerning first=75 second=101 amount=-3 +kerning first=75 second=111 amount=-2 +kerning first=75 second=117 amount=-2 +kerning first=76 second=117 amount=-3 +kerning first=76 second=121 amount=-2 +kerning first=77 second=97 amount=-1 +kerning first=77 second=99 amount=-1 +kerning first=77 second=100 amount=-1 +kerning first=77 second=101 amount=-1 +kerning first=77 second=111 amount=-1 +kerning first=78 second=117 amount=-1 +kerning first=78 second=97 amount=-1 +kerning first=78 second=101 amount=-1 +kerning first=78 second=105 amount=-1 +kerning first=78 second=111 amount=-1 +kerning first=78 second=117 amount=-1 +kerning first=78 second=46 amount=-1 +kerning first=78 second=44 amount=-2 +kerning first=79 second=97 amount=-1 +kerning first=79 second=98 amount=-1 +kerning first=79 second=104 amount=-1 +kerning first=79 second=107 amount=-1 +kerning first=79 second=108 amount=-1 +kerning first=79 second=46 amount=-1 +kerning first=79 second=44 amount=-2 +kerning first=80 second=97 amount=-1 +kerning first=80 second=101 amount=-1 +kerning first=80 second=111 amount=-1 +kerning first=82 second=100 amount=-2 +kerning first=82 second=101 amount=-2 +kerning first=82 second=111 amount=-1 +kerning first=82 second=116 amount=-1 +kerning first=82 second=117 amount=-1 +kerning first=83 second=105 amount=-1 +kerning first=83 second=112 amount=-1 +kerning first=83 second=117 amount=-1 +kerning first=83 second=46 amount=-2 +kerning first=83 second=44 amount=-2 +kerning first=84 second=97 amount=-2 +kerning first=84 second=99 amount=-2 +kerning first=84 second=101 amount=-3 +kerning first=84 second=105 amount=-1 +kerning first=84 second=111 amount=-2 +kerning first=84 second=114 amount=-3 +kerning first=84 second=115 amount=-2 +kerning first=84 second=117 amount=-3 +kerning first=84 second=119 amount=-2 +kerning first=84 second=121 amount=-2 +kerning first=84 second=46 amount=-5 +kerning first=84 second=44 amount=-5 +kerning first=84 second=59 amount=-3 +kerning first=84 second=58 amount=-2 +kerning first=85 second=97 amount=-1 +kerning first=85 second=103 amount=-1 +kerning first=85 second=109 amount=-1 +kerning first=85 second=110 amount=-1 +kerning first=85 second=112 amount=-1 +kerning first=85 second=115 amount=-1 +kerning first=85 second=46 amount=-1 +kerning first=85 second=44 amount=-2 +kerning first=86 second=97 amount=-2 +kerning first=86 second=101 amount=-3 +kerning first=86 second=105 amount=-1 +kerning first=86 second=111 amount=-2 +kerning first=86 second=114 amount=-2 +kerning first=86 second=117 amount=-2 +kerning first=86 second=46 amount=-4 +kerning first=86 second=44 amount=-4 +kerning first=86 second=59 amount=-3 +kerning first=86 second=58 amount=-2 +kerning first=87 second=100 amount=-2 +kerning first=87 second=105 amount=-1 +kerning first=87 second=109 amount=-1 +kerning first=87 second=114 amount=-2 +kerning first=87 second=116 amount=-1 +kerning first=87 second=117 amount=-2 +kerning first=87 second=121 amount=-1 +kerning first=87 second=46 amount=-3 +kerning first=87 second=44 amount=-3 +kerning first=87 second=59 amount=-2 +kerning first=87 second=58 amount=-1 +kerning first=88 second=97 amount=-1 +kerning first=88 second=101 amount=-2 +kerning first=88 second=111 amount=-1 +kerning first=88 second=117 amount=-2 +kerning first=88 second=121 amount=-1 +kerning first=89 second=100 amount=-3 +kerning first=89 second=101 amount=-3 +kerning first=89 second=105 amount=-1 +kerning first=89 second=112 amount=-3 +kerning first=89 second=117 amount=-3 +kerning first=89 second=118 amount=-2 +kerning first=89 second=46 amount=-4 +kerning first=89 second=44 amount=-5 +kerning first=89 second=59 amount=-3 +kerning first=89 second=58 amount=-2 +kerning first=97 second=99 amount=-1 +kerning first=97 second=100 amount=-1 +kerning first=97 second=101 amount=-1 +kerning first=97 second=103 amount=-1 +kerning first=97 second=112 amount=-1 +kerning first=97 second=102 amount=-1 +kerning first=97 second=116 amount=-1 +kerning first=97 second=117 amount=-1 +kerning first=97 second=118 amount=-1 +kerning first=97 second=119 amount=-1 +kerning first=97 second=121 amount=-1 +kerning first=97 second=112 amount=-1 +kerning first=98 second=108 amount=-1 +kerning first=98 second=114 amount=-1 +kerning first=98 second=117 amount=-1 +kerning first=98 second=121 amount=-2 +kerning first=98 second=46 amount=-2 +kerning first=98 second=44 amount=-2 +kerning first=99 second=97 amount=-1 +kerning first=99 second=104 amount=-1 +kerning first=99 second=107 amount=-1 +kerning first=100 second=97 amount=-1 +kerning first=100 second=99 amount=-1 +kerning first=100 second=101 amount=-1 +kerning first=100 second=103 amount=-1 +kerning first=100 second=111 amount=-1 +kerning first=100 second=116 amount=-1 +kerning first=100 second=117 amount=-1 +kerning first=100 second=118 amount=-1 +kerning first=100 second=119 amount=-1 +kerning first=100 second=121 amount=-1 +kerning first=100 second=46 amount=-1 +kerning first=100 second=44 amount=-1 +kerning first=101 second=97 amount=-1 +kerning first=101 second=105 amount=-1 +kerning first=101 second=108 amount=-1 +kerning first=101 second=109 amount=-1 +kerning first=101 second=110 amount=-1 +kerning first=101 second=112 amount=-1 +kerning first=101 second=114 amount=-1 +kerning first=101 second=116 amount=-1 +kerning first=101 second=117 amount=-1 +kerning first=101 second=118 amount=-1 +kerning first=101 second=119 amount=-1 +kerning first=101 second=121 amount=-1 +kerning first=101 second=46 amount=-2 +kerning first=101 second=44 amount=-2 +kerning first=102 second=97 amount=-2 +kerning first=102 second=101 amount=-3 +kerning first=102 second=102 amount=-2 +kerning first=102 second=105 amount=-1 +kerning first=102 second=108 amount=-1 +kerning first=102 second=111 amount=-2 +kerning first=102 second=46 amount=-4 +kerning first=102 second=44 amount=-4 +kerning first=103 second=97 amount=-1 +kerning first=103 second=101 amount=-1 +kerning first=103 second=104 amount=-1 +kerning first=103 second=108 amount=-1 +kerning first=103 second=111 amount=-1 +kerning first=103 second=103 amount=-1 +kerning first=103 second=46 amount=-1 +kerning first=103 second=44 amount=-2 +kerning first=104 second=99 amount=-1 +kerning first=104 second=100 amount=-1 +kerning first=104 second=101 amount=-1 +kerning first=104 second=103 amount=-1 +kerning first=104 second=111 amount=-1 +kerning first=104 second=112 amount=-1 +kerning first=104 second=116 amount=-2 +kerning first=104 second=117 amount=-1 +kerning first=104 second=118 amount=-2 +kerning first=104 second=119 amount=-2 +kerning first=104 second=121 amount=-2 +kerning first=105 second=99 amount=-1 +kerning first=105 second=100 amount=-1 +kerning first=105 second=101 amount=-1 +kerning first=105 second=103 amount=-1 +kerning first=105 second=111 amount=-1 +kerning first=105 second=112 amount=-1 +kerning first=105 second=116 amount=-1 +kerning first=105 second=117 amount=-1 +kerning first=105 second=118 amount=-1 +kerning first=106 second=97 amount=-1 +kerning first=106 second=101 amount=-1 +kerning first=106 second=111 amount=-1 +kerning first=106 second=117 amount=-1 +kerning first=106 second=46 amount=-1 +kerning first=106 second=44 amount=-1 +kerning first=107 second=97 amount=-1 +kerning first=107 second=99 amount=-1 +kerning first=107 second=100 amount=-2 +kerning first=107 second=101 amount=-2 +kerning first=107 second=103 amount=-1 +kerning first=107 second=111 amount=-1 +kerning first=108 second=97 amount=-1 +kerning first=108 second=99 amount=-1 +kerning first=108 second=100 amount=-1 +kerning first=108 second=101 amount=-1 +kerning first=108 second=102 amount=-1 +kerning first=108 second=103 amount=-1 +kerning first=108 second=111 amount=-1 +kerning first=108 second=112 amount=-1 +kerning first=108 second=113 amount=-1 +kerning first=108 second=117 amount=-1 +kerning first=108 second=118 amount=-1 +kerning first=108 second=119 amount=-1 +kerning first=108 second=121 amount=-1 +kerning first=109 second=97 amount=-1 +kerning first=109 second=99 amount=-1 +kerning first=109 second=100 amount=-1 +kerning first=109 second=101 amount=-1 +kerning first=109 second=103 amount=-1 +kerning first=109 second=110 amount=-1 +kerning first=109 second=111 amount=-1 +kerning first=109 second=112 amount=-1 +kerning first=109 second=116 amount=-1 +kerning first=109 second=117 amount=-1 +kerning first=109 second=118 amount=-1 +kerning first=109 second=121 amount=-1 +kerning first=110 second=99 amount=-1 +kerning first=110 second=100 amount=-1 +kerning first=110 second=101 amount=-1 +kerning first=110 second=103 amount=-1 +kerning first=110 second=111 amount=-1 +kerning first=110 second=112 amount=-1 +kerning first=110 second=116 amount=-2 +kerning first=110 second=117 amount=-1 +kerning first=110 second=118 amount=-2 +kerning first=110 second=119 amount=-2 +kerning first=110 second=121 amount=-2 +kerning first=111 second=98 amount=-1 +kerning first=111 second=102 amount=-1 +kerning first=111 second=104 amount=-1 +kerning first=111 second=106 amount=-2 +kerning first=111 second=107 amount=-1 +kerning first=111 second=108 amount=-1 +kerning first=111 second=109 amount=-1 +kerning first=111 second=110 amount=-1 +kerning first=111 second=112 amount=-1 +kerning first=111 second=114 amount=-1 +kerning first=111 second=117 amount=-1 +kerning first=111 second=118 amount=-1 +kerning first=111 second=119 amount=-1 +kerning first=111 second=120 amount=-1 +kerning first=111 second=121 amount=-1 +kerning first=111 second=46 amount=-1 +kerning first=111 second=44 amount=-2 +kerning first=112 second=97 amount=-1 +kerning first=112 second=104 amount=-1 +kerning first=112 second=105 amount=-1 +kerning first=112 second=108 amount=-1 +kerning first=112 second=112 amount=-1 +kerning first=112 second=117 amount=-1 +kerning first=112 second=46 amount=-1 +kerning first=112 second=44 amount=-2 +kerning first=113 second=117 amount=-1 +kerning first=116 second=46 amount=-1 +kerning first=114 second=97 amount=-1 +kerning first=114 second=100 amount=-2 +kerning first=114 second=101 amount=-2 +kerning first=114 second=103 amount=-1 +kerning first=114 second=107 amount=-1 +kerning first=114 second=108 amount=-1 +kerning first=114 second=109 amount=-1 +kerning first=114 second=110 amount=-1 +kerning first=114 second=111 amount=-1 +kerning first=114 second=113 amount=-2 +kerning first=114 second=114 amount=-1 +kerning first=114 second=116 amount=-1 +kerning first=114 second=118 amount=-1 +kerning first=114 second=121 amount=-1 +kerning first=114 second=46 amount=-3 +kerning first=114 second=44 amount=-4 +kerning first=115 second=104 amount=-1 +kerning first=115 second=116 amount=-1 +kerning first=115 second=117 amount=-1 +kerning first=115 second=46 amount=-1 +kerning first=115 second=44 amount=-2 +kerning first=116 second=100 amount=-2 +kerning first=116 second=97 amount=-1 +kerning first=116 second=101 amount=-2 +kerning first=116 second=111 amount=-1 +kerning first=116 second=46 amount=-1 +kerning first=116 second=44 amount=-1 +kerning first=117 second=97 amount=-1 +kerning first=117 second=99 amount=-1 +kerning first=117 second=100 amount=-1 +kerning first=117 second=101 amount=-1 +kerning first=117 second=103 amount=-1 +kerning first=117 second=111 amount=-1 +kerning first=117 second=112 amount=-1 +kerning first=117 second=113 amount=-1 +kerning first=117 second=116 amount=-1 +kerning first=117 second=118 amount=-1 +kerning first=117 second=119 amount=-1 +kerning first=117 second=121 amount=-1 +kerning first=118 second=97 amount=-1 +kerning first=118 second=98 amount=-1 +kerning first=118 second=99 amount=-1 +kerning first=118 second=100 amount=-2 +kerning first=118 second=101 amount=-2 +kerning first=118 second=103 amount=-1 +kerning first=118 second=111 amount=-1 +kerning first=118 second=118 amount=-1 +kerning first=118 second=121 amount=-1 +kerning first=118 second=46 amount=-2 +kerning first=118 second=44 amount=-3 +kerning first=119 second=97 amount=-1 +kerning first=119 second=120 amount=-1 +kerning first=119 second=100 amount=-2 +kerning first=119 second=101 amount=-2 +kerning first=119 second=103 amount=-1 +kerning first=119 second=104 amount=-1 +kerning first=119 second=111 amount=-1 +kerning first=119 second=46 amount=-2 +kerning first=119 second=44 amount=-3 +kerning first=120 second=97 amount=-1 +kerning first=120 second=101 amount=-2 +kerning first=120 second=111 amount=-1 +kerning first=121 second=46 amount=-2 +kerning first=121 second=44 amount=-3 +kerning first=121 second=97 amount=-1 +kerning first=121 second=99 amount=-1 +kerning first=121 second=100 amount=-2 +kerning first=121 second=101 amount=-2 +kerning first=121 second=111 amount=-1 +kerning first=117 second=109 amount=-1 +kerning first=84 second=104 amount=-1 +kerning first=118 second=101 amount=-2 +kerning first=119 second=110 amount=-1 +kerning first=112 second=115 amount=-1 +kerning first=76 second=97 amount=-2 +kerning first=117 second=105 amount=-1 +kerning first=98 second=101 amount=-1 +kerning first=99 second=111 amount=-1 +kerning first=102 second=103 amount=-2 +kerning first=118 second=119 amount=-1 +kerning first=120 second=121 amount=-1 +kerning first=121 second=122 amount=-1 +kerning first=119 second=119 amount=-1 +kerning first=99 second=101 amount=-1 +kerning first=101 second=115 amount=-1 +kerning first=101 second=102 amount=-1 +kerning first=98 second=97 amount=-1 +kerning first=116 second=104 amount=-1 +kerning first=116 second=105 amount=-1 +kerning first=101 second=101 amount=-1 +kerning first=104 second=97 amount=-1 +kerning first=111 second=101 amount=-1 +kerning first=119 second=105 amount=-1 +kerning first=88 second=89 amount=-1 +kerning first=89 second=90 amount=-1 +kerning first=82 second=83 amount=-1 +kerning first=75 second=76 amount=-2 +kerning first=101 second=100 amount=-1 +kerning first=116 second=111 amount=-1 +kerning first=87 second=104 amount=-1 +kerning first=107 second=110 amount=-2 +kerning first=119 second=115 amount=-1 +kerning first=116 second=114 amount=-1 +kerning first=102 second=114 amount=-2 +kerning first=65 second=110 amount=-1 +kerning first=116 second=116 amount=-1 +kerning first=66 second=67 amount=-1 +kerning first=67 second=68 amount=-1 +kerning first=65 second=66 amount=-1 +kerning first=89 second=111 amount=-2 +kerning first=102 second=117 amount=-2 +kerning first=67 second=111 amount=-1 +kerning first=116 second=115 amount=-1 +kerning first=111 second=111 amount=-1 +kerning first=68 second=111 amount=-1 +kerning first=101 second=97 amount=-1 +kerning first=76 second=111 amount=-2 +kerning first=115 second=105 amount=-1 +kerning first=111 second=116 amount=-1 +kerning first=111 second=103 amount=-1 +kerning first=82 second=97 amount=-1 +kerning first=101 second=99 amount=-1 +kerning first=66 second=111 amount=-1 +kerning first=111 second=99 amount=-1 +kerning first=115 second=111 amount=-1 +kerning first=83 second=119 amount=-2 +kerning first=66 second=101 amount=-1 +kerning first=99 second=116 amount=-1 +kerning first=98 second=106 amount=-3 +kerning first=115 second=101 amount=-1 +kerning first=121 second=119 amount=-1 +kerning first=111 second=97 amount=-1 +kerning first=68 second=88 amount=-2 +kerning first=101 second=98 amount=-1 +kerning first=115 second=119 amount=-1 +kerning first=97 second=120 amount=-1 +kerning first=73 second=110 amount=-1 +kerning first=73 second=74 amount=-1 +kerning first=116 second=112 amount=-1 +kerning first=104 second=105 amount=-1 +kerning first=105 second=115 amount=-1 +kerning first=98 second=99 amount=-1 +kerning first=115 second=112 amount=-1 +kerning first=100 second=105 amount=-1 +kerning first=105 second=106 amount=-1 +kerning first=108 second=109 amount=-1 +kerning first=107 second=108 amount=-1 +kerning first=108 second=105 amount=-1 +kerning first=112 second=113 amount=-1 +kerning first=108 second=108 amount=-1 +kerning first=49 second=50 amount=-1 +kerning first=106 second=107 amount=-1 +kerning first=117 second=110 amount=-1 +kerning first=113 second=114 amount=-1 +kerning first=116 second=117 amount=-1 +kerning first=114 second=115 amount=-1 +kerning first=117 second=114 amount=-1 +kerning first=73 second=112 amount=-1 +kerning first=79 second=112 amount=-1 +kerning first=101 second=103 amount=-1 diff --git a/assets/skins/neon/raw/font-pressed-export.png b/assets/skins/neon/raw/font-pressed-export.png new file mode 100644 index 0000000..b82400e Binary files /dev/null and b/assets/skins/neon/raw/font-pressed-export.png differ diff --git a/assets/skins/neon/raw/font-pressed.png b/assets/skins/neon/raw/font-pressed.png new file mode 100644 index 0000000..ed9d067 Binary files /dev/null and b/assets/skins/neon/raw/font-pressed.png differ diff --git a/assets/skins/neon/raw/font.png b/assets/skins/neon/raw/font.png new file mode 100644 index 0000000..a9940bb Binary files /dev/null and b/assets/skins/neon/raw/font.png differ diff --git a/assets/skins/neon/raw/list.9.png b/assets/skins/neon/raw/list.9.png new file mode 100644 index 0000000..8744e0f Binary files /dev/null and b/assets/skins/neon/raw/list.9.png differ diff --git a/assets/skins/neon/raw/list.png b/assets/skins/neon/raw/list.png new file mode 100644 index 0000000..22422fd Binary files /dev/null and b/assets/skins/neon/raw/list.png differ diff --git a/assets/skins/neon/raw/minus.png b/assets/skins/neon/raw/minus.png new file mode 100644 index 0000000..95f43e7 Binary files /dev/null and b/assets/skins/neon/raw/minus.png differ diff --git a/assets/skins/neon/raw/plus.png b/assets/skins/neon/raw/plus.png new file mode 100644 index 0000000..a69bf80 Binary files /dev/null and b/assets/skins/neon/raw/plus.png differ diff --git a/assets/skins/neon/raw/progress-bar-big-knob.png b/assets/skins/neon/raw/progress-bar-big-knob.png new file mode 100644 index 0000000..ae6d1c2 Binary files /dev/null and b/assets/skins/neon/raw/progress-bar-big-knob.png differ diff --git a/assets/skins/neon/raw/progress-bar-big.9.png b/assets/skins/neon/raw/progress-bar-big.9.png new file mode 100644 index 0000000..6b856fc Binary files /dev/null and b/assets/skins/neon/raw/progress-bar-big.9.png differ diff --git a/assets/skins/neon/raw/progress-bar-big.png b/assets/skins/neon/raw/progress-bar-big.png new file mode 100644 index 0000000..9a74979 Binary files /dev/null and b/assets/skins/neon/raw/progress-bar-big.png differ diff --git a/assets/skins/neon/raw/progress-bar-knob.9.png b/assets/skins/neon/raw/progress-bar-knob.9.png new file mode 100644 index 0000000..91c28cb Binary files /dev/null and b/assets/skins/neon/raw/progress-bar-knob.9.png differ diff --git a/assets/skins/neon/raw/progress-bar-knob.png b/assets/skins/neon/raw/progress-bar-knob.png new file mode 100644 index 0000000..90f892e Binary files /dev/null and b/assets/skins/neon/raw/progress-bar-knob.png differ diff --git a/assets/skins/neon/raw/progress-bar-vertical-knob.9.png b/assets/skins/neon/raw/progress-bar-vertical-knob.9.png new file mode 100644 index 0000000..fb1d5a0 Binary files /dev/null and b/assets/skins/neon/raw/progress-bar-vertical-knob.9.png differ diff --git a/assets/skins/neon/raw/progress-bar-vertical-knob.png b/assets/skins/neon/raw/progress-bar-vertical-knob.png new file mode 100644 index 0000000..6355d52 Binary files /dev/null and b/assets/skins/neon/raw/progress-bar-vertical-knob.png differ diff --git a/assets/skins/neon/raw/progress-bar-vertical.9.png b/assets/skins/neon/raw/progress-bar-vertical.9.png new file mode 100644 index 0000000..bfd1d4b Binary files /dev/null and b/assets/skins/neon/raw/progress-bar-vertical.9.png differ diff --git a/assets/skins/neon/raw/progress-bar-vertical.png b/assets/skins/neon/raw/progress-bar-vertical.png new file mode 100644 index 0000000..6f1c78f Binary files /dev/null and b/assets/skins/neon/raw/progress-bar-vertical.png differ diff --git a/assets/skins/neon/raw/progress-bar.9.png b/assets/skins/neon/raw/progress-bar.9.png new file mode 100644 index 0000000..0d3d694 Binary files /dev/null and b/assets/skins/neon/raw/progress-bar.9.png differ diff --git a/assets/skins/neon/raw/progress-bar.png b/assets/skins/neon/raw/progress-bar.png new file mode 100644 index 0000000..61bdcd1 Binary files /dev/null and b/assets/skins/neon/raw/progress-bar.png differ diff --git a/assets/skins/neon/raw/radio-over.png b/assets/skins/neon/raw/radio-over.png new file mode 100644 index 0000000..023b723 Binary files /dev/null and b/assets/skins/neon/raw/radio-over.png differ diff --git a/assets/skins/neon/raw/radio-pressed.png b/assets/skins/neon/raw/radio-pressed.png new file mode 100644 index 0000000..7dedbb1 Binary files /dev/null and b/assets/skins/neon/raw/radio-pressed.png differ diff --git a/assets/skins/neon/raw/radio.png b/assets/skins/neon/raw/radio.png new file mode 100644 index 0000000..cfee512 Binary files /dev/null and b/assets/skins/neon/raw/radio.png differ diff --git a/assets/skins/neon/raw/scroll-horizontal.9.png b/assets/skins/neon/raw/scroll-horizontal.9.png new file mode 100644 index 0000000..f76bdc3 Binary files /dev/null and b/assets/skins/neon/raw/scroll-horizontal.9.png differ diff --git a/assets/skins/neon/raw/scroll-horizontal.png b/assets/skins/neon/raw/scroll-horizontal.png new file mode 100644 index 0000000..dd0394b Binary files /dev/null and b/assets/skins/neon/raw/scroll-horizontal.png differ diff --git a/assets/skins/neon/raw/scroll-vertical.9.png b/assets/skins/neon/raw/scroll-vertical.9.png new file mode 100644 index 0000000..c9e2e86 Binary files /dev/null and b/assets/skins/neon/raw/scroll-vertical.9.png differ diff --git a/assets/skins/neon/raw/scroll-vertical.png b/assets/skins/neon/raw/scroll-vertical.png new file mode 100644 index 0000000..dca80fc Binary files /dev/null and b/assets/skins/neon/raw/scroll-vertical.png differ diff --git a/assets/skins/neon/raw/select-box-over.9.png b/assets/skins/neon/raw/select-box-over.9.png new file mode 100644 index 0000000..bfe4d71 Binary files /dev/null and b/assets/skins/neon/raw/select-box-over.9.png differ diff --git a/assets/skins/neon/raw/select-box-over.png b/assets/skins/neon/raw/select-box-over.png new file mode 100644 index 0000000..4ed78c6 Binary files /dev/null and b/assets/skins/neon/raw/select-box-over.png differ diff --git a/assets/skins/neon/raw/select-box-pressed.9.png b/assets/skins/neon/raw/select-box-pressed.9.png new file mode 100644 index 0000000..53c5b51 Binary files /dev/null and b/assets/skins/neon/raw/select-box-pressed.9.png differ diff --git a/assets/skins/neon/raw/select-box-pressed.png b/assets/skins/neon/raw/select-box-pressed.png new file mode 100644 index 0000000..ddf371b Binary files /dev/null and b/assets/skins/neon/raw/select-box-pressed.png differ diff --git a/assets/skins/neon/raw/select-box.9.png b/assets/skins/neon/raw/select-box.9.png new file mode 100644 index 0000000..541148f Binary files /dev/null and b/assets/skins/neon/raw/select-box.9.png differ diff --git a/assets/skins/neon/raw/select-box.png b/assets/skins/neon/raw/select-box.png new file mode 100644 index 0000000..dbc4a42 Binary files /dev/null and b/assets/skins/neon/raw/select-box.png differ diff --git a/assets/skins/neon/raw/slider-before.9.png b/assets/skins/neon/raw/slider-before.9.png new file mode 100644 index 0000000..675a529 Binary files /dev/null and b/assets/skins/neon/raw/slider-before.9.png differ diff --git a/assets/skins/neon/raw/slider-before.png b/assets/skins/neon/raw/slider-before.png new file mode 100644 index 0000000..beb71fb Binary files /dev/null and b/assets/skins/neon/raw/slider-before.png differ diff --git a/assets/skins/neon/raw/slider-knob-pressed.png b/assets/skins/neon/raw/slider-knob-pressed.png new file mode 100644 index 0000000..2b73508 Binary files /dev/null and b/assets/skins/neon/raw/slider-knob-pressed.png differ diff --git a/assets/skins/neon/raw/slider-knob.png b/assets/skins/neon/raw/slider-knob.png new file mode 100644 index 0000000..bb6e4f1 Binary files /dev/null and b/assets/skins/neon/raw/slider-knob.png differ diff --git a/assets/skins/neon/raw/slider-vertical-before.9.png b/assets/skins/neon/raw/slider-vertical-before.9.png new file mode 100644 index 0000000..f613fa0 Binary files /dev/null and b/assets/skins/neon/raw/slider-vertical-before.9.png differ diff --git a/assets/skins/neon/raw/slider-vertical-before.png b/assets/skins/neon/raw/slider-vertical-before.png new file mode 100644 index 0000000..adeaace Binary files /dev/null and b/assets/skins/neon/raw/slider-vertical-before.png differ diff --git a/assets/skins/neon/raw/slider-vertical.9.png b/assets/skins/neon/raw/slider-vertical.9.png new file mode 100644 index 0000000..8e58702 Binary files /dev/null and b/assets/skins/neon/raw/slider-vertical.9.png differ diff --git a/assets/skins/neon/raw/slider-vertical.png b/assets/skins/neon/raw/slider-vertical.png new file mode 100644 index 0000000..7d52f62 Binary files /dev/null and b/assets/skins/neon/raw/slider-vertical.png differ diff --git a/assets/skins/neon/raw/slider.9.png b/assets/skins/neon/raw/slider.9.png new file mode 100644 index 0000000..b3b8750 Binary files /dev/null and b/assets/skins/neon/raw/slider.9.png differ diff --git a/assets/skins/neon/raw/slider.png b/assets/skins/neon/raw/slider.png new file mode 100644 index 0000000..7f85c34 Binary files /dev/null and b/assets/skins/neon/raw/slider.png differ diff --git a/assets/skins/neon/raw/split-pane-horizontal.png b/assets/skins/neon/raw/split-pane-horizontal.png new file mode 100644 index 0000000..4c3bba4 Binary files /dev/null and b/assets/skins/neon/raw/split-pane-horizontal.png differ diff --git a/assets/skins/neon/raw/split-pane-vertical.png b/assets/skins/neon/raw/split-pane-vertical.png new file mode 100644 index 0000000..9b0b683 Binary files /dev/null and b/assets/skins/neon/raw/split-pane-vertical.png differ diff --git a/assets/skins/neon/raw/textfield-login-selected.9.png b/assets/skins/neon/raw/textfield-login-selected.9.png new file mode 100644 index 0000000..b6499b0 Binary files /dev/null and b/assets/skins/neon/raw/textfield-login-selected.9.png differ diff --git a/assets/skins/neon/raw/textfield-login-selected.png b/assets/skins/neon/raw/textfield-login-selected.png new file mode 100644 index 0000000..daa9605 Binary files /dev/null and b/assets/skins/neon/raw/textfield-login-selected.png differ diff --git a/assets/skins/neon/raw/textfield-login.9.png b/assets/skins/neon/raw/textfield-login.9.png new file mode 100644 index 0000000..3d1d2ae Binary files /dev/null and b/assets/skins/neon/raw/textfield-login.9.png differ diff --git a/assets/skins/neon/raw/textfield-login.png b/assets/skins/neon/raw/textfield-login.png new file mode 100644 index 0000000..8d18f99 Binary files /dev/null and b/assets/skins/neon/raw/textfield-login.png differ diff --git a/assets/skins/neon/raw/textfield-password-selected.9.png b/assets/skins/neon/raw/textfield-password-selected.9.png new file mode 100644 index 0000000..5a4b599 Binary files /dev/null and b/assets/skins/neon/raw/textfield-password-selected.9.png differ diff --git a/assets/skins/neon/raw/textfield-password-selected.png b/assets/skins/neon/raw/textfield-password-selected.png new file mode 100644 index 0000000..b1524f3 Binary files /dev/null and b/assets/skins/neon/raw/textfield-password-selected.png differ diff --git a/assets/skins/neon/raw/textfield-password.9.png b/assets/skins/neon/raw/textfield-password.9.png new file mode 100644 index 0000000..050f821 Binary files /dev/null and b/assets/skins/neon/raw/textfield-password.9.png differ diff --git a/assets/skins/neon/raw/textfield-password.png b/assets/skins/neon/raw/textfield-password.png new file mode 100644 index 0000000..c639b6d Binary files /dev/null and b/assets/skins/neon/raw/textfield-password.png differ diff --git a/assets/skins/neon/raw/textfield-selected.9.png b/assets/skins/neon/raw/textfield-selected.9.png new file mode 100644 index 0000000..aac48b3 Binary files /dev/null and b/assets/skins/neon/raw/textfield-selected.9.png differ diff --git a/assets/skins/neon/raw/textfield-selected.png b/assets/skins/neon/raw/textfield-selected.png new file mode 100644 index 0000000..3a193be Binary files /dev/null and b/assets/skins/neon/raw/textfield-selected.png differ diff --git a/assets/skins/neon/raw/textfield.9.png b/assets/skins/neon/raw/textfield.9.png new file mode 100644 index 0000000..7bd380c Binary files /dev/null and b/assets/skins/neon/raw/textfield.9.png differ diff --git a/assets/skins/neon/raw/textfield.png b/assets/skins/neon/raw/textfield.png new file mode 100644 index 0000000..97951cb Binary files /dev/null and b/assets/skins/neon/raw/textfield.png differ diff --git a/assets/skins/neon/raw/tooltip.9.png b/assets/skins/neon/raw/tooltip.9.png new file mode 100644 index 0000000..f1c5743 Binary files /dev/null and b/assets/skins/neon/raw/tooltip.9.png differ diff --git a/assets/skins/neon/raw/tooltip.png b/assets/skins/neon/raw/tooltip.png new file mode 100644 index 0000000..2ddcfe3 Binary files /dev/null and b/assets/skins/neon/raw/tooltip.png differ diff --git a/assets/skins/neon/raw/touchpad-knob.png b/assets/skins/neon/raw/touchpad-knob.png new file mode 100644 index 0000000..0ccb3ea Binary files /dev/null and b/assets/skins/neon/raw/touchpad-knob.png differ diff --git a/assets/skins/neon/raw/touchpad.9.png b/assets/skins/neon/raw/touchpad.9.png new file mode 100644 index 0000000..2c98acf Binary files /dev/null and b/assets/skins/neon/raw/touchpad.9.png differ diff --git a/assets/skins/neon/raw/touchpad.png b/assets/skins/neon/raw/touchpad.png new file mode 100644 index 0000000..fa3f98c Binary files /dev/null and b/assets/skins/neon/raw/touchpad.png differ diff --git a/assets/skins/neon/raw/white.png b/assets/skins/neon/raw/white.png new file mode 100644 index 0000000..b8c9304 Binary files /dev/null and b/assets/skins/neon/raw/white.png differ diff --git a/assets/skins/neon/raw/window.9.png b/assets/skins/neon/raw/window.9.png new file mode 100644 index 0000000..cd56ec0 Binary files /dev/null and b/assets/skins/neon/raw/window.9.png differ diff --git a/assets/skins/neon/raw/window.png b/assets/skins/neon/raw/window.png new file mode 100644 index 0000000..d7737dc Binary files /dev/null and b/assets/skins/neon/raw/window.png differ diff --git a/assets/skins/neon/skin/font-export.fnt b/assets/skins/neon/skin/font-export.fnt new file mode 100644 index 0000000..25809da --- /dev/null +++ b/assets/skins/neon/skin/font-export.fnt @@ -0,0 +1,710 @@ +info face="font-export" size=32 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=1,1 +common lineHeight=18 base=18 scaleW=116 scaleH=117 pages=1 packed=0 alphaChnl=1 redChnl=0 greenChnl=0 blueChnl=0 +page id=0 file="font-export.png" +chars count=98 +char id=33 x=106 y=17 width=4 height=13 xoffset=0 yoffset=5 xadvance=4 page=0 chnl=0 letter="!" +char id=34 x=98 y=109 width=6 height=7 xoffset=0 yoffset=5 xadvance=6 page=0 chnl=0 letter=""" +char id=35 x=27 y=14 width=11 height=13 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=0 letter="#" +char id=36 x=38 y=42 width=10 height=16 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=0 letter="$" +char id=37 x=0 y=14 width=14 height=14 xoffset=0 yoffset=4 xadvance=14 page=0 chnl=0 letter="%" +char id=38 x=26 y=85 width=11 height=13 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=0 letter="&" +char id=39 x=100 y=25 width=5 height=7 xoffset=0 yoffset=5 xadvance=5 page=0 chnl=0 letter="'" +char id=40 x=100 y=0 width=6 height=16 xoffset=0 yoffset=5 xadvance=6 page=0 chnl=0 letter="(" +char id=41 x=99 y=59 width=6 height=16 xoffset=0 yoffset=5 xadvance=6 page=0 chnl=0 letter=")" +char id=42 x=90 y=109 width=7 height=7 xoffset=0 yoffset=5 xadvance=7 page=0 chnl=0 letter="*" +char id=43 x=49 y=80 width=10 height=10 xoffset=0 yoffset=7 xadvance=10 page=0 chnl=0 letter="+" +char id=44 x=100 y=17 width=5 height=7 xoffset=0 yoffset=13 xadvance=5 page=0 chnl=0 letter="," +char id=45 x=61 y=28 width=7 height=4 xoffset=0 yoffset=10 xadvance=7 page=0 chnl=0 letter="-" +char id=46 x=100 y=33 width=4 height=4 xoffset=0 yoffset=14 xadvance=4 page=0 chnl=0 letter="." +char id=47 x=70 y=83 width=9 height=14 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0 letter="/" +char id=48 x=49 y=54 width=10 height=13 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=0 letter="0" +char id=49 x=91 y=0 width=6 height=13 xoffset=0 yoffset=5 xadvance=6 page=0 chnl=0 letter="1" +char id=50 x=90 y=28 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="2" +char id=51 x=61 y=0 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="3" +char id=52 x=49 y=40 width=10 height=13 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=0 letter="4" +char id=53 x=80 y=71 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="5" +char id=54 x=80 y=57 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="6" +char id=55 x=80 y=85 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="7" +char id=56 x=80 y=99 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="8" +char id=57 x=90 y=14 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="9" +char id=58 x=106 y=49 width=4 height=11 xoffset=0 yoffset=7 xadvance=4 page=0 chnl=0 letter=":" +char id=59 x=99 y=76 width=5 height=14 xoffset=0 yoffset=7 xadvance=5 page=0 chnl=0 letter=";" +char id=60 x=49 y=91 width=10 height=10 xoffset=0 yoffset=8 xadvance=10 page=0 chnl=0 letter="<" +char id=61 x=14 y=71 width=10 height=7 xoffset=0 yoffset=9 xadvance=10 page=0 chnl=0 letter="=" +char id=62 x=50 y=28 width=10 height=10 xoffset=0 yoffset=8 xadvance=10 page=0 chnl=0 letter=">" +char id=63 x=81 y=0 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="?" +char id=64 x=0 y=29 width=13 height=13 xoffset=0 yoffset=5 xadvance=13 page=0 chnl=0 letter="@" +char id=65 x=13 y=81 width=12 height=13 xoffset=0 yoffset=5 xadvance=12 page=0 chnl=0 letter="A" +char id=66 x=39 y=26 width=10 height=13 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=0 letter="B" +char id=67 x=15 y=14 width=11 height=13 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=0 letter="C" +char id=68 x=16 y=0 width=11 height=13 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=0 letter="D" +char id=69 x=80 y=29 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="E" +char id=70 x=80 y=15 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="F" +char id=71 x=26 y=43 width=11 height=13 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=0 letter="G" +char id=72 x=26 y=71 width=11 height=13 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=0 letter="H" +char id=73 x=106 y=61 width=4 height=13 xoffset=0 yoffset=5 xadvance=4 page=0 chnl=0 letter="I" +char id=74 x=70 y=69 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="J" +char id=75 x=26 y=57 width=11 height=13 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=0 letter="K" +char id=76 x=80 y=43 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="L" +char id=77 x=0 y=55 width=13 height=13 xoffset=0 yoffset=5 xadvance=13 page=0 chnl=0 letter="M" +char id=78 x=26 y=99 width=11 height=13 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=0 letter="N" +char id=79 x=13 y=95 width=12 height=13 xoffset=0 yoffset=5 xadvance=12 page=0 chnl=0 letter="O" +char id=80 x=49 y=102 width=10 height=13 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=0 letter="P" +char id=81 x=0 y=94 width=12 height=13 xoffset=0 yoffset=5 xadvance=12 page=0 chnl=0 letter="Q" +char id=82 x=50 y=14 width=10 height=13 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=0 letter="R" +char id=83 x=38 y=74 width=10 height=13 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=0 letter="S" +char id=84 x=14 y=57 width=11 height=13 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=0 letter="T" +char id=85 x=28 y=0 width=11 height=13 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=0 letter="U" +char id=86 x=14 y=43 width=11 height=13 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=0 letter="V" +char id=87 x=0 y=0 width=15 height=13 xoffset=0 yoffset=5 xadvance=15 page=0 chnl=0 letter="W" +char id=88 x=27 y=28 width=11 height=13 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=0 letter="X" +char id=89 x=14 y=29 width=12 height=13 xoffset=0 yoffset=5 xadvance=12 page=0 chnl=0 letter="Y" +char id=90 x=38 y=103 width=10 height=13 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=0 letter="Z" +char id=91 x=105 y=76 width=5 height=16 xoffset=0 yoffset=5 xadvance=5 page=0 chnl=0 letter="[" +char id=92 x=60 y=39 width=9 height=14 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0 letter="\" +char id=93 x=105 y=93 width=5 height=16 xoffset=0 yoffset=5 xadvance=5 page=0 chnl=0 letter="]" +char id=94 x=60 y=94 width=9 height=9 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="^" +char id=95 x=0 y=109 width=10 height=4 xoffset=0 yoffset=16 xadvance=10 page=0 chnl=0 letter="_" +char id=96 x=61 y=33 width=6 height=5 xoffset=0 yoffset=5 xadvance=6 page=0 chnl=0 letter="`" +char id=97 x=90 y=80 width=8 height=11 xoffset=0 yoffset=7 xadvance=8 page=0 chnl=0 letter="a" +char id=98 x=40 y=0 width=10 height=13 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=0 letter="b" +char id=99 x=51 y=0 width=9 height=11 xoffset=0 yoffset=7 xadvance=9 page=0 chnl=0 letter="c" +char id=100 x=61 y=14 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="d" +char id=101 x=60 y=104 width=9 height=11 xoffset=0 yoffset=7 xadvance=9 page=0 chnl=0 letter="e" +char id=102 x=70 y=43 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="f" +char id=103 x=70 y=28 width=9 height=14 xoffset=0 yoffset=7 xadvance=9 page=0 chnl=0 letter="g" +char id=104 x=60 y=66 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="h" +char id=105 x=111 y=14 width=4 height=13 xoffset=0 yoffset=5 xadvance=4 page=0 chnl=0 letter="i" +char id=106 x=90 y=92 width=7 height=16 xoffset=0 yoffset=5 xadvance=7 page=0 chnl=0 letter="j" +char id=107 x=60 y=80 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0 letter="k" +char id=108 x=107 y=0 width=4 height=13 xoffset=0 yoffset=5 xadvance=4 page=0 chnl=0 letter="l" +char id=109 x=0 y=69 width=13 height=11 xoffset=0 yoffset=7 xadvance=13 page=0 chnl=0 letter="m" +char id=110 x=70 y=57 width=9 height=11 xoffset=0 yoffset=7 xadvance=9 page=0 chnl=0 letter="n" +char id=111 x=70 y=98 width=9 height=11 xoffset=0 yoffset=7 xadvance=9 page=0 chnl=0 letter="o" +char id=112 x=38 y=59 width=10 height=14 xoffset=0 yoffset=7 xadvance=10 page=0 chnl=0 letter="p" +char id=113 x=71 y=0 width=9 height=14 xoffset=0 yoffset=7 xadvance=9 page=0 chnl=0 letter="q" +char id=114 x=71 y=15 width=8 height=11 xoffset=0 yoffset=7 xadvance=8 page=0 chnl=0 letter="r" +char id=115 x=90 y=68 width=8 height=11 xoffset=0 yoffset=7 xadvance=8 page=0 chnl=0 letter="s" +char id=116 x=90 y=42 width=8 height=13 xoffset=0 yoffset=5 xadvance=8 page=0 chnl=0 letter="t" +char id=117 x=60 y=54 width=9 height=11 xoffset=0 yoffset=7 xadvance=9 page=0 chnl=0 letter="u" +char id=118 x=39 y=14 width=10 height=11 xoffset=0 yoffset=7 xadvance=10 page=0 chnl=0 letter="v" +char id=119 x=0 y=43 width=13 height=11 xoffset=0 yoffset=7 xadvance=13 page=0 chnl=0 letter="w" +char id=120 x=49 y=68 width=10 height=11 xoffset=0 yoffset=7 xadvance=10 page=0 chnl=0 letter="x" +char id=121 x=38 y=88 width=10 height=14 xoffset=0 yoffset=7 xadvance=10 page=0 chnl=0 letter="y" +char id=122 x=90 y=56 width=8 height=11 xoffset=0 yoffset=7 xadvance=8 page=0 chnl=0 letter="z" +char id=123 x=98 y=92 width=6 height=16 xoffset=0 yoffset=5 xadvance=6 page=0 chnl=0 letter="{" +char id=124 x=106 y=31 width=4 height=17 xoffset=0 yoffset=4 xadvance=4 page=0 chnl=0 letter="|" +char id=125 x=99 y=42 width=6 height=16 xoffset=0 yoffset=5 xadvance=6 page=0 chnl=0 letter="}" +char id=126 x=11 y=109 width=10 height=5 xoffset=0 yoffset=8 xadvance=10 page=0 chnl=0 letter="~" +char id=8226 x=70 y=110 width=5 height=5 xoffset=0 yoffset=9 xadvance=5 page=0 chnl=0 letter="•" +char id=169 x=0 y=81 width=12 height=12 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="©" +char id=32 x=0 y=0 width=0 height=0 xoffset=0 yoffset=0 xadvance=6 page=0 chnl=0 letter=" " +char id=9 x=0 y=0 width=0 height=0 xoffset=0 yoffset=0 xadvance=48 page=0 chnl=0 letter=" " + +kernings count=606 +kerning first=65 second=39 amount=-3 +kerning first=65 second=67 amount=-1 +kerning first=65 second=71 amount=-1 +kerning first=65 second=79 amount=-1 +kerning first=65 second=81 amount=-1 +kerning first=65 second=84 amount=-3 +kerning first=65 second=85 amount=-1 +kerning first=65 second=86 amount=-3 +kerning first=65 second=87 amount=-3 +kerning first=65 second=89 amount=-3 +kerning first=66 second=65 amount=-1 +kerning first=66 second=69 amount=-1 +kerning first=66 second=76 amount=-1 +kerning first=66 second=80 amount=-1 +kerning first=66 second=82 amount=-1 +kerning first=66 second=85 amount=-1 +kerning first=66 second=86 amount=-1 +kerning first=66 second=87 amount=-1 +kerning first=66 second=89 amount=-1 +kerning first=67 second=65 amount=-1 +kerning first=67 second=79 amount=-1 +kerning first=67 second=82 amount=-1 +kerning first=68 second=65 amount=-1 +kerning first=68 second=68 amount=-1 +kerning first=68 second=69 amount=-1 +kerning first=68 second=73 amount=-1 +kerning first=68 second=76 amount=-1 +kerning first=68 second=77 amount=-1 +kerning first=68 second=78 amount=-1 +kerning first=68 second=79 amount=-1 +kerning first=68 second=80 amount=-1 +kerning first=68 second=82 amount=-1 +kerning first=68 second=85 amount=-1 +kerning first=68 second=86 amount=-1 +kerning first=68 second=87 amount=-1 +kerning first=68 second=89 amount=-1 +kerning first=69 second=67 amount=-1 +kerning first=69 second=79 amount=-1 +kerning first=70 second=65 amount=-2 +kerning first=70 second=67 amount=-1 +kerning first=70 second=71 amount=-1 +kerning first=70 second=79 amount=-1 +kerning first=70 second=46 amount=-5 +kerning first=70 second=44 amount=-6 +kerning first=71 second=69 amount=-1 +kerning first=71 second=79 amount=-1 +kerning first=71 second=82 amount=-1 +kerning first=71 second=85 amount=-1 +kerning first=72 second=79 amount=-1 +kerning first=73 second=67 amount=-1 +kerning first=73 second=71 amount=-1 +kerning first=73 second=79 amount=-1 +kerning first=74 second=65 amount=-1 +kerning first=74 second=79 amount=-1 +kerning first=75 second=79 amount=-1 +kerning first=76 second=39 amount=-6 +kerning first=76 second=67 amount=-1 +kerning first=76 second=84 amount=-4 +kerning first=76 second=86 amount=-4 +kerning first=76 second=87 amount=-3 +kerning first=76 second=89 amount=-5 +kerning first=76 second=71 amount=-1 +kerning first=76 second=79 amount=-1 +kerning first=76 second=85 amount=-1 +kerning first=77 second=71 amount=-1 +kerning first=77 second=79 amount=-1 +kerning first=78 second=67 amount=-1 +kerning first=78 second=71 amount=-1 +kerning first=78 second=79 amount=-1 +kerning first=79 second=65 amount=-1 +kerning first=79 second=66 amount=-1 +kerning first=79 second=68 amount=-1 +kerning first=79 second=69 amount=-1 +kerning first=79 second=70 amount=-1 +kerning first=79 second=72 amount=-1 +kerning first=79 second=73 amount=-1 +kerning first=79 second=75 amount=-1 +kerning first=79 second=76 amount=-1 +kerning first=79 second=77 amount=-1 +kerning first=79 second=78 amount=-1 +kerning first=79 second=80 amount=-1 +kerning first=79 second=82 amount=-1 +kerning first=79 second=84 amount=-1 +kerning first=79 second=85 amount=-1 +kerning first=79 second=86 amount=-1 +kerning first=79 second=87 amount=-1 +kerning first=79 second=88 amount=-1 +kerning first=79 second=89 amount=-1 +kerning first=80 second=65 amount=-3 +kerning first=80 second=69 amount=-1 +kerning first=80 second=76 amount=-1 +kerning first=80 second=79 amount=-1 +kerning first=80 second=80 amount=-1 +kerning first=80 second=85 amount=-1 +kerning first=80 second=89 amount=-1 +kerning first=80 second=46 amount=-5 +kerning first=80 second=44 amount=-6 +kerning first=80 second=59 amount=-2 +kerning first=80 second=58 amount=-1 +kerning first=81 second=85 amount=-1 +kerning first=82 second=67 amount=-1 +kerning first=82 second=71 amount=-1 +kerning first=82 second=89 amount=-1 +kerning first=82 second=84 amount=-1 +kerning first=82 second=85 amount=-1 +kerning first=82 second=86 amount=-1 +kerning first=82 second=87 amount=-1 +kerning first=82 second=89 amount=-1 +kerning first=83 second=73 amount=-1 +kerning first=83 second=77 amount=-1 +kerning first=83 second=84 amount=-2 +kerning first=83 second=85 amount=-1 +kerning first=84 second=65 amount=-4 +kerning first=84 second=67 amount=-1 +kerning first=84 second=79 amount=-1 +kerning first=85 second=65 amount=-1 +kerning first=85 second=67 amount=-1 +kerning first=85 second=71 amount=-1 +kerning first=85 second=79 amount=-1 +kerning first=85 second=83 amount=-1 +kerning first=86 second=65 amount=-3 +kerning first=86 second=67 amount=-1 +kerning first=86 second=71 amount=-1 +kerning first=86 second=79 amount=-1 +kerning first=86 second=83 amount=-1 +kerning first=87 second=65 amount=-3 +kerning first=87 second=67 amount=-1 +kerning first=87 second=71 amount=-1 +kerning first=87 second=79 amount=-1 +kerning first=89 second=65 amount=-4 +kerning first=89 second=67 amount=-1 +kerning first=89 second=79 amount=-1 +kerning first=89 second=83 amount=-1 +kerning first=90 second=79 amount=-1 +kerning first=65 second=99 amount=-1 +kerning first=65 second=100 amount=-1 +kerning first=65 second=101 amount=-1 +kerning first=65 second=103 amount=-1 +kerning first=65 second=111 amount=-1 +kerning first=65 second=112 amount=-1 +kerning first=65 second=113 amount=-1 +kerning first=65 second=116 amount=-3 +kerning first=65 second=117 amount=-1 +kerning first=65 second=118 amount=-2 +kerning first=65 second=119 amount=-2 +kerning first=65 second=121 amount=-2 +kerning first=66 second=98 amount=-1 +kerning first=66 second=105 amount=-1 +kerning first=66 second=107 amount=-1 +kerning first=66 second=108 amount=-1 +kerning first=66 second=114 amount=-1 +kerning first=66 second=117 amount=-1 +kerning first=66 second=121 amount=-1 +kerning first=66 second=46 amount=-1 +kerning first=66 second=44 amount=-1 +kerning first=67 second=97 amount=-1 +kerning first=67 second=114 amount=-1 +kerning first=67 second=46 amount=-1 +kerning first=67 second=44 amount=-1 +kerning first=68 second=97 amount=-1 +kerning first=68 second=46 amount=-1 +kerning first=68 second=44 amount=-2 +kerning first=69 second=117 amount=-1 +kerning first=69 second=118 amount=-1 +kerning first=70 second=97 amount=-1 +kerning first=70 second=101 amount=-1 +kerning first=70 second=105 amount=-1 +kerning first=70 second=111 amount=-1 +kerning first=70 second=114 amount=-1 +kerning first=70 second=116 amount=-1 +kerning first=70 second=117 amount=-1 +kerning first=70 second=121 amount=-1 +kerning first=70 second=46 amount=-5 +kerning first=70 second=44 amount=-6 +kerning first=70 second=59 amount=-2 +kerning first=70 second=58 amount=-1 +kerning first=71 second=117 amount=-1 +kerning first=72 second=101 amount=-1 +kerning first=72 second=111 amount=-1 +kerning first=72 second=117 amount=-1 +kerning first=72 second=121 amount=-1 +kerning first=73 second=99 amount=-1 +kerning first=73 second=100 amount=-1 +kerning first=73 second=113 amount=-1 +kerning first=73 second=111 amount=-1 +kerning first=73 second=116 amount=-1 +kerning first=74 second=97 amount=-1 +kerning first=74 second=101 amount=-1 +kerning first=74 second=111 amount=-1 +kerning first=74 second=117 amount=-1 +kerning first=74 second=46 amount=-1 +kerning first=74 second=44 amount=-1 +kerning first=75 second=101 amount=-1 +kerning first=75 second=111 amount=-1 +kerning first=75 second=117 amount=-1 +kerning first=76 second=117 amount=-1 +kerning first=76 second=121 amount=-3 +kerning first=77 second=97 amount=-1 +kerning first=77 second=99 amount=-1 +kerning first=77 second=100 amount=-1 +kerning first=77 second=101 amount=-1 +kerning first=77 second=111 amount=-1 +kerning first=78 second=117 amount=-1 +kerning first=78 second=97 amount=-1 +kerning first=78 second=101 amount=-1 +kerning first=78 second=105 amount=-1 +kerning first=78 second=111 amount=-1 +kerning first=78 second=117 amount=-1 +kerning first=78 second=46 amount=-1 +kerning first=78 second=44 amount=-1 +kerning first=79 second=97 amount=-1 +kerning first=79 second=98 amount=-1 +kerning first=79 second=104 amount=-1 +kerning first=79 second=107 amount=-1 +kerning first=79 second=108 amount=-1 +kerning first=79 second=46 amount=-1 +kerning first=79 second=44 amount=-2 +kerning first=80 second=97 amount=-1 +kerning first=80 second=101 amount=-1 +kerning first=80 second=111 amount=-1 +kerning first=82 second=100 amount=-1 +kerning first=82 second=101 amount=-1 +kerning first=82 second=111 amount=-1 +kerning first=82 second=116 amount=-1 +kerning first=82 second=117 amount=-1 +kerning first=83 second=105 amount=-1 +kerning first=83 second=112 amount=-1 +kerning first=83 second=117 amount=-1 +kerning first=83 second=46 amount=-1 +kerning first=83 second=44 amount=-2 +kerning first=84 second=97 amount=-1 +kerning first=84 second=99 amount=-2 +kerning first=84 second=101 amount=-1 +kerning first=84 second=105 amount=-1 +kerning first=84 second=111 amount=-1 +kerning first=84 second=114 amount=-1 +kerning first=84 second=115 amount=-1 +kerning first=84 second=117 amount=-1 +kerning first=84 second=119 amount=-1 +kerning first=84 second=121 amount=-1 +kerning first=84 second=46 amount=-5 +kerning first=84 second=44 amount=-5 +kerning first=84 second=59 amount=-2 +kerning first=84 second=58 amount=-1 +kerning first=85 second=97 amount=-1 +kerning first=85 second=103 amount=-1 +kerning first=85 second=109 amount=-1 +kerning first=85 second=110 amount=-1 +kerning first=85 second=112 amount=-1 +kerning first=85 second=115 amount=-1 +kerning first=85 second=46 amount=-1 +kerning first=85 second=44 amount=-2 +kerning first=86 second=97 amount=-1 +kerning first=86 second=101 amount=-1 +kerning first=86 second=105 amount=-1 +kerning first=86 second=111 amount=-1 +kerning first=86 second=114 amount=-1 +kerning first=86 second=117 amount=-1 +kerning first=86 second=46 amount=-3 +kerning first=86 second=44 amount=-4 +kerning first=86 second=59 amount=-2 +kerning first=86 second=58 amount=-1 +kerning first=87 second=100 amount=-1 +kerning first=87 second=105 amount=-1 +kerning first=87 second=109 amount=-1 +kerning first=87 second=114 amount=-1 +kerning first=87 second=116 amount=-1 +kerning first=87 second=117 amount=-1 +kerning first=87 second=121 amount=-1 +kerning first=87 second=46 amount=-3 +kerning first=87 second=44 amount=-3 +kerning first=87 second=59 amount=-2 +kerning first=87 second=58 amount=-1 +kerning first=88 second=97 amount=-1 +kerning first=88 second=101 amount=-1 +kerning first=88 second=111 amount=-1 +kerning first=88 second=117 amount=-1 +kerning first=88 second=121 amount=-1 +kerning first=89 second=100 amount=-1 +kerning first=89 second=101 amount=-1 +kerning first=89 second=105 amount=-1 +kerning first=89 second=112 amount=-1 +kerning first=89 second=117 amount=-1 +kerning first=89 second=118 amount=-1 +kerning first=89 second=46 amount=-5 +kerning first=89 second=44 amount=-5 +kerning first=89 second=59 amount=-2 +kerning first=89 second=58 amount=-1 +kerning first=97 second=99 amount=-1 +kerning first=97 second=100 amount=-1 +kerning first=97 second=101 amount=-1 +kerning first=97 second=103 amount=-1 +kerning first=97 second=112 amount=-1 +kerning first=97 second=102 amount=-1 +kerning first=97 second=116 amount=-1 +kerning first=97 second=117 amount=-1 +kerning first=97 second=118 amount=-1 +kerning first=97 second=119 amount=-1 +kerning first=97 second=121 amount=-1 +kerning first=97 second=112 amount=-1 +kerning first=98 second=108 amount=-1 +kerning first=98 second=114 amount=-1 +kerning first=98 second=117 amount=-1 +kerning first=98 second=121 amount=-1 +kerning first=98 second=46 amount=-1 +kerning first=98 second=44 amount=-2 +kerning first=99 second=97 amount=-1 +kerning first=99 second=104 amount=-1 +kerning first=99 second=107 amount=-1 +kerning first=100 second=97 amount=-1 +kerning first=100 second=99 amount=-1 +kerning first=100 second=101 amount=-1 +kerning first=100 second=103 amount=-1 +kerning first=100 second=111 amount=-1 +kerning first=100 second=116 amount=-1 +kerning first=100 second=117 amount=-1 +kerning first=100 second=118 amount=-1 +kerning first=100 second=119 amount=-1 +kerning first=100 second=121 amount=-1 +kerning first=100 second=46 amount=-1 +kerning first=100 second=44 amount=-1 +kerning first=101 second=97 amount=-1 +kerning first=101 second=105 amount=-1 +kerning first=101 second=108 amount=-1 +kerning first=101 second=109 amount=-1 +kerning first=101 second=110 amount=-1 +kerning first=101 second=112 amount=-1 +kerning first=101 second=114 amount=-1 +kerning first=101 second=116 amount=-1 +kerning first=101 second=117 amount=-1 +kerning first=101 second=118 amount=-1 +kerning first=101 second=119 amount=-1 +kerning first=101 second=121 amount=-1 +kerning first=101 second=46 amount=-1 +kerning first=101 second=44 amount=-1 +kerning first=102 second=97 amount=-1 +kerning first=102 second=101 amount=-1 +kerning first=102 second=102 amount=-1 +kerning first=102 second=105 amount=-1 +kerning first=102 second=108 amount=-1 +kerning first=102 second=111 amount=-1 +kerning first=102 second=46 amount=-4 +kerning first=102 second=44 amount=-4 +kerning first=103 second=97 amount=-1 +kerning first=103 second=101 amount=-1 +kerning first=103 second=104 amount=-1 +kerning first=103 second=108 amount=-1 +kerning first=103 second=111 amount=-1 +kerning first=103 second=103 amount=-1 +kerning first=103 second=46 amount=-1 +kerning first=103 second=44 amount=-1 +kerning first=104 second=99 amount=-1 +kerning first=104 second=100 amount=-1 +kerning first=104 second=101 amount=-1 +kerning first=104 second=103 amount=-1 +kerning first=104 second=111 amount=-1 +kerning first=104 second=112 amount=-1 +kerning first=104 second=116 amount=-1 +kerning first=104 second=117 amount=-1 +kerning first=104 second=118 amount=-1 +kerning first=104 second=119 amount=-1 +kerning first=104 second=121 amount=-1 +kerning first=105 second=99 amount=-1 +kerning first=105 second=100 amount=-1 +kerning first=105 second=101 amount=-1 +kerning first=105 second=103 amount=-1 +kerning first=105 second=111 amount=-1 +kerning first=105 second=112 amount=-1 +kerning first=105 second=116 amount=-1 +kerning first=105 second=117 amount=-1 +kerning first=105 second=118 amount=-1 +kerning first=106 second=97 amount=-1 +kerning first=106 second=101 amount=-1 +kerning first=106 second=111 amount=-1 +kerning first=106 second=117 amount=-1 +kerning first=106 second=46 amount=-2 +kerning first=106 second=44 amount=-2 +kerning first=107 second=97 amount=-1 +kerning first=107 second=99 amount=-1 +kerning first=107 second=100 amount=-1 +kerning first=107 second=101 amount=-1 +kerning first=107 second=103 amount=-1 +kerning first=107 second=111 amount=-1 +kerning first=108 second=97 amount=-1 +kerning first=108 second=99 amount=-1 +kerning first=108 second=100 amount=-1 +kerning first=108 second=101 amount=-1 +kerning first=108 second=102 amount=-1 +kerning first=108 second=103 amount=-1 +kerning first=108 second=111 amount=-1 +kerning first=108 second=112 amount=-1 +kerning first=108 second=113 amount=-1 +kerning first=108 second=117 amount=-1 +kerning first=108 second=118 amount=-1 +kerning first=108 second=119 amount=-1 +kerning first=108 second=121 amount=-1 +kerning first=109 second=97 amount=-1 +kerning first=109 second=99 amount=-1 +kerning first=109 second=100 amount=-1 +kerning first=109 second=101 amount=-1 +kerning first=109 second=103 amount=-1 +kerning first=109 second=110 amount=-1 +kerning first=109 second=111 amount=-1 +kerning first=109 second=112 amount=-1 +kerning first=109 second=116 amount=-1 +kerning first=109 second=117 amount=-1 +kerning first=109 second=118 amount=-1 +kerning first=109 second=121 amount=-1 +kerning first=110 second=99 amount=-1 +kerning first=110 second=100 amount=-1 +kerning first=110 second=101 amount=-1 +kerning first=110 second=103 amount=-1 +kerning first=110 second=111 amount=-1 +kerning first=110 second=112 amount=-1 +kerning first=110 second=116 amount=-1 +kerning first=110 second=117 amount=-1 +kerning first=110 second=118 amount=-1 +kerning first=110 second=119 amount=-1 +kerning first=110 second=121 amount=-1 +kerning first=111 second=98 amount=-1 +kerning first=111 second=102 amount=-1 +kerning first=111 second=104 amount=-1 +kerning first=111 second=106 amount=-3 +kerning first=111 second=107 amount=-1 +kerning first=111 second=108 amount=-1 +kerning first=111 second=109 amount=-1 +kerning first=111 second=110 amount=-1 +kerning first=111 second=112 amount=-1 +kerning first=111 second=114 amount=-1 +kerning first=111 second=117 amount=-1 +kerning first=111 second=118 amount=-1 +kerning first=111 second=119 amount=-1 +kerning first=111 second=120 amount=-1 +kerning first=111 second=121 amount=-1 +kerning first=111 second=46 amount=-1 +kerning first=111 second=44 amount=-1 +kerning first=112 second=97 amount=-1 +kerning first=112 second=104 amount=-1 +kerning first=112 second=105 amount=-1 +kerning first=112 second=108 amount=-1 +kerning first=112 second=112 amount=-1 +kerning first=112 second=117 amount=-1 +kerning first=112 second=46 amount=-1 +kerning first=112 second=44 amount=-2 +kerning first=113 second=117 amount=-1 +kerning first=116 second=46 amount=-1 +kerning first=114 second=97 amount=-1 +kerning first=114 second=100 amount=-1 +kerning first=114 second=101 amount=-1 +kerning first=114 second=103 amount=-1 +kerning first=114 second=107 amount=-1 +kerning first=114 second=108 amount=-1 +kerning first=114 second=109 amount=-1 +kerning first=114 second=110 amount=-1 +kerning first=114 second=111 amount=-1 +kerning first=114 second=113 amount=-1 +kerning first=114 second=114 amount=-1 +kerning first=114 second=116 amount=-1 +kerning first=114 second=118 amount=-1 +kerning first=114 second=121 amount=-1 +kerning first=114 second=46 amount=-5 +kerning first=114 second=44 amount=-5 +kerning first=115 second=104 amount=-1 +kerning first=115 second=116 amount=-1 +kerning first=115 second=117 amount=-1 +kerning first=115 second=46 amount=-1 +kerning first=115 second=44 amount=-1 +kerning first=116 second=100 amount=-1 +kerning first=116 second=97 amount=-1 +kerning first=116 second=101 amount=-1 +kerning first=116 second=111 amount=-1 +kerning first=116 second=46 amount=-1 +kerning first=116 second=44 amount=-1 +kerning first=117 second=97 amount=-1 +kerning first=117 second=99 amount=-1 +kerning first=117 second=100 amount=-1 +kerning first=117 second=101 amount=-1 +kerning first=117 second=103 amount=-1 +kerning first=117 second=111 amount=-1 +kerning first=117 second=112 amount=-1 +kerning first=117 second=113 amount=-1 +kerning first=117 second=116 amount=-1 +kerning first=117 second=118 amount=-1 +kerning first=117 second=119 amount=-1 +kerning first=117 second=121 amount=-1 +kerning first=118 second=97 amount=-1 +kerning first=118 second=98 amount=-1 +kerning first=118 second=99 amount=-1 +kerning first=118 second=100 amount=-1 +kerning first=118 second=101 amount=-1 +kerning first=118 second=103 amount=-1 +kerning first=118 second=111 amount=-1 +kerning first=118 second=118 amount=-1 +kerning first=118 second=121 amount=-1 +kerning first=118 second=46 amount=-3 +kerning first=118 second=44 amount=-3 +kerning first=119 second=97 amount=-1 +kerning first=119 second=120 amount=-1 +kerning first=119 second=100 amount=-1 +kerning first=119 second=101 amount=-1 +kerning first=119 second=103 amount=-1 +kerning first=119 second=104 amount=-1 +kerning first=119 second=111 amount=-1 +kerning first=119 second=46 amount=-2 +kerning first=119 second=44 amount=-3 +kerning first=120 second=97 amount=-1 +kerning first=120 second=101 amount=-1 +kerning first=120 second=111 amount=-1 +kerning first=121 second=46 amount=-3 +kerning first=121 second=44 amount=-3 +kerning first=121 second=97 amount=-1 +kerning first=121 second=99 amount=-1 +kerning first=121 second=100 amount=-1 +kerning first=121 second=101 amount=-1 +kerning first=121 second=111 amount=-1 +kerning first=117 second=109 amount=-1 +kerning first=84 second=104 amount=-1 +kerning first=118 second=101 amount=-1 +kerning first=119 second=110 amount=-1 +kerning first=112 second=115 amount=-1 +kerning first=76 second=97 amount=-1 +kerning first=117 second=105 amount=-1 +kerning first=98 second=101 amount=-1 +kerning first=99 second=111 amount=-1 +kerning first=102 second=103 amount=-1 +kerning first=118 second=119 amount=-1 +kerning first=120 second=121 amount=-1 +kerning first=121 second=122 amount=-1 +kerning first=119 second=119 amount=-1 +kerning first=99 second=101 amount=-1 +kerning first=101 second=115 amount=-1 +kerning first=101 second=102 amount=-1 +kerning first=98 second=97 amount=-1 +kerning first=116 second=104 amount=-1 +kerning first=116 second=105 amount=-1 +kerning first=101 second=101 amount=-1 +kerning first=104 second=97 amount=-1 +kerning first=111 second=101 amount=-1 +kerning first=119 second=105 amount=-1 +kerning first=88 second=89 amount=-1 +kerning first=89 second=90 amount=-1 +kerning first=82 second=83 amount=-1 +kerning first=75 second=76 amount=-1 +kerning first=101 second=100 amount=-1 +kerning first=116 second=111 amount=-1 +kerning first=87 second=104 amount=-1 +kerning first=107 second=110 amount=-1 +kerning first=119 second=115 amount=-1 +kerning first=116 second=114 amount=-1 +kerning first=102 second=114 amount=-1 +kerning first=65 second=110 amount=-1 +kerning first=116 second=116 amount=-1 +kerning first=66 second=67 amount=-1 +kerning first=67 second=68 amount=-1 +kerning first=65 second=66 amount=-1 +kerning first=89 second=111 amount=-1 +kerning first=102 second=117 amount=-1 +kerning first=67 second=111 amount=-1 +kerning first=116 second=115 amount=-1 +kerning first=111 second=111 amount=-1 +kerning first=68 second=111 amount=-1 +kerning first=101 second=97 amount=-1 +kerning first=76 second=111 amount=-1 +kerning first=115 second=105 amount=-1 +kerning first=111 second=116 amount=-1 +kerning first=111 second=103 amount=-1 +kerning first=82 second=97 amount=-1 +kerning first=101 second=99 amount=-1 +kerning first=66 second=111 amount=-1 +kerning first=111 second=99 amount=-1 +kerning first=115 second=111 amount=-1 +kerning first=83 second=119 amount=-2 +kerning first=66 second=101 amount=-1 +kerning first=99 second=116 amount=-1 +kerning first=98 second=106 amount=-3 +kerning first=115 second=101 amount=-1 +kerning first=121 second=119 amount=-1 +kerning first=111 second=97 amount=-1 +kerning first=68 second=88 amount=-1 +kerning first=101 second=98 amount=-1 +kerning first=115 second=119 amount=-1 +kerning first=97 second=120 amount=-1 +kerning first=73 second=110 amount=-1 +kerning first=73 second=74 amount=-1 +kerning first=116 second=112 amount=-1 +kerning first=104 second=105 amount=-1 +kerning first=105 second=115 amount=-1 +kerning first=98 second=99 amount=-1 +kerning first=115 second=112 amount=-1 +kerning first=100 second=105 amount=-1 +kerning first=105 second=106 amount=-3 +kerning first=108 second=109 amount=-1 +kerning first=107 second=108 amount=-1 +kerning first=108 second=105 amount=-1 +kerning first=112 second=113 amount=-1 +kerning first=108 second=108 amount=-1 +kerning first=49 second=50 amount=-1 +kerning first=106 second=107 amount=-1 +kerning first=117 second=110 amount=-1 +kerning first=113 second=114 amount=-1 +kerning first=116 second=117 amount=-1 +kerning first=114 second=115 amount=-1 +kerning first=117 second=114 amount=-1 +kerning first=73 second=112 amount=-1 +kerning first=79 second=112 amount=-1 +kerning first=101 second=103 amount=-1 diff --git a/assets/skins/neon/skin/font-over-export.fnt b/assets/skins/neon/skin/font-over-export.fnt new file mode 100644 index 0000000..3e0feef --- /dev/null +++ b/assets/skins/neon/skin/font-over-export.fnt @@ -0,0 +1,710 @@ +info face="font-over-export" size=32 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=1,1 +common lineHeight=22 base=22 scaleW=142 scaleH=144 pages=1 packed=0 alphaChnl=1 redChnl=0 greenChnl=0 blueChnl=0 +page id=0 file="font-over-export.png" +chars count=98 +char id=33 x=133 y=101 width=7 height=16 xoffset=0 yoffset=6 xadvance=7 page=0 chnl=0 letter="!" +char id=34 x=123 y=132 width=9 height=10 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter=""" +char id=35 x=16 y=68 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="#" +char id=36 x=74 y=98 width=12 height=18 xoffset=0 yoffset=5 xadvance=12 page=0 chnl=0 letter="$" +char id=37 x=0 y=0 width=17 height=16 xoffset=0 yoffset=6 xadvance=17 page=0 chnl=0 letter="%" +char id=38 x=16 y=100 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="&" +char id=39 x=133 y=0 width=7 height=9 xoffset=0 yoffset=6 xadvance=7 page=0 chnl=0 letter="'" +char id=40 x=113 y=115 width=9 height=19 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter="(" +char id=41 x=124 y=61 width=9 height=19 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter=")" +char id=42 x=60 y=132 width=10 height=10 xoffset=0 yoffset=6 xadvance=10 page=0 chnl=0 letter="*" +char id=43 x=74 y=68 width=12 height=12 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="+" +char id=44 x=114 y=20 width=8 height=9 xoffset=0 yoffset=15 xadvance=8 page=0 chnl=0 letter="," +char id=45 x=27 y=136 width=11 height=7 xoffset=0 yoffset=12 xadvance=11 page=0 chnl=0 letter="-" +char id=46 x=124 y=81 width=7 height=8 xoffset=0 yoffset=14 xadvance=7 page=0 chnl=0 letter="." +char id=47 x=113 y=61 width=10 height=16 xoffset=0 yoffset=6 xadvance=10 page=0 chnl=0 letter="/" +char id=48 x=74 y=81 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="0" +char id=49 x=123 y=115 width=9 height=16 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter="1" +char id=50 x=75 y=34 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="2" +char id=51 x=76 y=17 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="3" +char id=52 x=60 y=67 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="4" +char id=53 x=88 y=34 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="5" +char id=54 x=62 y=17 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="6" +char id=55 x=60 y=84 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="7" +char id=56 x=100 y=111 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="8" +char id=57 x=60 y=115 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="9" +char id=58 x=134 y=44 width=7 height=13 xoffset=0 yoffset=9 xadvance=7 page=0 chnl=0 letter=":" +char id=59 x=125 y=40 width=8 height=15 xoffset=0 yoffset=9 xadvance=8 page=0 chnl=0 letter=";" +char id=60 x=100 y=128 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="<" +char id=61 x=46 y=130 width=13 height=10 xoffset=0 yoffset=10 xadvance=13 page=0 chnl=0 letter="=" +char id=62 x=60 y=101 width=13 height=13 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=0 letter=">" +char id=63 x=102 y=13 width=11 height=16 xoffset=0 yoffset=6 xadvance=11 page=0 chnl=0 letter="?" +char id=64 x=0 y=85 width=15 height=16 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=0 letter="@" +char id=65 x=16 y=117 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="A" +char id=66 x=18 y=0 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="B" +char id=67 x=31 y=85 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="C" +char id=68 x=18 y=17 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="D" +char id=69 x=89 y=17 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="E" +char id=70 x=89 y=0 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="F" +char id=71 x=16 y=51 width=15 height=16 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=0 letter="G" +char id=72 x=32 y=34 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="H" +char id=73 x=134 y=27 width=7 height=16 xoffset=0 yoffset=6 xadvance=7 page=0 chnl=0 letter="I" +char id=74 x=87 y=113 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="J" +char id=75 x=32 y=51 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="K" +char id=76 x=48 y=17 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="L" +char id=77 x=0 y=34 width=16 height=16 xoffset=0 yoffset=6 xadvance=16 page=0 chnl=0 letter="M" +char id=78 x=17 y=34 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="N" +char id=79 x=0 y=68 width=15 height=16 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=0 letter="O" +char id=80 x=76 y=0 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="P" +char id=81 x=0 y=51 width=15 height=16 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=0 letter="Q" +char id=82 x=74 y=51 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="R" +char id=83 x=62 y=0 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="S" +char id=84 x=31 y=68 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="T" +char id=85 x=31 y=102 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="U" +char id=86 x=33 y=0 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="V" +char id=87 x=0 y=17 width=17 height=16 xoffset=0 yoffset=6 xadvance=17 page=0 chnl=0 letter="W" +char id=88 x=33 y=17 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="X" +char id=89 x=31 y=119 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="Y" +char id=90 x=61 y=34 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="Z" +char id=91 x=113 y=95 width=9 height=19 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter="[" +char id=92 x=113 y=30 width=11 height=16 xoffset=0 yoffset=6 xadvance=11 page=0 chnl=0 letter="\" +char id=93 x=133 y=81 width=8 height=19 xoffset=0 yoffset=6 xadvance=8 page=0 chnl=0 letter="]" +char id=94 x=102 y=0 width=11 height=12 xoffset=0 yoffset=6 xadvance=11 page=0 chnl=0 letter="^" +char id=95 x=0 y=136 width=13 height=7 xoffset=0 yoffset=17 xadvance=13 page=0 chnl=0 letter="_" +char id=96 x=71 y=134 width=8 height=8 xoffset=0 yoffset=6 xadvance=8 page=0 chnl=0 letter="`" +char id=97 x=100 y=97 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="a" +char id=98 x=48 y=0 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="b" +char id=99 x=101 y=34 width=11 height=13 xoffset=0 yoffset=9 xadvance=11 page=0 chnl=0 letter="c" +char id=100 x=47 y=34 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="d" +char id=101 x=46 y=116 width=13 height=13 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=0 letter="e" +char id=102 x=101 y=48 width=11 height=16 xoffset=0 yoffset=6 xadvance=11 page=0 chnl=0 letter="f" +char id=103 x=46 y=83 width=13 height=16 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=0 letter="g" +char id=104 x=74 y=117 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="h" +char id=105 x=134 y=10 width=7 height=16 xoffset=0 yoffset=6 xadvance=7 page=0 chnl=0 letter="i" +char id=106 x=123 y=95 width=9 height=19 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter="j" +char id=107 x=87 y=96 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="k" +char id=108 x=133 y=118 width=7 height=16 xoffset=0 yoffset=6 xadvance=7 page=0 chnl=0 letter="l" +char id=109 x=0 y=116 width=15 height=14 xoffset=0 yoffset=8 xadvance=15 page=0 chnl=0 letter="m" +char id=110 x=46 y=68 width=13 height=14 xoffset=0 yoffset=8 xadvance=13 page=0 chnl=0 letter="n" +char id=111 x=100 y=83 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="o" +char id=112 x=46 y=100 width=13 height=15 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=0 letter="p" +char id=113 x=47 y=51 width=13 height=15 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=0 letter="q" +char id=114 x=88 y=51 width=12 height=14 xoffset=0 yoffset=8 xadvance=12 page=0 chnl=0 letter="r" +char id=115 x=113 y=47 width=11 height=13 xoffset=0 yoffset=9 xadvance=11 page=0 chnl=0 letter="s" +char id=116 x=113 y=78 width=10 height=16 xoffset=0 yoffset=6 xadvance=10 page=0 chnl=0 letter="t" +char id=117 x=61 y=51 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="u" +char id=118 x=87 y=68 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="v" +char id=119 x=0 y=102 width=15 height=13 xoffset=0 yoffset=9 xadvance=15 page=0 chnl=0 letter="w" +char id=120 x=87 y=82 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="x" +char id=121 x=100 y=66 width=12 height=16 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="y" +char id=122 x=87 y=130 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="z" +char id=123 x=125 y=20 width=8 height=19 xoffset=0 yoffset=6 xadvance=8 page=0 chnl=0 letter="{" +char id=124 x=124 y=0 width=8 height=19 xoffset=0 yoffset=6 xadvance=8 page=0 chnl=0 letter="|" +char id=125 x=114 y=0 width=9 height=19 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter="}" +char id=126 x=14 y=134 width=12 height=8 xoffset=0 yoffset=10 xadvance=12 page=0 chnl=0 letter="~" +char id=8226 x=113 y=135 width=8 height=8 xoffset=0 yoffset=10 xadvance=8 page=0 chnl=0 letter="•" +char id=169 x=16 y=85 width=14 height=14 xoffset=0 yoffset=7 xadvance=14 page=0 chnl=0 letter="©" +char id=32 x=0 y=0 width=0 height=0 xoffset=0 yoffset=0 xadvance=8 page=0 chnl=0 letter=" " +char id=9 x=0 y=0 width=0 height=0 xoffset=0 yoffset=0 xadvance=64 page=0 chnl=0 letter=" " + +kernings count=606 +kerning first=65 second=39 amount=-3 +kerning first=65 second=67 amount=-1 +kerning first=65 second=71 amount=-2 +kerning first=65 second=79 amount=-1 +kerning first=65 second=81 amount=-1 +kerning first=65 second=84 amount=-3 +kerning first=65 second=85 amount=-2 +kerning first=65 second=86 amount=-4 +kerning first=65 second=87 amount=-3 +kerning first=65 second=89 amount=-4 +kerning first=66 second=65 amount=-1 +kerning first=66 second=69 amount=-1 +kerning first=66 second=76 amount=-1 +kerning first=66 second=80 amount=-1 +kerning first=66 second=82 amount=-1 +kerning first=66 second=85 amount=-1 +kerning first=66 second=86 amount=-2 +kerning first=66 second=87 amount=-2 +kerning first=66 second=89 amount=-2 +kerning first=67 second=65 amount=-1 +kerning first=67 second=79 amount=-1 +kerning first=67 second=82 amount=-1 +kerning first=68 second=65 amount=-1 +kerning first=68 second=68 amount=-1 +kerning first=68 second=69 amount=-1 +kerning first=68 second=73 amount=-1 +kerning first=68 second=76 amount=-1 +kerning first=68 second=77 amount=-1 +kerning first=68 second=78 amount=-1 +kerning first=68 second=79 amount=-1 +kerning first=68 second=80 amount=-1 +kerning first=68 second=82 amount=-1 +kerning first=68 second=85 amount=-1 +kerning first=68 second=86 amount=-2 +kerning first=68 second=87 amount=-1 +kerning first=68 second=89 amount=-2 +kerning first=69 second=67 amount=-1 +kerning first=69 second=79 amount=-1 +kerning first=70 second=65 amount=-1 +kerning first=70 second=67 amount=-1 +kerning first=70 second=71 amount=-1 +kerning first=70 second=79 amount=-1 +kerning first=70 second=46 amount=-2 +kerning first=70 second=44 amount=-3 +kerning first=71 second=69 amount=-1 +kerning first=71 second=79 amount=-1 +kerning first=71 second=82 amount=-1 +kerning first=71 second=85 amount=-1 +kerning first=72 second=79 amount=-1 +kerning first=73 second=67 amount=-1 +kerning first=73 second=71 amount=-1 +kerning first=73 second=79 amount=-1 +kerning first=74 second=65 amount=-1 +kerning first=74 second=79 amount=-1 +kerning first=75 second=79 amount=-2 +kerning first=76 second=39 amount=-6 +kerning first=76 second=67 amount=-2 +kerning first=76 second=84 amount=-5 +kerning first=76 second=86 amount=-5 +kerning first=76 second=87 amount=-4 +kerning first=76 second=89 amount=-5 +kerning first=76 second=71 amount=-3 +kerning first=76 second=79 amount=-2 +kerning first=76 second=85 amount=-3 +kerning first=77 second=71 amount=-1 +kerning first=77 second=79 amount=-1 +kerning first=78 second=67 amount=-1 +kerning first=78 second=71 amount=-1 +kerning first=78 second=79 amount=-1 +kerning first=79 second=65 amount=-1 +kerning first=79 second=66 amount=-1 +kerning first=79 second=68 amount=-1 +kerning first=79 second=69 amount=-1 +kerning first=79 second=70 amount=-1 +kerning first=79 second=72 amount=-1 +kerning first=79 second=73 amount=-1 +kerning first=79 second=75 amount=-1 +kerning first=79 second=76 amount=-1 +kerning first=79 second=77 amount=-1 +kerning first=79 second=78 amount=-1 +kerning first=79 second=80 amount=-1 +kerning first=79 second=82 amount=-1 +kerning first=79 second=84 amount=-1 +kerning first=79 second=85 amount=-1 +kerning first=79 second=86 amount=-2 +kerning first=79 second=87 amount=-1 +kerning first=79 second=88 amount=-2 +kerning first=79 second=89 amount=-2 +kerning first=80 second=65 amount=-1 +kerning first=80 second=69 amount=-1 +kerning first=80 second=76 amount=-1 +kerning first=80 second=79 amount=-1 +kerning first=80 second=80 amount=-1 +kerning first=80 second=85 amount=-1 +kerning first=80 second=89 amount=-1 +kerning first=80 second=46 amount=-2 +kerning first=80 second=44 amount=-3 +kerning first=80 second=59 amount=-2 +kerning first=80 second=58 amount=-1 +kerning first=81 second=85 amount=-1 +kerning first=82 second=67 amount=-1 +kerning first=82 second=71 amount=-1 +kerning first=82 second=89 amount=-1 +kerning first=82 second=84 amount=-1 +kerning first=82 second=85 amount=-1 +kerning first=82 second=86 amount=-1 +kerning first=82 second=87 amount=-1 +kerning first=82 second=89 amount=-1 +kerning first=83 second=73 amount=-1 +kerning first=83 second=77 amount=-1 +kerning first=83 second=84 amount=-2 +kerning first=83 second=85 amount=-1 +kerning first=84 second=65 amount=-4 +kerning first=84 second=67 amount=-2 +kerning first=84 second=79 amount=-2 +kerning first=85 second=65 amount=-1 +kerning first=85 second=67 amount=-1 +kerning first=85 second=71 amount=-1 +kerning first=85 second=79 amount=-1 +kerning first=85 second=83 amount=-1 +kerning first=86 second=65 amount=-3 +kerning first=86 second=67 amount=-2 +kerning first=86 second=71 amount=-2 +kerning first=86 second=79 amount=-2 +kerning first=86 second=83 amount=-1 +kerning first=87 second=65 amount=-2 +kerning first=87 second=67 amount=-1 +kerning first=87 second=71 amount=-2 +kerning first=87 second=79 amount=-1 +kerning first=89 second=65 amount=-4 +kerning first=89 second=67 amount=-2 +kerning first=89 second=79 amount=-2 +kerning first=89 second=83 amount=-1 +kerning first=90 second=79 amount=-2 +kerning first=65 second=99 amount=-1 +kerning first=65 second=100 amount=-2 +kerning first=65 second=101 amount=-2 +kerning first=65 second=103 amount=-1 +kerning first=65 second=111 amount=-1 +kerning first=65 second=112 amount=-1 +kerning first=65 second=113 amount=-2 +kerning first=65 second=116 amount=-2 +kerning first=65 second=117 amount=-2 +kerning first=65 second=118 amount=-2 +kerning first=65 second=119 amount=-2 +kerning first=65 second=121 amount=-2 +kerning first=66 second=98 amount=-1 +kerning first=66 second=105 amount=-1 +kerning first=66 second=107 amount=-1 +kerning first=66 second=108 amount=-1 +kerning first=66 second=114 amount=-1 +kerning first=66 second=117 amount=-1 +kerning first=66 second=121 amount=-2 +kerning first=66 second=46 amount=-1 +kerning first=66 second=44 amount=-2 +kerning first=67 second=97 amount=-1 +kerning first=67 second=114 amount=-1 +kerning first=67 second=46 amount=-1 +kerning first=67 second=44 amount=-2 +kerning first=68 second=97 amount=-1 +kerning first=68 second=46 amount=-2 +kerning first=68 second=44 amount=-3 +kerning first=69 second=117 amount=-1 +kerning first=69 second=118 amount=-1 +kerning first=70 second=97 amount=-1 +kerning first=70 second=101 amount=-1 +kerning first=70 second=105 amount=-1 +kerning first=70 second=111 amount=-1 +kerning first=70 second=114 amount=-1 +kerning first=70 second=116 amount=-1 +kerning first=70 second=117 amount=-1 +kerning first=70 second=121 amount=-1 +kerning first=70 second=46 amount=-2 +kerning first=70 second=44 amount=-3 +kerning first=70 second=59 amount=-2 +kerning first=70 second=58 amount=-1 +kerning first=71 second=117 amount=-1 +kerning first=72 second=101 amount=-1 +kerning first=72 second=111 amount=-1 +kerning first=72 second=117 amount=-1 +kerning first=72 second=121 amount=-1 +kerning first=73 second=99 amount=-1 +kerning first=73 second=100 amount=-1 +kerning first=73 second=113 amount=-1 +kerning first=73 second=111 amount=-1 +kerning first=73 second=116 amount=-1 +kerning first=74 second=97 amount=-1 +kerning first=74 second=101 amount=-1 +kerning first=74 second=111 amount=-1 +kerning first=74 second=117 amount=-1 +kerning first=74 second=46 amount=-2 +kerning first=74 second=44 amount=-2 +kerning first=75 second=101 amount=-3 +kerning first=75 second=111 amount=-2 +kerning first=75 second=117 amount=-2 +kerning first=76 second=117 amount=-3 +kerning first=76 second=121 amount=-2 +kerning first=77 second=97 amount=-1 +kerning first=77 second=99 amount=-1 +kerning first=77 second=100 amount=-1 +kerning first=77 second=101 amount=-1 +kerning first=77 second=111 amount=-1 +kerning first=78 second=117 amount=-1 +kerning first=78 second=97 amount=-1 +kerning first=78 second=101 amount=-1 +kerning first=78 second=105 amount=-1 +kerning first=78 second=111 amount=-1 +kerning first=78 second=117 amount=-1 +kerning first=78 second=46 amount=-1 +kerning first=78 second=44 amount=-2 +kerning first=79 second=97 amount=-1 +kerning first=79 second=98 amount=-1 +kerning first=79 second=104 amount=-1 +kerning first=79 second=107 amount=-1 +kerning first=79 second=108 amount=-1 +kerning first=79 second=46 amount=-1 +kerning first=79 second=44 amount=-2 +kerning first=80 second=97 amount=-1 +kerning first=80 second=101 amount=-1 +kerning first=80 second=111 amount=-1 +kerning first=82 second=100 amount=-2 +kerning first=82 second=101 amount=-2 +kerning first=82 second=111 amount=-1 +kerning first=82 second=116 amount=-1 +kerning first=82 second=117 amount=-1 +kerning first=83 second=105 amount=-1 +kerning first=83 second=112 amount=-1 +kerning first=83 second=117 amount=-1 +kerning first=83 second=46 amount=-2 +kerning first=83 second=44 amount=-2 +kerning first=84 second=97 amount=-2 +kerning first=84 second=99 amount=-2 +kerning first=84 second=101 amount=-3 +kerning first=84 second=105 amount=-1 +kerning first=84 second=111 amount=-2 +kerning first=84 second=114 amount=-3 +kerning first=84 second=115 amount=-2 +kerning first=84 second=117 amount=-3 +kerning first=84 second=119 amount=-2 +kerning first=84 second=121 amount=-2 +kerning first=84 second=46 amount=-5 +kerning first=84 second=44 amount=-5 +kerning first=84 second=59 amount=-3 +kerning first=84 second=58 amount=-2 +kerning first=85 second=97 amount=-1 +kerning first=85 second=103 amount=-1 +kerning first=85 second=109 amount=-1 +kerning first=85 second=110 amount=-1 +kerning first=85 second=112 amount=-1 +kerning first=85 second=115 amount=-1 +kerning first=85 second=46 amount=-1 +kerning first=85 second=44 amount=-2 +kerning first=86 second=97 amount=-2 +kerning first=86 second=101 amount=-3 +kerning first=86 second=105 amount=-1 +kerning first=86 second=111 amount=-2 +kerning first=86 second=114 amount=-2 +kerning first=86 second=117 amount=-2 +kerning first=86 second=46 amount=-4 +kerning first=86 second=44 amount=-4 +kerning first=86 second=59 amount=-3 +kerning first=86 second=58 amount=-2 +kerning first=87 second=100 amount=-2 +kerning first=87 second=105 amount=-1 +kerning first=87 second=109 amount=-1 +kerning first=87 second=114 amount=-2 +kerning first=87 second=116 amount=-1 +kerning first=87 second=117 amount=-2 +kerning first=87 second=121 amount=-1 +kerning first=87 second=46 amount=-3 +kerning first=87 second=44 amount=-3 +kerning first=87 second=59 amount=-2 +kerning first=87 second=58 amount=-1 +kerning first=88 second=97 amount=-1 +kerning first=88 second=101 amount=-2 +kerning first=88 second=111 amount=-1 +kerning first=88 second=117 amount=-2 +kerning first=88 second=121 amount=-1 +kerning first=89 second=100 amount=-3 +kerning first=89 second=101 amount=-3 +kerning first=89 second=105 amount=-1 +kerning first=89 second=112 amount=-3 +kerning first=89 second=117 amount=-3 +kerning first=89 second=118 amount=-2 +kerning first=89 second=46 amount=-4 +kerning first=89 second=44 amount=-5 +kerning first=89 second=59 amount=-3 +kerning first=89 second=58 amount=-2 +kerning first=97 second=99 amount=-1 +kerning first=97 second=100 amount=-1 +kerning first=97 second=101 amount=-1 +kerning first=97 second=103 amount=-1 +kerning first=97 second=112 amount=-1 +kerning first=97 second=102 amount=-1 +kerning first=97 second=116 amount=-1 +kerning first=97 second=117 amount=-1 +kerning first=97 second=118 amount=-1 +kerning first=97 second=119 amount=-1 +kerning first=97 second=121 amount=-1 +kerning first=97 second=112 amount=-1 +kerning first=98 second=108 amount=-1 +kerning first=98 second=114 amount=-1 +kerning first=98 second=117 amount=-1 +kerning first=98 second=121 amount=-2 +kerning first=98 second=46 amount=-2 +kerning first=98 second=44 amount=-2 +kerning first=99 second=97 amount=-1 +kerning first=99 second=104 amount=-1 +kerning first=99 second=107 amount=-1 +kerning first=100 second=97 amount=-1 +kerning first=100 second=99 amount=-1 +kerning first=100 second=101 amount=-1 +kerning first=100 second=103 amount=-1 +kerning first=100 second=111 amount=-1 +kerning first=100 second=116 amount=-1 +kerning first=100 second=117 amount=-1 +kerning first=100 second=118 amount=-1 +kerning first=100 second=119 amount=-1 +kerning first=100 second=121 amount=-1 +kerning first=100 second=46 amount=-1 +kerning first=100 second=44 amount=-1 +kerning first=101 second=97 amount=-1 +kerning first=101 second=105 amount=-1 +kerning first=101 second=108 amount=-1 +kerning first=101 second=109 amount=-1 +kerning first=101 second=110 amount=-1 +kerning first=101 second=112 amount=-1 +kerning first=101 second=114 amount=-1 +kerning first=101 second=116 amount=-1 +kerning first=101 second=117 amount=-1 +kerning first=101 second=118 amount=-1 +kerning first=101 second=119 amount=-1 +kerning first=101 second=121 amount=-1 +kerning first=101 second=46 amount=-2 +kerning first=101 second=44 amount=-2 +kerning first=102 second=97 amount=-2 +kerning first=102 second=101 amount=-3 +kerning first=102 second=102 amount=-2 +kerning first=102 second=105 amount=-1 +kerning first=102 second=108 amount=-1 +kerning first=102 second=111 amount=-2 +kerning first=102 second=46 amount=-4 +kerning first=102 second=44 amount=-4 +kerning first=103 second=97 amount=-1 +kerning first=103 second=101 amount=-1 +kerning first=103 second=104 amount=-1 +kerning first=103 second=108 amount=-1 +kerning first=103 second=111 amount=-1 +kerning first=103 second=103 amount=-1 +kerning first=103 second=46 amount=-1 +kerning first=103 second=44 amount=-2 +kerning first=104 second=99 amount=-1 +kerning first=104 second=100 amount=-1 +kerning first=104 second=101 amount=-1 +kerning first=104 second=103 amount=-1 +kerning first=104 second=111 amount=-1 +kerning first=104 second=112 amount=-1 +kerning first=104 second=116 amount=-2 +kerning first=104 second=117 amount=-1 +kerning first=104 second=118 amount=-2 +kerning first=104 second=119 amount=-2 +kerning first=104 second=121 amount=-2 +kerning first=105 second=99 amount=-1 +kerning first=105 second=100 amount=-1 +kerning first=105 second=101 amount=-1 +kerning first=105 second=103 amount=-1 +kerning first=105 second=111 amount=-1 +kerning first=105 second=112 amount=-1 +kerning first=105 second=116 amount=-1 +kerning first=105 second=117 amount=-1 +kerning first=105 second=118 amount=-1 +kerning first=106 second=97 amount=-1 +kerning first=106 second=101 amount=-1 +kerning first=106 second=111 amount=-1 +kerning first=106 second=117 amount=-1 +kerning first=106 second=46 amount=-1 +kerning first=106 second=44 amount=-1 +kerning first=107 second=97 amount=-1 +kerning first=107 second=99 amount=-1 +kerning first=107 second=100 amount=-2 +kerning first=107 second=101 amount=-2 +kerning first=107 second=103 amount=-1 +kerning first=107 second=111 amount=-1 +kerning first=108 second=97 amount=-1 +kerning first=108 second=99 amount=-1 +kerning first=108 second=100 amount=-1 +kerning first=108 second=101 amount=-1 +kerning first=108 second=102 amount=-1 +kerning first=108 second=103 amount=-1 +kerning first=108 second=111 amount=-1 +kerning first=108 second=112 amount=-1 +kerning first=108 second=113 amount=-1 +kerning first=108 second=117 amount=-1 +kerning first=108 second=118 amount=-1 +kerning first=108 second=119 amount=-1 +kerning first=108 second=121 amount=-1 +kerning first=109 second=97 amount=-1 +kerning first=109 second=99 amount=-1 +kerning first=109 second=100 amount=-1 +kerning first=109 second=101 amount=-1 +kerning first=109 second=103 amount=-1 +kerning first=109 second=110 amount=-1 +kerning first=109 second=111 amount=-1 +kerning first=109 second=112 amount=-1 +kerning first=109 second=116 amount=-1 +kerning first=109 second=117 amount=-1 +kerning first=109 second=118 amount=-1 +kerning first=109 second=121 amount=-1 +kerning first=110 second=99 amount=-1 +kerning first=110 second=100 amount=-1 +kerning first=110 second=101 amount=-1 +kerning first=110 second=103 amount=-1 +kerning first=110 second=111 amount=-1 +kerning first=110 second=112 amount=-1 +kerning first=110 second=116 amount=-2 +kerning first=110 second=117 amount=-1 +kerning first=110 second=118 amount=-2 +kerning first=110 second=119 amount=-2 +kerning first=110 second=121 amount=-2 +kerning first=111 second=98 amount=-1 +kerning first=111 second=102 amount=-1 +kerning first=111 second=104 amount=-1 +kerning first=111 second=106 amount=-2 +kerning first=111 second=107 amount=-1 +kerning first=111 second=108 amount=-1 +kerning first=111 second=109 amount=-1 +kerning first=111 second=110 amount=-1 +kerning first=111 second=112 amount=-1 +kerning first=111 second=114 amount=-1 +kerning first=111 second=117 amount=-1 +kerning first=111 second=118 amount=-1 +kerning first=111 second=119 amount=-1 +kerning first=111 second=120 amount=-1 +kerning first=111 second=121 amount=-1 +kerning first=111 second=46 amount=-1 +kerning first=111 second=44 amount=-2 +kerning first=112 second=97 amount=-1 +kerning first=112 second=104 amount=-1 +kerning first=112 second=105 amount=-1 +kerning first=112 second=108 amount=-1 +kerning first=112 second=112 amount=-1 +kerning first=112 second=117 amount=-1 +kerning first=112 second=46 amount=-1 +kerning first=112 second=44 amount=-2 +kerning first=113 second=117 amount=-1 +kerning first=116 second=46 amount=-1 +kerning first=114 second=97 amount=-1 +kerning first=114 second=100 amount=-2 +kerning first=114 second=101 amount=-2 +kerning first=114 second=103 amount=-1 +kerning first=114 second=107 amount=-1 +kerning first=114 second=108 amount=-1 +kerning first=114 second=109 amount=-1 +kerning first=114 second=110 amount=-1 +kerning first=114 second=111 amount=-1 +kerning first=114 second=113 amount=-2 +kerning first=114 second=114 amount=-1 +kerning first=114 second=116 amount=-1 +kerning first=114 second=118 amount=-1 +kerning first=114 second=121 amount=-1 +kerning first=114 second=46 amount=-3 +kerning first=114 second=44 amount=-4 +kerning first=115 second=104 amount=-1 +kerning first=115 second=116 amount=-1 +kerning first=115 second=117 amount=-1 +kerning first=115 second=46 amount=-1 +kerning first=115 second=44 amount=-2 +kerning first=116 second=100 amount=-2 +kerning first=116 second=97 amount=-1 +kerning first=116 second=101 amount=-2 +kerning first=116 second=111 amount=-1 +kerning first=116 second=46 amount=-1 +kerning first=116 second=44 amount=-1 +kerning first=117 second=97 amount=-1 +kerning first=117 second=99 amount=-1 +kerning first=117 second=100 amount=-1 +kerning first=117 second=101 amount=-1 +kerning first=117 second=103 amount=-1 +kerning first=117 second=111 amount=-1 +kerning first=117 second=112 amount=-1 +kerning first=117 second=113 amount=-1 +kerning first=117 second=116 amount=-1 +kerning first=117 second=118 amount=-1 +kerning first=117 second=119 amount=-1 +kerning first=117 second=121 amount=-1 +kerning first=118 second=97 amount=-1 +kerning first=118 second=98 amount=-1 +kerning first=118 second=99 amount=-1 +kerning first=118 second=100 amount=-2 +kerning first=118 second=101 amount=-2 +kerning first=118 second=103 amount=-1 +kerning first=118 second=111 amount=-1 +kerning first=118 second=118 amount=-1 +kerning first=118 second=121 amount=-1 +kerning first=118 second=46 amount=-2 +kerning first=118 second=44 amount=-3 +kerning first=119 second=97 amount=-1 +kerning first=119 second=120 amount=-1 +kerning first=119 second=100 amount=-2 +kerning first=119 second=101 amount=-2 +kerning first=119 second=103 amount=-1 +kerning first=119 second=104 amount=-1 +kerning first=119 second=111 amount=-1 +kerning first=119 second=46 amount=-2 +kerning first=119 second=44 amount=-3 +kerning first=120 second=97 amount=-1 +kerning first=120 second=101 amount=-2 +kerning first=120 second=111 amount=-1 +kerning first=121 second=46 amount=-2 +kerning first=121 second=44 amount=-3 +kerning first=121 second=97 amount=-1 +kerning first=121 second=99 amount=-1 +kerning first=121 second=100 amount=-2 +kerning first=121 second=101 amount=-2 +kerning first=121 second=111 amount=-1 +kerning first=117 second=109 amount=-1 +kerning first=84 second=104 amount=-1 +kerning first=118 second=101 amount=-2 +kerning first=119 second=110 amount=-1 +kerning first=112 second=115 amount=-1 +kerning first=76 second=97 amount=-2 +kerning first=117 second=105 amount=-1 +kerning first=98 second=101 amount=-1 +kerning first=99 second=111 amount=-1 +kerning first=102 second=103 amount=-2 +kerning first=118 second=119 amount=-1 +kerning first=120 second=121 amount=-1 +kerning first=121 second=122 amount=-1 +kerning first=119 second=119 amount=-1 +kerning first=99 second=101 amount=-1 +kerning first=101 second=115 amount=-1 +kerning first=101 second=102 amount=-1 +kerning first=98 second=97 amount=-1 +kerning first=116 second=104 amount=-1 +kerning first=116 second=105 amount=-1 +kerning first=101 second=101 amount=-1 +kerning first=104 second=97 amount=-1 +kerning first=111 second=101 amount=-1 +kerning first=119 second=105 amount=-1 +kerning first=88 second=89 amount=-1 +kerning first=89 second=90 amount=-1 +kerning first=82 second=83 amount=-1 +kerning first=75 second=76 amount=-2 +kerning first=101 second=100 amount=-1 +kerning first=116 second=111 amount=-1 +kerning first=87 second=104 amount=-1 +kerning first=107 second=110 amount=-2 +kerning first=119 second=115 amount=-1 +kerning first=116 second=114 amount=-1 +kerning first=102 second=114 amount=-2 +kerning first=65 second=110 amount=-1 +kerning first=116 second=116 amount=-1 +kerning first=66 second=67 amount=-1 +kerning first=67 second=68 amount=-1 +kerning first=65 second=66 amount=-1 +kerning first=89 second=111 amount=-2 +kerning first=102 second=117 amount=-2 +kerning first=67 second=111 amount=-1 +kerning first=116 second=115 amount=-1 +kerning first=111 second=111 amount=-1 +kerning first=68 second=111 amount=-1 +kerning first=101 second=97 amount=-1 +kerning first=76 second=111 amount=-2 +kerning first=115 second=105 amount=-1 +kerning first=111 second=116 amount=-1 +kerning first=111 second=103 amount=-1 +kerning first=82 second=97 amount=-1 +kerning first=101 second=99 amount=-1 +kerning first=66 second=111 amount=-1 +kerning first=111 second=99 amount=-1 +kerning first=115 second=111 amount=-1 +kerning first=83 second=119 amount=-2 +kerning first=66 second=101 amount=-1 +kerning first=99 second=116 amount=-1 +kerning first=98 second=106 amount=-3 +kerning first=115 second=101 amount=-1 +kerning first=121 second=119 amount=-1 +kerning first=111 second=97 amount=-1 +kerning first=68 second=88 amount=-2 +kerning first=101 second=98 amount=-1 +kerning first=115 second=119 amount=-1 +kerning first=97 second=120 amount=-1 +kerning first=73 second=110 amount=-1 +kerning first=73 second=74 amount=-1 +kerning first=116 second=112 amount=-1 +kerning first=104 second=105 amount=-1 +kerning first=105 second=115 amount=-1 +kerning first=98 second=99 amount=-1 +kerning first=115 second=112 amount=-1 +kerning first=100 second=105 amount=-1 +kerning first=105 second=106 amount=-1 +kerning first=108 second=109 amount=-1 +kerning first=107 second=108 amount=-1 +kerning first=108 second=105 amount=-1 +kerning first=112 second=113 amount=-1 +kerning first=108 second=108 amount=-1 +kerning first=49 second=50 amount=-1 +kerning first=106 second=107 amount=-1 +kerning first=117 second=110 amount=-1 +kerning first=113 second=114 amount=-1 +kerning first=116 second=117 amount=-1 +kerning first=114 second=115 amount=-1 +kerning first=117 second=114 amount=-1 +kerning first=73 second=112 amount=-1 +kerning first=79 second=112 amount=-1 +kerning first=101 second=103 amount=-1 diff --git a/assets/skins/neon/skin/font-pressed-export.fnt b/assets/skins/neon/skin/font-pressed-export.fnt new file mode 100644 index 0000000..eb5509d --- /dev/null +++ b/assets/skins/neon/skin/font-pressed-export.fnt @@ -0,0 +1,710 @@ +info face="font-pressed-export" size=32 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=1,1 +common lineHeight=22 base=22 scaleW=142 scaleH=144 pages=1 packed=0 alphaChnl=1 redChnl=0 greenChnl=0 blueChnl=0 +page id=0 file="font-pressed-export.png" +chars count=98 +char id=33 x=133 y=101 width=7 height=16 xoffset=0 yoffset=6 xadvance=7 page=0 chnl=0 letter="!" +char id=34 x=123 y=132 width=9 height=10 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter=""" +char id=35 x=16 y=68 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="#" +char id=36 x=74 y=98 width=12 height=18 xoffset=0 yoffset=5 xadvance=12 page=0 chnl=0 letter="$" +char id=37 x=0 y=0 width=17 height=16 xoffset=0 yoffset=6 xadvance=17 page=0 chnl=0 letter="%" +char id=38 x=16 y=100 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="&" +char id=39 x=133 y=0 width=7 height=9 xoffset=0 yoffset=6 xadvance=7 page=0 chnl=0 letter="'" +char id=40 x=113 y=115 width=9 height=19 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter="(" +char id=41 x=124 y=61 width=9 height=19 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter=")" +char id=42 x=60 y=132 width=10 height=10 xoffset=0 yoffset=6 xadvance=10 page=0 chnl=0 letter="*" +char id=43 x=74 y=68 width=12 height=12 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="+" +char id=44 x=114 y=20 width=8 height=9 xoffset=0 yoffset=15 xadvance=8 page=0 chnl=0 letter="," +char id=45 x=27 y=136 width=11 height=7 xoffset=0 yoffset=12 xadvance=11 page=0 chnl=0 letter="-" +char id=46 x=124 y=81 width=7 height=8 xoffset=0 yoffset=14 xadvance=7 page=0 chnl=0 letter="." +char id=47 x=113 y=61 width=10 height=16 xoffset=0 yoffset=6 xadvance=10 page=0 chnl=0 letter="/" +char id=48 x=74 y=81 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="0" +char id=49 x=123 y=115 width=9 height=16 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter="1" +char id=50 x=75 y=34 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="2" +char id=51 x=76 y=17 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="3" +char id=52 x=60 y=67 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="4" +char id=53 x=88 y=34 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="5" +char id=54 x=62 y=17 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="6" +char id=55 x=60 y=84 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="7" +char id=56 x=100 y=111 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="8" +char id=57 x=60 y=115 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="9" +char id=58 x=134 y=44 width=7 height=13 xoffset=0 yoffset=9 xadvance=7 page=0 chnl=0 letter=":" +char id=59 x=125 y=40 width=8 height=15 xoffset=0 yoffset=9 xadvance=8 page=0 chnl=0 letter=";" +char id=60 x=100 y=128 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="<" +char id=61 x=46 y=130 width=13 height=10 xoffset=0 yoffset=10 xadvance=13 page=0 chnl=0 letter="=" +char id=62 x=60 y=101 width=13 height=13 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=0 letter=">" +char id=63 x=102 y=13 width=11 height=16 xoffset=0 yoffset=6 xadvance=11 page=0 chnl=0 letter="?" +char id=64 x=0 y=85 width=15 height=16 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=0 letter="@" +char id=65 x=16 y=117 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="A" +char id=66 x=18 y=0 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="B" +char id=67 x=31 y=85 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="C" +char id=68 x=18 y=17 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="D" +char id=69 x=89 y=17 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="E" +char id=70 x=89 y=0 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="F" +char id=71 x=16 y=51 width=15 height=16 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=0 letter="G" +char id=72 x=32 y=34 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="H" +char id=73 x=134 y=27 width=7 height=16 xoffset=0 yoffset=6 xadvance=7 page=0 chnl=0 letter="I" +char id=74 x=87 y=113 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="J" +char id=75 x=32 y=51 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="K" +char id=76 x=48 y=17 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="L" +char id=77 x=0 y=34 width=16 height=16 xoffset=0 yoffset=6 xadvance=16 page=0 chnl=0 letter="M" +char id=78 x=17 y=34 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="N" +char id=79 x=0 y=68 width=15 height=16 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=0 letter="O" +char id=80 x=76 y=0 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="P" +char id=81 x=0 y=51 width=15 height=16 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=0 letter="Q" +char id=82 x=74 y=51 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="R" +char id=83 x=62 y=0 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="S" +char id=84 x=31 y=68 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="T" +char id=85 x=31 y=102 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="U" +char id=86 x=33 y=0 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="V" +char id=87 x=0 y=17 width=17 height=16 xoffset=0 yoffset=6 xadvance=17 page=0 chnl=0 letter="W" +char id=88 x=33 y=17 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="X" +char id=89 x=31 y=119 width=14 height=16 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=0 letter="Y" +char id=90 x=61 y=34 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="Z" +char id=91 x=113 y=95 width=9 height=19 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter="[" +char id=92 x=113 y=30 width=11 height=16 xoffset=0 yoffset=6 xadvance=11 page=0 chnl=0 letter="\" +char id=93 x=133 y=81 width=8 height=19 xoffset=0 yoffset=6 xadvance=8 page=0 chnl=0 letter="]" +char id=94 x=102 y=0 width=11 height=12 xoffset=0 yoffset=6 xadvance=11 page=0 chnl=0 letter="^" +char id=95 x=0 y=136 width=13 height=7 xoffset=0 yoffset=17 xadvance=13 page=0 chnl=0 letter="_" +char id=96 x=71 y=134 width=8 height=8 xoffset=0 yoffset=6 xadvance=8 page=0 chnl=0 letter="`" +char id=97 x=100 y=97 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="a" +char id=98 x=48 y=0 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="b" +char id=99 x=101 y=34 width=11 height=13 xoffset=0 yoffset=9 xadvance=11 page=0 chnl=0 letter="c" +char id=100 x=47 y=34 width=13 height=16 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=0 letter="d" +char id=101 x=46 y=116 width=13 height=13 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=0 letter="e" +char id=102 x=101 y=48 width=11 height=16 xoffset=0 yoffset=6 xadvance=11 page=0 chnl=0 letter="f" +char id=103 x=46 y=83 width=13 height=16 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=0 letter="g" +char id=104 x=74 y=117 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="h" +char id=105 x=134 y=10 width=7 height=16 xoffset=0 yoffset=6 xadvance=7 page=0 chnl=0 letter="i" +char id=106 x=123 y=95 width=9 height=19 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter="j" +char id=107 x=87 y=96 width=12 height=16 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=0 letter="k" +char id=108 x=133 y=118 width=7 height=16 xoffset=0 yoffset=6 xadvance=7 page=0 chnl=0 letter="l" +char id=109 x=0 y=116 width=15 height=14 xoffset=0 yoffset=8 xadvance=15 page=0 chnl=0 letter="m" +char id=110 x=46 y=68 width=13 height=14 xoffset=0 yoffset=8 xadvance=13 page=0 chnl=0 letter="n" +char id=111 x=100 y=83 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="o" +char id=112 x=46 y=100 width=13 height=15 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=0 letter="p" +char id=113 x=47 y=51 width=13 height=15 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=0 letter="q" +char id=114 x=88 y=51 width=12 height=14 xoffset=0 yoffset=8 xadvance=12 page=0 chnl=0 letter="r" +char id=115 x=113 y=47 width=11 height=13 xoffset=0 yoffset=9 xadvance=11 page=0 chnl=0 letter="s" +char id=116 x=113 y=78 width=10 height=16 xoffset=0 yoffset=6 xadvance=10 page=0 chnl=0 letter="t" +char id=117 x=61 y=51 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="u" +char id=118 x=87 y=68 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="v" +char id=119 x=0 y=102 width=15 height=13 xoffset=0 yoffset=9 xadvance=15 page=0 chnl=0 letter="w" +char id=120 x=87 y=82 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="x" +char id=121 x=100 y=66 width=12 height=16 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="y" +char id=122 x=87 y=130 width=12 height=13 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=0 letter="z" +char id=123 x=125 y=20 width=8 height=19 xoffset=0 yoffset=6 xadvance=8 page=0 chnl=0 letter="{" +char id=124 x=124 y=0 width=8 height=19 xoffset=0 yoffset=6 xadvance=8 page=0 chnl=0 letter="|" +char id=125 x=114 y=0 width=9 height=19 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0 letter="}" +char id=126 x=14 y=134 width=12 height=8 xoffset=0 yoffset=10 xadvance=12 page=0 chnl=0 letter="~" +char id=8226 x=113 y=135 width=8 height=8 xoffset=0 yoffset=10 xadvance=8 page=0 chnl=0 letter="•" +char id=169 x=16 y=85 width=14 height=14 xoffset=0 yoffset=7 xadvance=14 page=0 chnl=0 letter="©" +char id=32 x=0 y=0 width=0 height=0 xoffset=0 yoffset=0 xadvance=8 page=0 chnl=0 letter=" " +char id=9 x=0 y=0 width=0 height=0 xoffset=0 yoffset=0 xadvance=64 page=0 chnl=0 letter=" " + +kernings count=606 +kerning first=65 second=39 amount=-3 +kerning first=65 second=67 amount=-1 +kerning first=65 second=71 amount=-2 +kerning first=65 second=79 amount=-1 +kerning first=65 second=81 amount=-1 +kerning first=65 second=84 amount=-3 +kerning first=65 second=85 amount=-2 +kerning first=65 second=86 amount=-4 +kerning first=65 second=87 amount=-3 +kerning first=65 second=89 amount=-4 +kerning first=66 second=65 amount=-1 +kerning first=66 second=69 amount=-1 +kerning first=66 second=76 amount=-1 +kerning first=66 second=80 amount=-1 +kerning first=66 second=82 amount=-1 +kerning first=66 second=85 amount=-1 +kerning first=66 second=86 amount=-2 +kerning first=66 second=87 amount=-2 +kerning first=66 second=89 amount=-2 +kerning first=67 second=65 amount=-1 +kerning first=67 second=79 amount=-1 +kerning first=67 second=82 amount=-1 +kerning first=68 second=65 amount=-1 +kerning first=68 second=68 amount=-1 +kerning first=68 second=69 amount=-1 +kerning first=68 second=73 amount=-1 +kerning first=68 second=76 amount=-1 +kerning first=68 second=77 amount=-1 +kerning first=68 second=78 amount=-1 +kerning first=68 second=79 amount=-1 +kerning first=68 second=80 amount=-1 +kerning first=68 second=82 amount=-1 +kerning first=68 second=85 amount=-1 +kerning first=68 second=86 amount=-2 +kerning first=68 second=87 amount=-1 +kerning first=68 second=89 amount=-2 +kerning first=69 second=67 amount=-1 +kerning first=69 second=79 amount=-1 +kerning first=70 second=65 amount=-1 +kerning first=70 second=67 amount=-1 +kerning first=70 second=71 amount=-1 +kerning first=70 second=79 amount=-1 +kerning first=70 second=46 amount=-2 +kerning first=70 second=44 amount=-3 +kerning first=71 second=69 amount=-1 +kerning first=71 second=79 amount=-1 +kerning first=71 second=82 amount=-1 +kerning first=71 second=85 amount=-1 +kerning first=72 second=79 amount=-1 +kerning first=73 second=67 amount=-1 +kerning first=73 second=71 amount=-1 +kerning first=73 second=79 amount=-1 +kerning first=74 second=65 amount=-1 +kerning first=74 second=79 amount=-1 +kerning first=75 second=79 amount=-2 +kerning first=76 second=39 amount=-6 +kerning first=76 second=67 amount=-2 +kerning first=76 second=84 amount=-5 +kerning first=76 second=86 amount=-5 +kerning first=76 second=87 amount=-4 +kerning first=76 second=89 amount=-5 +kerning first=76 second=71 amount=-3 +kerning first=76 second=79 amount=-2 +kerning first=76 second=85 amount=-3 +kerning first=77 second=71 amount=-1 +kerning first=77 second=79 amount=-1 +kerning first=78 second=67 amount=-1 +kerning first=78 second=71 amount=-1 +kerning first=78 second=79 amount=-1 +kerning first=79 second=65 amount=-1 +kerning first=79 second=66 amount=-1 +kerning first=79 second=68 amount=-1 +kerning first=79 second=69 amount=-1 +kerning first=79 second=70 amount=-1 +kerning first=79 second=72 amount=-1 +kerning first=79 second=73 amount=-1 +kerning first=79 second=75 amount=-1 +kerning first=79 second=76 amount=-1 +kerning first=79 second=77 amount=-1 +kerning first=79 second=78 amount=-1 +kerning first=79 second=80 amount=-1 +kerning first=79 second=82 amount=-1 +kerning first=79 second=84 amount=-1 +kerning first=79 second=85 amount=-1 +kerning first=79 second=86 amount=-2 +kerning first=79 second=87 amount=-1 +kerning first=79 second=88 amount=-2 +kerning first=79 second=89 amount=-2 +kerning first=80 second=65 amount=-1 +kerning first=80 second=69 amount=-1 +kerning first=80 second=76 amount=-1 +kerning first=80 second=79 amount=-1 +kerning first=80 second=80 amount=-1 +kerning first=80 second=85 amount=-1 +kerning first=80 second=89 amount=-1 +kerning first=80 second=46 amount=-2 +kerning first=80 second=44 amount=-3 +kerning first=80 second=59 amount=-2 +kerning first=80 second=58 amount=-1 +kerning first=81 second=85 amount=-1 +kerning first=82 second=67 amount=-1 +kerning first=82 second=71 amount=-1 +kerning first=82 second=89 amount=-1 +kerning first=82 second=84 amount=-1 +kerning first=82 second=85 amount=-1 +kerning first=82 second=86 amount=-1 +kerning first=82 second=87 amount=-1 +kerning first=82 second=89 amount=-1 +kerning first=83 second=73 amount=-1 +kerning first=83 second=77 amount=-1 +kerning first=83 second=84 amount=-2 +kerning first=83 second=85 amount=-1 +kerning first=84 second=65 amount=-4 +kerning first=84 second=67 amount=-2 +kerning first=84 second=79 amount=-2 +kerning first=85 second=65 amount=-1 +kerning first=85 second=67 amount=-1 +kerning first=85 second=71 amount=-1 +kerning first=85 second=79 amount=-1 +kerning first=85 second=83 amount=-1 +kerning first=86 second=65 amount=-3 +kerning first=86 second=67 amount=-2 +kerning first=86 second=71 amount=-2 +kerning first=86 second=79 amount=-2 +kerning first=86 second=83 amount=-1 +kerning first=87 second=65 amount=-2 +kerning first=87 second=67 amount=-1 +kerning first=87 second=71 amount=-2 +kerning first=87 second=79 amount=-1 +kerning first=89 second=65 amount=-4 +kerning first=89 second=67 amount=-2 +kerning first=89 second=79 amount=-2 +kerning first=89 second=83 amount=-1 +kerning first=90 second=79 amount=-2 +kerning first=65 second=99 amount=-1 +kerning first=65 second=100 amount=-2 +kerning first=65 second=101 amount=-2 +kerning first=65 second=103 amount=-1 +kerning first=65 second=111 amount=-1 +kerning first=65 second=112 amount=-1 +kerning first=65 second=113 amount=-2 +kerning first=65 second=116 amount=-2 +kerning first=65 second=117 amount=-2 +kerning first=65 second=118 amount=-2 +kerning first=65 second=119 amount=-2 +kerning first=65 second=121 amount=-2 +kerning first=66 second=98 amount=-1 +kerning first=66 second=105 amount=-1 +kerning first=66 second=107 amount=-1 +kerning first=66 second=108 amount=-1 +kerning first=66 second=114 amount=-1 +kerning first=66 second=117 amount=-1 +kerning first=66 second=121 amount=-2 +kerning first=66 second=46 amount=-1 +kerning first=66 second=44 amount=-2 +kerning first=67 second=97 amount=-1 +kerning first=67 second=114 amount=-1 +kerning first=67 second=46 amount=-1 +kerning first=67 second=44 amount=-2 +kerning first=68 second=97 amount=-1 +kerning first=68 second=46 amount=-2 +kerning first=68 second=44 amount=-3 +kerning first=69 second=117 amount=-1 +kerning first=69 second=118 amount=-1 +kerning first=70 second=97 amount=-1 +kerning first=70 second=101 amount=-1 +kerning first=70 second=105 amount=-1 +kerning first=70 second=111 amount=-1 +kerning first=70 second=114 amount=-1 +kerning first=70 second=116 amount=-1 +kerning first=70 second=117 amount=-1 +kerning first=70 second=121 amount=-1 +kerning first=70 second=46 amount=-2 +kerning first=70 second=44 amount=-3 +kerning first=70 second=59 amount=-2 +kerning first=70 second=58 amount=-1 +kerning first=71 second=117 amount=-1 +kerning first=72 second=101 amount=-1 +kerning first=72 second=111 amount=-1 +kerning first=72 second=117 amount=-1 +kerning first=72 second=121 amount=-1 +kerning first=73 second=99 amount=-1 +kerning first=73 second=100 amount=-1 +kerning first=73 second=113 amount=-1 +kerning first=73 second=111 amount=-1 +kerning first=73 second=116 amount=-1 +kerning first=74 second=97 amount=-1 +kerning first=74 second=101 amount=-1 +kerning first=74 second=111 amount=-1 +kerning first=74 second=117 amount=-1 +kerning first=74 second=46 amount=-2 +kerning first=74 second=44 amount=-2 +kerning first=75 second=101 amount=-3 +kerning first=75 second=111 amount=-2 +kerning first=75 second=117 amount=-2 +kerning first=76 second=117 amount=-3 +kerning first=76 second=121 amount=-2 +kerning first=77 second=97 amount=-1 +kerning first=77 second=99 amount=-1 +kerning first=77 second=100 amount=-1 +kerning first=77 second=101 amount=-1 +kerning first=77 second=111 amount=-1 +kerning first=78 second=117 amount=-1 +kerning first=78 second=97 amount=-1 +kerning first=78 second=101 amount=-1 +kerning first=78 second=105 amount=-1 +kerning first=78 second=111 amount=-1 +kerning first=78 second=117 amount=-1 +kerning first=78 second=46 amount=-1 +kerning first=78 second=44 amount=-2 +kerning first=79 second=97 amount=-1 +kerning first=79 second=98 amount=-1 +kerning first=79 second=104 amount=-1 +kerning first=79 second=107 amount=-1 +kerning first=79 second=108 amount=-1 +kerning first=79 second=46 amount=-1 +kerning first=79 second=44 amount=-2 +kerning first=80 second=97 amount=-1 +kerning first=80 second=101 amount=-1 +kerning first=80 second=111 amount=-1 +kerning first=82 second=100 amount=-2 +kerning first=82 second=101 amount=-2 +kerning first=82 second=111 amount=-1 +kerning first=82 second=116 amount=-1 +kerning first=82 second=117 amount=-1 +kerning first=83 second=105 amount=-1 +kerning first=83 second=112 amount=-1 +kerning first=83 second=117 amount=-1 +kerning first=83 second=46 amount=-2 +kerning first=83 second=44 amount=-2 +kerning first=84 second=97 amount=-2 +kerning first=84 second=99 amount=-2 +kerning first=84 second=101 amount=-3 +kerning first=84 second=105 amount=-1 +kerning first=84 second=111 amount=-2 +kerning first=84 second=114 amount=-3 +kerning first=84 second=115 amount=-2 +kerning first=84 second=117 amount=-3 +kerning first=84 second=119 amount=-2 +kerning first=84 second=121 amount=-2 +kerning first=84 second=46 amount=-5 +kerning first=84 second=44 amount=-5 +kerning first=84 second=59 amount=-3 +kerning first=84 second=58 amount=-2 +kerning first=85 second=97 amount=-1 +kerning first=85 second=103 amount=-1 +kerning first=85 second=109 amount=-1 +kerning first=85 second=110 amount=-1 +kerning first=85 second=112 amount=-1 +kerning first=85 second=115 amount=-1 +kerning first=85 second=46 amount=-1 +kerning first=85 second=44 amount=-2 +kerning first=86 second=97 amount=-2 +kerning first=86 second=101 amount=-3 +kerning first=86 second=105 amount=-1 +kerning first=86 second=111 amount=-2 +kerning first=86 second=114 amount=-2 +kerning first=86 second=117 amount=-2 +kerning first=86 second=46 amount=-4 +kerning first=86 second=44 amount=-4 +kerning first=86 second=59 amount=-3 +kerning first=86 second=58 amount=-2 +kerning first=87 second=100 amount=-2 +kerning first=87 second=105 amount=-1 +kerning first=87 second=109 amount=-1 +kerning first=87 second=114 amount=-2 +kerning first=87 second=116 amount=-1 +kerning first=87 second=117 amount=-2 +kerning first=87 second=121 amount=-1 +kerning first=87 second=46 amount=-3 +kerning first=87 second=44 amount=-3 +kerning first=87 second=59 amount=-2 +kerning first=87 second=58 amount=-1 +kerning first=88 second=97 amount=-1 +kerning first=88 second=101 amount=-2 +kerning first=88 second=111 amount=-1 +kerning first=88 second=117 amount=-2 +kerning first=88 second=121 amount=-1 +kerning first=89 second=100 amount=-3 +kerning first=89 second=101 amount=-3 +kerning first=89 second=105 amount=-1 +kerning first=89 second=112 amount=-3 +kerning first=89 second=117 amount=-3 +kerning first=89 second=118 amount=-2 +kerning first=89 second=46 amount=-4 +kerning first=89 second=44 amount=-5 +kerning first=89 second=59 amount=-3 +kerning first=89 second=58 amount=-2 +kerning first=97 second=99 amount=-1 +kerning first=97 second=100 amount=-1 +kerning first=97 second=101 amount=-1 +kerning first=97 second=103 amount=-1 +kerning first=97 second=112 amount=-1 +kerning first=97 second=102 amount=-1 +kerning first=97 second=116 amount=-1 +kerning first=97 second=117 amount=-1 +kerning first=97 second=118 amount=-1 +kerning first=97 second=119 amount=-1 +kerning first=97 second=121 amount=-1 +kerning first=97 second=112 amount=-1 +kerning first=98 second=108 amount=-1 +kerning first=98 second=114 amount=-1 +kerning first=98 second=117 amount=-1 +kerning first=98 second=121 amount=-2 +kerning first=98 second=46 amount=-2 +kerning first=98 second=44 amount=-2 +kerning first=99 second=97 amount=-1 +kerning first=99 second=104 amount=-1 +kerning first=99 second=107 amount=-1 +kerning first=100 second=97 amount=-1 +kerning first=100 second=99 amount=-1 +kerning first=100 second=101 amount=-1 +kerning first=100 second=103 amount=-1 +kerning first=100 second=111 amount=-1 +kerning first=100 second=116 amount=-1 +kerning first=100 second=117 amount=-1 +kerning first=100 second=118 amount=-1 +kerning first=100 second=119 amount=-1 +kerning first=100 second=121 amount=-1 +kerning first=100 second=46 amount=-1 +kerning first=100 second=44 amount=-1 +kerning first=101 second=97 amount=-1 +kerning first=101 second=105 amount=-1 +kerning first=101 second=108 amount=-1 +kerning first=101 second=109 amount=-1 +kerning first=101 second=110 amount=-1 +kerning first=101 second=112 amount=-1 +kerning first=101 second=114 amount=-1 +kerning first=101 second=116 amount=-1 +kerning first=101 second=117 amount=-1 +kerning first=101 second=118 amount=-1 +kerning first=101 second=119 amount=-1 +kerning first=101 second=121 amount=-1 +kerning first=101 second=46 amount=-2 +kerning first=101 second=44 amount=-2 +kerning first=102 second=97 amount=-2 +kerning first=102 second=101 amount=-3 +kerning first=102 second=102 amount=-2 +kerning first=102 second=105 amount=-1 +kerning first=102 second=108 amount=-1 +kerning first=102 second=111 amount=-2 +kerning first=102 second=46 amount=-4 +kerning first=102 second=44 amount=-4 +kerning first=103 second=97 amount=-1 +kerning first=103 second=101 amount=-1 +kerning first=103 second=104 amount=-1 +kerning first=103 second=108 amount=-1 +kerning first=103 second=111 amount=-1 +kerning first=103 second=103 amount=-1 +kerning first=103 second=46 amount=-1 +kerning first=103 second=44 amount=-2 +kerning first=104 second=99 amount=-1 +kerning first=104 second=100 amount=-1 +kerning first=104 second=101 amount=-1 +kerning first=104 second=103 amount=-1 +kerning first=104 second=111 amount=-1 +kerning first=104 second=112 amount=-1 +kerning first=104 second=116 amount=-2 +kerning first=104 second=117 amount=-1 +kerning first=104 second=118 amount=-2 +kerning first=104 second=119 amount=-2 +kerning first=104 second=121 amount=-2 +kerning first=105 second=99 amount=-1 +kerning first=105 second=100 amount=-1 +kerning first=105 second=101 amount=-1 +kerning first=105 second=103 amount=-1 +kerning first=105 second=111 amount=-1 +kerning first=105 second=112 amount=-1 +kerning first=105 second=116 amount=-1 +kerning first=105 second=117 amount=-1 +kerning first=105 second=118 amount=-1 +kerning first=106 second=97 amount=-1 +kerning first=106 second=101 amount=-1 +kerning first=106 second=111 amount=-1 +kerning first=106 second=117 amount=-1 +kerning first=106 second=46 amount=-1 +kerning first=106 second=44 amount=-1 +kerning first=107 second=97 amount=-1 +kerning first=107 second=99 amount=-1 +kerning first=107 second=100 amount=-2 +kerning first=107 second=101 amount=-2 +kerning first=107 second=103 amount=-1 +kerning first=107 second=111 amount=-1 +kerning first=108 second=97 amount=-1 +kerning first=108 second=99 amount=-1 +kerning first=108 second=100 amount=-1 +kerning first=108 second=101 amount=-1 +kerning first=108 second=102 amount=-1 +kerning first=108 second=103 amount=-1 +kerning first=108 second=111 amount=-1 +kerning first=108 second=112 amount=-1 +kerning first=108 second=113 amount=-1 +kerning first=108 second=117 amount=-1 +kerning first=108 second=118 amount=-1 +kerning first=108 second=119 amount=-1 +kerning first=108 second=121 amount=-1 +kerning first=109 second=97 amount=-1 +kerning first=109 second=99 amount=-1 +kerning first=109 second=100 amount=-1 +kerning first=109 second=101 amount=-1 +kerning first=109 second=103 amount=-1 +kerning first=109 second=110 amount=-1 +kerning first=109 second=111 amount=-1 +kerning first=109 second=112 amount=-1 +kerning first=109 second=116 amount=-1 +kerning first=109 second=117 amount=-1 +kerning first=109 second=118 amount=-1 +kerning first=109 second=121 amount=-1 +kerning first=110 second=99 amount=-1 +kerning first=110 second=100 amount=-1 +kerning first=110 second=101 amount=-1 +kerning first=110 second=103 amount=-1 +kerning first=110 second=111 amount=-1 +kerning first=110 second=112 amount=-1 +kerning first=110 second=116 amount=-2 +kerning first=110 second=117 amount=-1 +kerning first=110 second=118 amount=-2 +kerning first=110 second=119 amount=-2 +kerning first=110 second=121 amount=-2 +kerning first=111 second=98 amount=-1 +kerning first=111 second=102 amount=-1 +kerning first=111 second=104 amount=-1 +kerning first=111 second=106 amount=-2 +kerning first=111 second=107 amount=-1 +kerning first=111 second=108 amount=-1 +kerning first=111 second=109 amount=-1 +kerning first=111 second=110 amount=-1 +kerning first=111 second=112 amount=-1 +kerning first=111 second=114 amount=-1 +kerning first=111 second=117 amount=-1 +kerning first=111 second=118 amount=-1 +kerning first=111 second=119 amount=-1 +kerning first=111 second=120 amount=-1 +kerning first=111 second=121 amount=-1 +kerning first=111 second=46 amount=-1 +kerning first=111 second=44 amount=-2 +kerning first=112 second=97 amount=-1 +kerning first=112 second=104 amount=-1 +kerning first=112 second=105 amount=-1 +kerning first=112 second=108 amount=-1 +kerning first=112 second=112 amount=-1 +kerning first=112 second=117 amount=-1 +kerning first=112 second=46 amount=-1 +kerning first=112 second=44 amount=-2 +kerning first=113 second=117 amount=-1 +kerning first=116 second=46 amount=-1 +kerning first=114 second=97 amount=-1 +kerning first=114 second=100 amount=-2 +kerning first=114 second=101 amount=-2 +kerning first=114 second=103 amount=-1 +kerning first=114 second=107 amount=-1 +kerning first=114 second=108 amount=-1 +kerning first=114 second=109 amount=-1 +kerning first=114 second=110 amount=-1 +kerning first=114 second=111 amount=-1 +kerning first=114 second=113 amount=-2 +kerning first=114 second=114 amount=-1 +kerning first=114 second=116 amount=-1 +kerning first=114 second=118 amount=-1 +kerning first=114 second=121 amount=-1 +kerning first=114 second=46 amount=-3 +kerning first=114 second=44 amount=-4 +kerning first=115 second=104 amount=-1 +kerning first=115 second=116 amount=-1 +kerning first=115 second=117 amount=-1 +kerning first=115 second=46 amount=-1 +kerning first=115 second=44 amount=-2 +kerning first=116 second=100 amount=-2 +kerning first=116 second=97 amount=-1 +kerning first=116 second=101 amount=-2 +kerning first=116 second=111 amount=-1 +kerning first=116 second=46 amount=-1 +kerning first=116 second=44 amount=-1 +kerning first=117 second=97 amount=-1 +kerning first=117 second=99 amount=-1 +kerning first=117 second=100 amount=-1 +kerning first=117 second=101 amount=-1 +kerning first=117 second=103 amount=-1 +kerning first=117 second=111 amount=-1 +kerning first=117 second=112 amount=-1 +kerning first=117 second=113 amount=-1 +kerning first=117 second=116 amount=-1 +kerning first=117 second=118 amount=-1 +kerning first=117 second=119 amount=-1 +kerning first=117 second=121 amount=-1 +kerning first=118 second=97 amount=-1 +kerning first=118 second=98 amount=-1 +kerning first=118 second=99 amount=-1 +kerning first=118 second=100 amount=-2 +kerning first=118 second=101 amount=-2 +kerning first=118 second=103 amount=-1 +kerning first=118 second=111 amount=-1 +kerning first=118 second=118 amount=-1 +kerning first=118 second=121 amount=-1 +kerning first=118 second=46 amount=-2 +kerning first=118 second=44 amount=-3 +kerning first=119 second=97 amount=-1 +kerning first=119 second=120 amount=-1 +kerning first=119 second=100 amount=-2 +kerning first=119 second=101 amount=-2 +kerning first=119 second=103 amount=-1 +kerning first=119 second=104 amount=-1 +kerning first=119 second=111 amount=-1 +kerning first=119 second=46 amount=-2 +kerning first=119 second=44 amount=-3 +kerning first=120 second=97 amount=-1 +kerning first=120 second=101 amount=-2 +kerning first=120 second=111 amount=-1 +kerning first=121 second=46 amount=-2 +kerning first=121 second=44 amount=-3 +kerning first=121 second=97 amount=-1 +kerning first=121 second=99 amount=-1 +kerning first=121 second=100 amount=-2 +kerning first=121 second=101 amount=-2 +kerning first=121 second=111 amount=-1 +kerning first=117 second=109 amount=-1 +kerning first=84 second=104 amount=-1 +kerning first=118 second=101 amount=-2 +kerning first=119 second=110 amount=-1 +kerning first=112 second=115 amount=-1 +kerning first=76 second=97 amount=-2 +kerning first=117 second=105 amount=-1 +kerning first=98 second=101 amount=-1 +kerning first=99 second=111 amount=-1 +kerning first=102 second=103 amount=-2 +kerning first=118 second=119 amount=-1 +kerning first=120 second=121 amount=-1 +kerning first=121 second=122 amount=-1 +kerning first=119 second=119 amount=-1 +kerning first=99 second=101 amount=-1 +kerning first=101 second=115 amount=-1 +kerning first=101 second=102 amount=-1 +kerning first=98 second=97 amount=-1 +kerning first=116 second=104 amount=-1 +kerning first=116 second=105 amount=-1 +kerning first=101 second=101 amount=-1 +kerning first=104 second=97 amount=-1 +kerning first=111 second=101 amount=-1 +kerning first=119 second=105 amount=-1 +kerning first=88 second=89 amount=-1 +kerning first=89 second=90 amount=-1 +kerning first=82 second=83 amount=-1 +kerning first=75 second=76 amount=-2 +kerning first=101 second=100 amount=-1 +kerning first=116 second=111 amount=-1 +kerning first=87 second=104 amount=-1 +kerning first=107 second=110 amount=-2 +kerning first=119 second=115 amount=-1 +kerning first=116 second=114 amount=-1 +kerning first=102 second=114 amount=-2 +kerning first=65 second=110 amount=-1 +kerning first=116 second=116 amount=-1 +kerning first=66 second=67 amount=-1 +kerning first=67 second=68 amount=-1 +kerning first=65 second=66 amount=-1 +kerning first=89 second=111 amount=-2 +kerning first=102 second=117 amount=-2 +kerning first=67 second=111 amount=-1 +kerning first=116 second=115 amount=-1 +kerning first=111 second=111 amount=-1 +kerning first=68 second=111 amount=-1 +kerning first=101 second=97 amount=-1 +kerning first=76 second=111 amount=-2 +kerning first=115 second=105 amount=-1 +kerning first=111 second=116 amount=-1 +kerning first=111 second=103 amount=-1 +kerning first=82 second=97 amount=-1 +kerning first=101 second=99 amount=-1 +kerning first=66 second=111 amount=-1 +kerning first=111 second=99 amount=-1 +kerning first=115 second=111 amount=-1 +kerning first=83 second=119 amount=-2 +kerning first=66 second=101 amount=-1 +kerning first=99 second=116 amount=-1 +kerning first=98 second=106 amount=-3 +kerning first=115 second=101 amount=-1 +kerning first=121 second=119 amount=-1 +kerning first=111 second=97 amount=-1 +kerning first=68 second=88 amount=-2 +kerning first=101 second=98 amount=-1 +kerning first=115 second=119 amount=-1 +kerning first=97 second=120 amount=-1 +kerning first=73 second=110 amount=-1 +kerning first=73 second=74 amount=-1 +kerning first=116 second=112 amount=-1 +kerning first=104 second=105 amount=-1 +kerning first=105 second=115 amount=-1 +kerning first=98 second=99 amount=-1 +kerning first=115 second=112 amount=-1 +kerning first=100 second=105 amount=-1 +kerning first=105 second=106 amount=-1 +kerning first=108 second=109 amount=-1 +kerning first=107 second=108 amount=-1 +kerning first=108 second=105 amount=-1 +kerning first=112 second=113 amount=-1 +kerning first=108 second=108 amount=-1 +kerning first=49 second=50 amount=-1 +kerning first=106 second=107 amount=-1 +kerning first=117 second=110 amount=-1 +kerning first=113 second=114 amount=-1 +kerning first=116 second=117 amount=-1 +kerning first=114 second=115 amount=-1 +kerning first=117 second=114 amount=-1 +kerning first=73 second=112 amount=-1 +kerning first=79 second=112 amount=-1 +kerning first=101 second=103 amount=-1 diff --git a/assets/skins/neon/skin/neon-ui.atlas b/assets/skins/neon/skin/neon-ui.atlas new file mode 100644 index 0000000..768a675 --- /dev/null +++ b/assets/skins/neon/skin/neon-ui.atlas @@ -0,0 +1,382 @@ + +neon-ui.png +size: 512,512 +format: RGBA8888 +filter: Linear,Linear +repeat: none +button + rotate: false + xy: 145, 41 + size: 46, 42 + split: 17, 17, 15, 16 + pad: 15, 15, 14, 14 + orig: 46, 42 + offset: 0, 0 + index: -1 +button-over + rotate: false + xy: 197, 141 + size: 46, 42 + split: 17, 17, 15, 16 + pad: 15, 15, 14, 14 + orig: 46, 42 + offset: 0, 0 + index: -1 +button-pressed + rotate: false + xy: 197, 97 + size: 46, 42 + split: 17, 17, 15, 16 + pad: 15, 15, 14, 14 + orig: 46, 42 + offset: 0, 0 + index: -1 +checkbox + rotate: false + xy: 222, 70 + size: 22, 22 + orig: 22, 22 + offset: 0, 0 + index: -1 +checkbox-over + rotate: false + xy: 222, 46 + size: 22, 22 + orig: 22, 22 + offset: 0, 0 + index: -1 +checkbox-pressed + rotate: false + xy: 219, 205 + size: 22, 22 + orig: 22, 22 + offset: 0, 0 + index: -1 +checkbox-pressed-over + rotate: false + xy: 245, 343 + size: 22, 22 + orig: 22, 22 + offset: 0, 0 + index: -1 +font-export + rotate: false + xy: 388, 394 + size: 116, 117 + orig: 116, 117 + offset: 0, 0 + index: -1 +font-over-export + rotate: false + xy: 1, 41 + size: 142, 144 + orig: 142, 144 + offset: 0, 0 + index: -1 +font-pressed-export + rotate: false + xy: 244, 367 + size: 142, 144 + orig: 142, 144 + offset: 0, 0 + index: -1 +list + rotate: false + xy: 1, 1 + size: 52, 38 + split: 18, 18, 0, 16 + pad: 14, 14, 0, 12 + orig: 52, 38 + offset: 0, 0 + index: -1 +minus + rotate: false + xy: 208, 345 + size: 18, 18 + orig: 18, 18 + offset: 0, 0 + index: -1 +plus + rotate: false + xy: 269, 347 + size: 18, 18 + orig: 18, 18 + offset: 0, 0 + index: -1 +progress-bar + rotate: false + xy: 496, 355 + size: 9, 37 + split: 0, 0, 0, 23 + pad: 0, 0, 0, 0 + orig: 9, 37 + offset: 0, 0 + index: -1 +progress-bar-big + rotate: false + xy: 1, 429 + size: 241, 82 + split: 50, 47, 0, 0 + pad: 17, 18, 0, 0 + orig: 241, 82 + offset: 0, 0 + index: -1 +progress-bar-big-knob + rotate: false + xy: 1, 345 + size: 205, 82 + orig: 205, 82 + offset: 0, 0 + index: -1 +progress-bar-knob + rotate: false + xy: 245, 146 + size: 1, 37 + split: 0, 0, 0, 36 + pad: 0, 0, 0, 0 + orig: 1, 37 + offset: 0, 0 + index: -1 +progress-bar-vertical + rotate: false + xy: 55, 1 + size: 37, 9 + split: 0, 20, 0, 0 + pad: 0, 0, 0, 0 + orig: 37, 9 + offset: 0, 0 + index: -1 +progress-bar-vertical-knob + rotate: false + xy: 197, 94 + size: 37, 1 + split: 0, 36, 0, 0 + pad: 0, 0, 0, 0 + orig: 37, 1 + offset: 0, 0 + index: -1 +radio + rotate: false + xy: 163, 15 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +radio-over + rotate: false + xy: 189, 13 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +radio-pressed + rotate: false + xy: 215, 13 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +scroll-horizontal + rotate: false + xy: 55, 12 + size: 44, 27 + split: 11, 11, 11, 11 + pad: 0, 0, 0, 0 + orig: 44, 27 + offset: 0, 0 + index: -1 +scroll-vertical + rotate: false + xy: 193, 39 + size: 27, 44 + split: 11, 11, 11, 11 + pad: 0, 0, 0, 0 + orig: 27, 44 + offset: 0, 0 + index: -1 +select-box + rotate: false + xy: 165, 185 + size: 52, 42 + split: 18, 22, 14, 21 + pad: 15, 23, 14, 14 + orig: 52, 42 + offset: 0, 0 + index: -1 +select-box-over + rotate: false + xy: 388, 350 + size: 52, 42 + split: 18, 22, 14, 21 + pad: 15, 23, 14, 14 + orig: 52, 42 + offset: 0, 0 + index: -1 +select-box-pressed + rotate: false + xy: 442, 350 + size: 52, 42 + split: 18, 22, 14, 21 + pad: 15, 23, 14, 14 + orig: 52, 42 + offset: 0, 0 + index: -1 +slider + rotate: false + xy: 228, 341 + size: 8, 22 + split: 2, 2, 10, 10 + pad: 0, 0, 0, 0 + orig: 8, 22 + offset: 0, 0 + index: -1 +slider-before + rotate: false + xy: 239, 405 + size: 1, 22 + split: 0, 0, 9, 9 + pad: 0, 0, 0, 0 + orig: 1, 22 + offset: 0, 0 + index: -1 +slider-knob + rotate: false + xy: 289, 355 + size: 10, 10 + orig: 10, 10 + offset: 0, 0 + index: -1 +slider-knob-pressed + rotate: false + xy: 301, 355 + size: 10, 10 + orig: 10, 10 + offset: 0, 0 + index: -1 +slider-vertical + rotate: false + xy: 219, 195 + size: 22, 8 + split: 10, 10, 2, 2 + pad: 0, 0, 0, 0 + orig: 22, 8 + offset: 0, 0 + index: -1 +slider-vertical-before + rotate: false + xy: 163, 12 + size: 22, 1 + split: 9, 9, 0, 0 + pad: 0, 0, 0, 0 + orig: 22, 1 + offset: 0, 0 + index: -1 +split-pane-horizontal + rotate: false + xy: 313, 356 + size: 1, 9 + orig: 1, 9 + offset: 0, 0 + index: -1 +split-pane-vertical + rotate: false + xy: 236, 94 + size: 9, 1 + orig: 9, 1 + offset: 0, 0 + index: -1 +textfield + rotate: false + xy: 219, 185 + size: 14, 8 + split: 3, 3, 0, 7 + pad: 4, 4, 0, 6 + orig: 14, 8 + offset: 0, 0 + index: -1 +textfield-login + rotate: false + xy: 208, 397 + size: 29, 30 + split: 18, 3, 0, 29 + pad: 20, 4, 0, 6 + orig: 29, 30 + offset: 0, 0 + index: -1 +textfield-login-selected + rotate: false + xy: 208, 365 + size: 29, 30 + split: 18, 3, 0, 29 + pad: 20, 4, 0, 6 + orig: 29, 30 + offset: 0, 0 + index: -1 +textfield-password + rotate: false + xy: 101, 9 + size: 29, 30 + split: 19, 3, 0, 29 + pad: 21, 4, 0, 6 + orig: 29, 30 + offset: 0, 0 + index: -1 +textfield-password-selected + rotate: false + xy: 132, 9 + size: 29, 30 + split: 20, 3, 0, 29 + pad: 21, 4, 0, 6 + orig: 29, 30 + offset: 0, 0 + index: -1 +textfield-selected + rotate: false + xy: 235, 185 + size: 14, 8 + split: 3, 3, 0, 7 + pad: 4, 4, 0, 6 + orig: 14, 8 + offset: 0, 0 + index: -1 +tooltip + rotate: false + xy: 145, 85 + size: 50, 98 + split: 14, 14, 15, 16 + pad: 13, 13, 13, 13 + orig: 50, 98 + offset: 0, 0 + index: -1 +touchpad + rotate: false + xy: 1, 187 + size: 162, 156 + split: 54, 53, 57, 50 + pad: 0, 0, 1, 0 + orig: 162, 156 + offset: 0, 0 + index: -1 +touchpad-knob + rotate: false + xy: 165, 287 + size: 56, 56 + orig: 56, 56 + offset: 0, 0 + index: -1 +white + rotate: false + xy: 94, 9 + size: 1, 1 + orig: 1, 1 + offset: 0, 0 + index: -1 +window + rotate: false + xy: 165, 229 + size: 56, 56 + split: 17, 16, 17, 17 + pad: 16, 15, 16, 16 + orig: 56, 56 + offset: 0, 0 + index: -1 diff --git a/assets/skins/neon/skin/neon-ui.json b/assets/skins/neon/skin/neon-ui.json new file mode 100644 index 0000000..c67e63a --- /dev/null +++ b/assets/skins/neon/skin/neon-ui.json @@ -0,0 +1,423 @@ +{ +com.badlogic.gdx.graphics.g2d.BitmapFont: { + font: { + file: font-export.fnt + } + font-over: { + file: font-over-export.fnt + } + font-pressed: { + file: font-pressed-export.fnt + } +} +com.badlogic.gdx.graphics.Color: { + color: { + r: 0 + g: 1 + b: 1 + a: 1 + } + selected: { + r: 0 + g: .4 + b: .4 + a: 1 + } + text: { + r: .580392156 + g: 1 + b: 1 + a: 1 + } + text-selected: { + r: 1 + g: 1 + b: 1 + a: 1 + } +} +com.badlogic.gdx.scenes.scene2d.ui.Skin$TintedDrawable: { + button-c: { + name: button + color: color + } + button-over-c: { + name: button-over + color: color + } + button-pressed-c: { + name: button-pressed + color: color + } + checkbox-pressed-c: { + name: checkbox-pressed + color: color + } + checkbox-c: { + name: checkbox + color: color + } + checkbox-over-c: { + name: checkbox-over + color: color + } + radio-c: { + name: radio + color: color + } + radio-pressed-c: { + name: radio-pressed + color: color + } + radio-over-c: { + name: radio-over + color: color + } + color: { + name: white + color: color + } + list-c: { + name: list + color: color + } + slider-c: { + name: slider + color: color + } + progress-bar-c: { + name: progress-bar + color: color + } + progress-bar-knob-c: { + name: progress-bar-knob + color: color + } + progress-bar-vertical-c: { + name: progress-bar-vertical + color: color + } + progress-bar-vertical-knob-c: { + name: progress-bar-vertical-knob + color: color + } + scroll-horizontal-c: { + name: scroll-horizontal + color: color + } + scroll-vertical-c: { + name: scroll-vertical + color: color + } + select-box-c: { + name: select-box + color: color + } + select-box-over-c: { + name: select-box-over + color: color + } + select-box-pressed-c: { + name: select-box-pressed + color: color + } + slider-before-c: { + name: slider-before + color: color + } + slider-knob-c: { + name: slider-knob + color: color + } + slider-knob-pressed-c: { + name: slider-knob-pressed + color: color + } + slider-vertical-c: { + name: slider-vertical + color: color + } + slider-vertical-before-c: { + name: slider-vertical-before + color: color + } + split-pane-horizontal-c: { + name: split-pane-horizontal + color: color + } + split-pane-vertical-c: { + name: split-pane-vertical + color: color + } + selected: { + name: white + color: selected + } + textfield-c: { + name: textfield + color: color + } + textfield-login-c: { + name: textfield-login + color: color + } + textfield-selected-c: { + name: textfield-selected + color: color + } + textfield-login-selected-c: { + name: textfield-login-selected + color: color + } + textfield-password-c: { + name: textfield-password + color: color + } + textfield-password-selected-c: { + name: textfield-password-selected + color: color + } + tooltip-c: { + name: tooltip + color: color + } + touchpad-c: { + name: touchpad + color: color + } + touchpad-knob-c: { + name: touchpad-knob + color: color + } + plus-c: { + name: plus + color: color + } + minus-c: { + name: minus + color: color + } + window-c: { + name: window + color: color + } + checkbox-pressed-over-c: { + name: checkbox-pressed-over + color: color + } + progress-bar-big-c: { + name: progress-bar-big + color: color + } + progress-bar-big-knob-c: { + name: progress-bar-big-knob + color: color + } +} +com.badlogic.gdx.scenes.scene2d.ui.Button$ButtonStyle: { + default: { + up: button-c + down: button-pressed-c + over: button-over-c + } +} +com.badlogic.gdx.scenes.scene2d.ui.CheckBox$CheckBoxStyle: { + default: { + checkboxOn: checkbox-pressed-c + checkboxOff: checkbox-c + checkboxOver: checkbox-over-c + font: font + fontColor: text + downFontColor: text-selected + checkedFontColor: text-selected + } + radio: { + checkboxOn: radio-pressed-c + checkboxOff: radio-c + checkboxOver: radio-over-c + font: font + fontColor: color + downFontColor: selected + checkedFontColor: selected + } +} +com.badlogic.gdx.scenes.scene2d.ui.ImageButton$ImageButtonStyle: { + default: { + imageUp: button-c + imageDown: button-pressed-c + imageOver: button-over-c + } +} +com.badlogic.gdx.scenes.scene2d.ui.ImageTextButton$ImageTextButtonStyle: { + default: { + font: font + fontColor: text + downFontColor: text-selected + up: button-c + down: button-pressed-c + over: button-over-c + } + checkbox: { + imageUp: checkbox-c + imageDown: checkbox-pressed-c + imageOver: checkbox-over-c + imageChecked: checkbox-pressed-c + imageCheckedOver: checkbox-pressed-over-c + font: font + fontColor: text + downFontColor: text-selected + checkedFontColor: text-selected + } + radio: { + imageUp: radio-c + imageDown: radio-pressed-c + imageOver: radio-over-c + imageChecked: radio-pressed-c + imageCheckedOver: radio-over-c + font: font + fontColor: text + downFontColor: text-selected + checkedFontColor: text-selected + } +} +com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle: { + default: { + font: font + fontColor: text + } + over: { + font: font-over + fontColor: text + } + pressed: { + font: font-pressed + fontColor: text + } +} +com.badlogic.gdx.scenes.scene2d.ui.List$ListStyle: { + default: { + font: font + fontColorSelected: selected + fontColorUnselected: text + selection: color + background: list-c + } +} +com.badlogic.gdx.scenes.scene2d.ui.ProgressBar$ProgressBarStyle: { + default-horizontal: { + background: progress-bar-c + knobBefore: progress-bar-knob-c + } + default-vertical: { + background: progress-bar-vertical-c + knobBefore: progress-bar-vertical-knob-c + } + big: { + background: progress-bar-big-c + knobBefore: progress-bar-big-knob-c + } +} +com.badlogic.gdx.scenes.scene2d.ui.ScrollPane$ScrollPaneStyle: { + default: { + hScrollKnob: scroll-horizontal-c + vScrollKnob: scroll-vertical-c + } +} +com.badlogic.gdx.scenes.scene2d.ui.SelectBox$SelectBoxStyle: { + default: { + font: font + fontColor: text + background: select-box-c + scrollStyle: default + listStyle: default + backgroundOver: select-box-over-c + backgroundOpen: select-box-pressed-c + } +} +com.badlogic.gdx.scenes.scene2d.ui.Slider$SliderStyle: { + default-horizontal: { + knobOver: slider-knob-pressed-c + knobDown: slider-knob-pressed-c + background: slider-c + knob: slider-knob-c + knobBefore: slider-before-c + } + default-vertical: { + knobOver: slider-knob-pressed-c + knobDown: slider-knob-pressed-c + background: slider-vertical-c + knob: slider-knob-c + knobBefore: slider-vertical-before-c + } +} +com.badlogic.gdx.scenes.scene2d.ui.SplitPane$SplitPaneStyle: { + default-horizontal: { + handle: split-pane-horizontal-c + } + default-vertical: { + handle: split-pane-vertical-c + } +} +com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle: { + default: { + font: font + fontColor: text + downFontColor: text-selected + up: button-c + down: button-pressed-c + over: button-over-c + } +} +com.badlogic.gdx.scenes.scene2d.ui.TextField$TextFieldStyle: { + default: { + font: font + fontColor: text + background: textfield-c + focusedBackground: textfield-selected-c + cursor: color + selection: selected + } + login: { + font: font + fontColor: text + background: textfield-login-c + focusedBackground: textfield-login-selected-c + cursor: color + selection: selected + } + password: { + font: font + fontColor: text + background: textfield-password-c + focusedBackground: textfield-password-selected-c + cursor: color + selection: selected + } +} +com.badlogic.gdx.scenes.scene2d.ui.TextTooltip$TextTooltipStyle: { + default: { + label: default + background: tooltip-c + } +} +com.badlogic.gdx.scenes.scene2d.ui.Touchpad$TouchpadStyle: { + default: { + background: touchpad-c + knob: touchpad-knob-c + } +} +com.badlogic.gdx.scenes.scene2d.ui.Tree$TreeStyle: { + default: { + plus: plus-c + minus: minus-c + selection: selected + } +} +com.badlogic.gdx.scenes.scene2d.ui.Window$WindowStyle: { + default: { + background: window-c + titleFont: font + titleFont: font + } +} +} \ No newline at end of file diff --git a/assets/skins/neon/skin/neon-ui.png b/assets/skins/neon/skin/neon-ui.png new file mode 100644 index 0000000..56c36eb Binary files /dev/null and b/assets/skins/neon/skin/neon-ui.png differ diff --git a/assets/sounds/Spaceshipshot.wav b/assets/sounds/Spaceshipshot.wav new file mode 100644 index 0000000..d345be0 Binary files /dev/null and b/assets/sounds/Spaceshipshot.wav differ diff --git a/assets/sounds/boum.wav b/assets/sounds/boum.wav new file mode 100644 index 0000000..3b87637 Binary files /dev/null and b/assets/sounds/boum.wav differ diff --git a/assets/sounds/hitAlien.wav b/assets/sounds/hitAlien.wav new file mode 100644 index 0000000..9a48403 Binary files /dev/null and b/assets/sounds/hitAlien.wav differ diff --git a/assets/sounds/hitDeadAlien.wav b/assets/sounds/hitDeadAlien.wav new file mode 100644 index 0000000..f7a83a1 Binary files /dev/null and b/assets/sounds/hitDeadAlien.wav differ diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..d7e6c7a --- /dev/null +++ b/build.gradle @@ -0,0 +1,69 @@ +buildscript { + repositories { + mavenCentral() + maven { url 'https://s01.oss.sonatype.org' } + gradlePluginPortal() + mavenLocal() + google() + maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' } + maven { url 'https://s01.oss.sonatype.org/content/repositories/snapshots/' } + } + dependencies { + + + } +} + +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) { + apply plugin: 'java-library' + 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. + compileJava.doLast { + // projectFolder/assets + def assetsFolder = new File("${project.rootDir}/assets/") + // projectFolder/assets/assets.txt + def assetsFile = new File(assetsFolder, "assets.txt") + // delete that file in case we've already created it + assetsFile.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") + } + } +} + +subprojects { + version = '1.0.0' + ext.appName = 'Space-Game-setup' + 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' } + } +} + +eclipse.project.name = 'Space-Game-setup' + '-parent' diff --git a/core/build.gradle b/core/build.gradle new file mode 100644 index 0000000..bc2ab41 --- /dev/null +++ b/core/build.gradle @@ -0,0 +1,12 @@ +[compileJava, compileTestJava]*.options*.encoding = 'UTF-8' +eclipse.project.name = appName + '-core' + +dependencies { + api "com.badlogicgames.ashley:ashley:$ashleyVersion" + api "com.badlogicgames.box2dlights:box2dlights:$box2dlightsVersion" + api "com.badlogicgames.gdx-controllers:gdx-controllers-core:$gdxControllersVersion" + api "com.badlogicgames.gdx:gdx-box2d:$gdxVersion" + api "com.badlogicgames.gdx:gdx-bullet:$gdxVersion" + api "com.badlogicgames.gdx:gdx-freetype:$gdxVersion" + api "com.badlogicgames.gdx:gdx:$gdxVersion" +} diff --git a/core/src/main/java/com/space/game/Game.java b/core/src/main/java/com/space/game/Game.java new file mode 100644 index 0000000..180b68a --- /dev/null +++ b/core/src/main/java/com/space/game/Game.java @@ -0,0 +1,112 @@ +package com.space.game; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.GL20; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.utils.viewport.ExtendViewport; +import com.space.game.graphics.Background; +import com.space.game.graphics.TextureManager; +import com.space.game.managers.GameStateManager; +import com.space.game.managers.MapManager; +import com.space.game.managers.SoundManager; +import com.space.game.managers.UIManager; + +public class Game { + + private SpriteBatch batch; + + private TextureManager textureManager; + private UIManager uiManager; + private ExtendViewport extendViewport; + private GameStateManager gsm; + private MapManager mapManager; + private Background background; + private SoundManager soundManager; + + public Game() { + batch = new SpriteBatch(); + + extendViewport = new ExtendViewport(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + extendViewport.getCamera().position.set(Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight() / 2, 0); + + textureManager = new TextureManager(); + textureManager.loadTextures(textureManager); + + soundManager = new SoundManager(); + soundManager.loadSounds(); + soundManager.loadMusics(); + + uiManager = new UIManager(this, batch); + mapManager = new MapManager(this); + + background = new Background(textureManager, this); + + gsm = new GameStateManager(this); + + } + + + public void render() { + Gdx.gl.glClearColor(0, 0, 0, 1); + Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); + extendViewport.apply(); + + batch.begin(); + + batch.setProjectionMatrix(extendViewport.getCamera().combined); + + background.render(batch); + background.update(); + + gsm.update(batch); + + batch.end(); + batch.setShader(null); + } + + public void resize(int width, int height) { + extendViewport.update(width, height); + extendViewport.getCamera().position.set(getWorldWidth() / 2f, getWorldHeight() / 2f, 0); + extendViewport.getCamera().update(); + } + + public void dispose() { + if (mapManager != null) { + mapManager.dispose(); + } + batch.dispose(); + textureManager.dispose(); + background.dispose(); + soundManager.dispose(); + } + + public GameStateManager getGsm() { + return gsm; + } + + public MapManager getMapManager() { + return mapManager; + } + + public UIManager getUiManager() { + return uiManager; + } + + public SoundManager getSoundManager() { + return soundManager; + } + + public TextureManager getTextureManager() { + return textureManager; + } + + public float getWorldWidth(){ + return extendViewport.getWorldWidth(); + } + + public float getWorldHeight(){ + return extendViewport.getWorldHeight(); + } + + +} diff --git a/core/src/main/java/com/space/game/SpaceGame.java b/core/src/main/java/com/space/game/SpaceGame.java new file mode 100644 index 0000000..7d2d200 --- /dev/null +++ b/core/src/main/java/com/space/game/SpaceGame.java @@ -0,0 +1,37 @@ +package com.space.game; + +import com.badlogic.gdx.ApplicationAdapter; +import com.badlogic.gdx.Gdx; + +public class SpaceGame extends ApplicationAdapter { + + static private Game game; + + @Override + public void create() { + // Captura o cursor para fazer ele desaparecer + Gdx.input.setCursorCatched(true); + game = new Game(); + } + + @Override + public void render() { + game.render(); + } + + @Override + public void resize(int width, int height) { + game.resize(width, height); + } + + @Override + public void dispose() { + game.dispose(); + + } + + static public Game getGame() { + return game; + } + +} diff --git a/core/src/main/java/com/space/game/config/ConfigUtils.java b/core/src/main/java/com/space/game/config/ConfigUtils.java new file mode 100644 index 0000000..e6f360a --- /dev/null +++ b/core/src/main/java/com/space/game/config/ConfigUtils.java @@ -0,0 +1,50 @@ +package com.space.game.config; + +// import java.awt.GraphicsDevice; +// import java.awt.GraphicsEnvironment; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Graphics.DisplayMode; + +public class ConfigUtils { + + public static int get_windowWidth() { + // Obter a resolução da tela + // GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); + // int screenWidth = gd.getDisplayMode().getWidth(); + + // Obter a resolução da tela usando LibGDX + DisplayMode displayMode = Gdx.graphics.getDisplayMode(); + int screenWidth = displayMode.width; + + // Calcular o tamanho da janela como uma porcentagem da resolução do monitor + int windowWidth = (int) (screenWidth * 0.85f); + return windowWidth; + } + + public static int get_windowHeight() { + int windowWidth = get_windowWidth(); + int windowHeight = (int) (windowWidth * 9 / 16); + return windowHeight; + } + + public static float calcularFatorDeEscala() { + // Resolução base (onde a velocidade do tiro é 800) + float larguraBase = 1920; + float alturaBase = 1080; + + // Obter a resolução da tela atual + DisplayMode displayMode = Gdx.graphics.getDisplayMode(); + float larguraAtual = displayMode.width; + float alturaAtual = displayMode.height; + + // Calcula o fator de escala como a média geométrica das razões das resoluções + float fatorEscalaLargura = larguraAtual / larguraBase; + float fatorEscalaAltura = alturaAtual / alturaBase; + float fatorEscala = (float) Math.sqrt(fatorEscalaLargura * fatorEscalaAltura); + + return fatorEscala; + } + + +} diff --git a/core/src/main/java/com/space/game/config/LevelConfig.java b/core/src/main/java/com/space/game/config/LevelConfig.java new file mode 100644 index 0000000..1a38899 --- /dev/null +++ b/core/src/main/java/com/space/game/config/LevelConfig.java @@ -0,0 +1,27 @@ +package com.space.game.config; + +import java.util.List; + +public class LevelConfig { + public int levelNumber; + public int enemyCount; + public float enemySpeed; + public List enemyMovementPatterns; + + public int ammunitions; + public int kills; + + public LevelConfig(int ammunitions, int kills, int levelNumber, int enemyCount, float enemySpeed, List enemyMovementPatterns) { + if (enemyMovementPatterns.size() != enemyCount) { + throw new IllegalArgumentException("The size of enemyMovementPatterns must match enemyCount"); + } + this.levelNumber = levelNumber; + this.enemyCount = enemyCount; + this.enemySpeed = enemySpeed; + this.enemyMovementPatterns = enemyMovementPatterns; + + this.ammunitions = ammunitions; + this.kills = kills; + + } +} diff --git a/core/src/main/java/com/space/game/entities/Alien.java b/core/src/main/java/com/space/game/entities/Alien.java new file mode 100644 index 0000000..8d9c1bc --- /dev/null +++ b/core/src/main/java/com/space/game/entities/Alien.java @@ -0,0 +1,229 @@ +package com.space.game.entities; + +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.math.Vector2; +import com.space.game.SpaceGame; +import com.space.game.graphics.TextureManager; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Texture; + +public class Alien { + private Texture texture; + private TextureManager textureManager; + private Vector2 position; + private float speed; + private boolean isDead = false; + private float scale; + private Rectangle bounds; + private float deathTimer = Gdx.graphics.getDeltaTime(); + private boolean isMarkedForRemoval = false; + private final float TIME_TO_REMOVE = 2; // Tempo em segundos antes da remoção + + private int movementPattern; + private float elapsedTime; + private float waveAmplitude; + private float waveFrequency; + private float radiusDecay; + private float angleSpeed; + private int signal_x; + private int signal_y; + + public Alien(TextureManager textureManager, Vector2 position, float scale, int textureType, float speed, Spaceship spaceship, int movementPattern) { + this.position = position; + this.scale = scale; + this.speed = speed; + this.textureManager = textureManager; + this.movementPattern = movementPattern; + + // Escolhe a textura baseada no tipo do alien + switch (textureType) { + case 0: + this.texture = textureManager.getTexture("alien"); + break; + case 1: + this.texture = textureManager.getTexture("alien2"); + break; + default: + this.texture = textureManager.getTexture("alien"); + break; + } + + float boundsPadding = 14f; // Ajuste este valor para aumentar a área de colisão + bounds = new Rectangle(position.x - boundsPadding/2, position.y - boundsPadding/2, texture.getWidth() * scale + boundsPadding, texture.getHeight() * scale + boundsPadding); + + // Initialize variables for sine wave and spiral movements + waveAmplitude = MathUtils.random(SpaceGame.getGame().getWorldHeight()/9, SpaceGame.getGame().getWorldHeight()/5); // Randomize the amplitude + waveFrequency = MathUtils.random(1, 5); // Randomize the frequency + + // Calcula a direção para o centro da nave + radiusDecay = speed; // Fator de decaimento do raio + angleSpeed = SpaceGame.getGame().getWorldWidth() / 3840; // Velocidade angular da espiral + + elapsedTime = MathUtils.random(0, 5); // Randomize the starting time (0 to 5 seconds) + + signal_x = MathUtils.random(0, 1) == 0 ? -1 : 1; + signal_y = MathUtils.random(0, 1) == 0 ? -1 : 1; + + } + + public void setMovementPattern(int movementPattern) { + this.movementPattern = movementPattern; + } + + public void update(float deltaTime, Spaceship spaceship) { + switch (movementPattern) { + case 0: + moveLinearly(deltaTime, spaceship); + // criar aceleração + speed += (deltaTime * speed/MathUtils.random(12, 16)); + break; + case 1: + moveInWave(deltaTime, spaceship); + // criar aceleração + speed += (deltaTime * speed/MathUtils.random(14, 18)); + break; + case 2: + moveInSpiral(deltaTime, spaceship); + // criar aceleração + speed += (deltaTime * speed/MathUtils.random(12, 20)); + break; + default: + moveLinearly(deltaTime, spaceship); + break; + } + + + + + // Continua a lógica para morte + if (isDead()) { + deathTimer += deltaTime; + } + } + + private void moveLinearly(float deltaTime, Spaceship spaceship) { + // Supondo que getPosition() retorna o canto inferior esquerdo + float naveCenterX = spaceship.getPosition().x + spaceship.getBounds().width * spaceship.getScale() / 2; + float naveCenterY = spaceship.getPosition().y + spaceship.getBounds().height * spaceship.getScale() / 2; + + float alienCenterX = position.x + bounds.width * scale / 2; + float alienCenterY = position.y + bounds.height * scale / 2; + + // Cálculo da direção para o centro da nave + Vector2 direction = new Vector2(naveCenterX - alienCenterX, naveCenterY - alienCenterY); + direction.nor(); // Normaliza o vetor de direção + + // Aplica o movimento ao alien + position.x += direction.x * speed * deltaTime; + position.y += direction.y * speed * deltaTime; + + // Ajusta a posição do retângulo de limites + bounds.setPosition(position.x, position.y); + } + + private void moveInWave(float deltaTime, Spaceship spaceship) { + // Supondo que getPosition() retorna o canto inferior esquerdo + float naveCenterX = spaceship.getPosition().x + spaceship.getBounds().width * spaceship.getScale() / 2; + float naveCenterY = spaceship.getPosition().y + spaceship.getBounds().height * spaceship.getScale() / 2; + + float alienCenterX = position.x + bounds.width * scale / 2; + float alienCenterY = position.y + bounds.height * scale / 2; + + // Cálculo da direção para o centro da nave + Vector2 direction = new Vector2(naveCenterX - alienCenterX, naveCenterY - alienCenterY); + direction.nor(); // Normaliza o vetor de direção + + // Aplica o movimento linear ao alien na direção da nave + position.x += direction.x * speed * deltaTime; + position.y += direction.y * speed * deltaTime; + + // Atualiza o tempo decorrido + elapsedTime += deltaTime; + + // Calcula a onda usando o tempo decorrido + float waveOffset = waveAmplitude * (float)Math.sin(waveFrequency * elapsedTime) * deltaTime; + + // Adiciona a onda na direção perpendicular ao movimento linear + Vector2 perpendicularDirection = new Vector2(-direction.y, direction.x); // Direção perpendicular + position.x += perpendicularDirection.x * waveOffset; + position.y += perpendicularDirection.y * waveOffset; + + // Ajusta a posição do retângulo de limites + bounds.setPosition(position.x, position.y); + } + + + private void moveInSpiral(float deltaTime, Spaceship spaceship) { + // Supondo que getPosition() retorna o canto inferior esquerdo + float naveCenterX = spaceship.getPosition().x + spaceship.getBounds().width * spaceship.getScale() / 2; + float naveCenterY = spaceship.getPosition().y + spaceship.getBounds().height * spaceship.getScale() / 2; + + // Atualiza o tempo decorrido + elapsedTime += deltaTime; + + // Calcula o novo raio (diminuindo ao longo do tempo) + float radius = Math.max(2, SpaceGame.getGame().getWorldHeight() - radiusDecay * elapsedTime * speed *deltaTime); + + // Calcula a nova posição em espiral + float angle = angleSpeed * elapsedTime; + + // Atualiza a posição do alien usando as coordenadas polares convertidas para cartesianas + position.x = naveCenterX + (signal_x*radius) * (float) Math.cos(angle); + position.y = naveCenterY + (signal_y*radius) * (float) Math.sin(angle); + + // Ajusta a posição do retângulo de limites + bounds.setPosition(position.x, position.y); + } + + public void render(SpriteBatch batch) { + if (!isMarkedForRemoval) { + batch.draw(texture, position.x, position.y, texture.getWidth() * scale, texture.getHeight() * scale); + } + } + + public void setTextureToDraw(String key) { + texture = this.textureManager.getTexture(key); + } + + public void setSpeed(float speed) { + this.speed = speed; + } + + public boolean shouldRemove() { + return isMarkedForRemoval || (isDead && deathTimer > TIME_TO_REMOVE); + } + + public Vector2 getPosition() { + return position; + } + + public void hit() { + if (isDead) { + isMarkedForRemoval = true; // Marcar para remoção se já estava morto e foi atingido novamente + } else { + isDead = true; + deathTimer = 0; + setTextureToDraw("alienDead"); + setMovementPattern(0); // Padrão de movimento linear + setSpeed(-speed/2); // Inverter a velocidade para mover para trás + } + } + + public void markForImmediateRemoval() { + isMarkedForRemoval = true; + } + + public boolean isDead() { + return isDead || deathTimer > TIME_TO_REMOVE; + } + + public Rectangle getBounds() { + return bounds; + } + + public void dispose() { + // texture.dispose(); + } +} diff --git a/core/src/main/java/com/space/game/entities/Bullet.java b/core/src/main/java/com/space/game/entities/Bullet.java new file mode 100644 index 0000000..c34ad2b --- /dev/null +++ b/core/src/main/java/com/space/game/entities/Bullet.java @@ -0,0 +1,92 @@ +package com.space.game.entities; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.math.Vector2; +import com.space.game.graphics.TextureManager; +import com.space.game.SpaceGame; + +public class Bullet { + private Texture texture; + private Vector2 position; + private float angle; + private float scale; + private float speed; // padrao eh 800 + private Rectangle bounds; + private boolean shouldRemove = false; + + public Bullet(TextureManager textureManager, Vector2 spaceshipPosition, float angle, float spaceshipWidth, float spaceshipHeight, float scale) { + this.angle = angle + 90; // Ajusta o ângulo para a direção correta + this.scale = scale; + this.speed = SpaceGame.getGame().getWorldWidth() / 2; // Velocidade do tiro + + texture = textureManager.getTexture("bullet"); + float bulletWidth = texture.getWidth(); + float bulletHeight = texture.getHeight(); + + // Considera o centro da nave como o ponto de origem + float centerX = spaceshipPosition.x + (spaceshipWidth) / 2; + float centerY = spaceshipPosition.y + (spaceshipHeight) / 2; + + // Calcula o deslocamento para posicionar o tiro no bico da nave + float offsetFromCenter = spaceshipHeight / 2; // Base padrão no bico superior/inferior + float bulletOffsetX = MathUtils.cosDeg(this.angle) * offsetFromCenter; + float bulletOffsetY = MathUtils.sinDeg(this.angle) * offsetFromCenter; + + // Posiciona o tiro no bico da nave considerando o ângulo + float bullet_x = centerX + bulletOffsetX - (bulletWidth / 2); + float bullet_y = centerY + bulletOffsetY - (bulletHeight / 2); + + position = new Vector2(bullet_x, bullet_y); + bounds = new Rectangle(position.x, position.y, bulletWidth, bulletHeight); + } + + public boolean shouldRemove() { + return shouldRemove; + } + + public void markForRemoval() { + shouldRemove = true; + } + + public Vector2 getPosition() { + return position; + } + + public void update() { + position.x += speed * Math.cos(Math.toRadians(angle)) * Gdx.graphics.getDeltaTime(); + position.y += speed * Math.sin(Math.toRadians(angle)) * Gdx.graphics.getDeltaTime(); + bounds.setPosition(position); + } + + public void render(SpriteBatch batch) { + if (shouldRemove) return; + + batch.setColor(Color.WHITE); // Restaura a cor padrão + batch.setColor(1, 1, 1, 0.77f); + + batch.draw(texture, + position.x, position.y, + texture.getWidth() / 2, texture.getHeight() / 2, + texture.getWidth(), texture.getHeight(), + this.scale, this.scale, + angle+90, 0, 0, + texture.getWidth(), texture.getHeight(), + false, false); + + batch.setColor(Color.WHITE); // Restaura a cor padrão + } + + public Rectangle getBounds() { + return bounds; + } + + public void dispose() { + // texture.dispose(); + + } +} diff --git a/core/src/main/java/com/space/game/entities/Spaceship.java b/core/src/main/java/com/space/game/entities/Spaceship.java new file mode 100644 index 0000000..a2c3a0b --- /dev/null +++ b/core/src/main/java/com/space/game/entities/Spaceship.java @@ -0,0 +1,114 @@ +package com.space.game.entities; + +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.math.Vector2; +import com.space.game.SpaceGame; +import com.space.game.graphics.TextureManager; +import com.space.game.managers.BulletManager; +import com.badlogic.gdx.math.Rectangle; + +public class Spaceship{ + private Texture texture; + private int ammunitions; + private int kills; + private BulletManager bulletManager; + private float angle = 0; + + private float x_nave, y_nave; + + private float scale; + private Vector2 position = new Vector2(0, 0); + + + public Spaceship(TextureManager textureManager, BulletManager bulletManager) { + + this.texture = textureManager.getTexture("spaceship"); + + scale = Math.min(SpaceGame.getGame().getWorldWidth() / (float)texture.getWidth(), SpaceGame.getGame().getWorldHeight() / (float)texture.getHeight()); + scale *= 0.075f; + + x_nave = SpaceGame.getGame().getWorldWidth()/2f - texture.getWidth()*scale / 2f ; + y_nave = SpaceGame.getGame().getWorldHeight()/2f - texture.getHeight()*scale / 2f ; + position = new Vector2(x_nave, y_nave); + + // ammunitions = 49; + // kills = 0; + this.bulletManager = bulletManager; + + } + + public void incrementKillCount() { + kills++; + } + + public int getKillCount() { + return kills; + } + + public void setKillCount(int kills) { + this.kills = kills; + } + + public void fire() { + if (ammunitions > 0) { + bulletManager.fireBullet(new Vector2(position.x, position.y), angle, texture.getWidth(), texture.getHeight(), scale); + ammunitions--; + } // adicionar som de sem munição + } + + public float getScale() { + return scale; + } + + public void setAngle(float angle) { + this.angle = angle; + } + + public float getAngle() { + return angle; + } + + public Vector2 getPosition() { + return position; + } + + public void incrementAmmunitions(int ammunitions) { + this.ammunitions += ammunitions; + } + + public void setAmmunitions(int ammunitions) { + this.ammunitions = ammunitions; + } + + public int getAmmunitions() { + return ammunitions; + } + + public Rectangle getBounds() { + return new Rectangle(position.x, position.y, texture.getWidth() * scale, texture.getHeight() * scale); + } + + public void update() { + + } + + + public void render(SpriteBatch batch) { + // Desenha a textura da nave com a rotação e a escala aplicadas + batch.draw( texture, + position.x, position.y, // x e y da posição da nave + texture.getWidth() / 2, texture.getHeight() / 2, // x e y do ponto de origem da rotação + texture.getWidth(), texture.getHeight(), // largura e altura da textura + scale, scale, // escala em x e y + angle, 0, 0, // rotação e coordenadas da textura + texture.getWidth(), texture.getHeight(), // srcWidth e srcHeight (largura e altura da textura original) + false, false); // flip horizontal e vertical + } + + + public void dispose() { + texture.dispose(); + } + +} diff --git a/core/src/main/java/com/space/game/graphics/Background.java b/core/src/main/java/com/space/game/graphics/Background.java new file mode 100644 index 0000000..9838b0e --- /dev/null +++ b/core/src/main/java/com/space/game/graphics/Background.java @@ -0,0 +1,118 @@ +package com.space.game.graphics; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.math.MathUtils; +import com.space.game.Game; + +public class Background { + private Texture texture; + private Texture starTexture; + private Star[] stars; + private float alpha_background=0.25f; + private boolean alpha_bool = false; + private static final int NUM_STARS = 500; // Número de estrelas + private Game game; + + + public Background(TextureManager textureManager, Game game) { + texture = textureManager.getTexture("background"); + starTexture = textureManager.getTexture("star"); + + this.game = game; + + stars = new Star[NUM_STARS]; + for (int i = 0; i < NUM_STARS; i++) { + stars[i] = new Star(); + stars[i].brightness = MathUtils.random(1, 100); + stars[i].duration = MathUtils.random(77, 777); + stars[i].brightness_f = stars[i].brightness / 100f; + } + } + + private class Star { + float x, y; + int brightness; + float brightness_f; + int size; + int duration; + + + public Star() { + x = MathUtils.random(Gdx.graphics.getWidth()); + y = MathUtils.random(Gdx.graphics.getHeight()); + // brightness = MathUtils.random(1, 100); + // brightness_f = brightness / 100f; + // brightness = 0; + size = MathUtils.random(2, 5); + // duration = 0; + } + + public void update() { + duration--; + if (brightness > 0){ + brightness--; + } + + if (duration <= 0) { + duration = MathUtils.random(77, 777); + brightness = MathUtils.random(1, 100); + } + brightness_f = brightness / 100f; + // x -= 60 * Gdx.graphics.getDeltaTime(); // Move a estrela para a esquerda + // brightness = MathUtils.random(0, 5); // E muda o brilho + // if (x < 0) { + // x = Gdx.graphics.getWidth(); // Se a estrela sair da tela, reposiciona ela para a direita + // y = MathUtils.random(Gdx.graphics.getHeight()); // E muda a posição vertical + // brightness = MathUtils.random(); // E muda o brilho + // } + } + } + + + public void update() { + for (Star star : stars) { + star.update(); + } + + if(alpha_bool == false){ + alpha_background = MathUtils.clamp(alpha_background +0.000009f, 0.25f, 0.4f); + if(alpha_background >= 0.4f){ + alpha_bool = true; + } + } + else{ + alpha_background = MathUtils.clamp(alpha_background -0.000009f, 0.25f, 0.4f); + if(alpha_background <= 0.25f){ + alpha_bool = false; + } + } + } + + public void render(SpriteBatch batch) { + // Desenha as estrelas + batch.setColor(Color.WHITE); // Restaura a cor padrão + for (Star star : stars) { + batch.setColor(1, 1, 1, star.brightness_f); // Usa o brilho para ajustar a transparência + // randomizar o tamanho das estrelas + batch.draw(starTexture, star.x, star.y, starTexture.getWidth()/star.size, starTexture.getHeight()/star.size); // Desenha uma pequena textura para cada estrela + } + + + + batch.setColor(Color.WHITE); // Restaura a cor padrão + batch.setColor(1, 1, 1, alpha_background); + batch.draw(texture, 0, 0, game.getWorldWidth(), game.getWorldHeight());// Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + batch.setColor(Color.WHITE); // Restaura a cor padrão para evitar afetar outras texturas desenhadas na tela + + + } + + public void dispose() { + // texture.dispose(); + // starTexture.dispose(); + + } +} diff --git a/core/src/main/java/com/space/game/graphics/TextureManager.java b/core/src/main/java/com/space/game/graphics/TextureManager.java new file mode 100644 index 0000000..a5a7215 --- /dev/null +++ b/core/src/main/java/com/space/game/graphics/TextureManager.java @@ -0,0 +1,42 @@ +package com.space.game.graphics; + +import com.badlogic.gdx.graphics.Texture; +import java.util.HashMap; + +public class TextureManager { + private HashMap textures; + + public TextureManager() { + textures = new HashMap(); + } + + public void loadTexture(String key, String path) { + try{ + Texture texture = new Texture(path); + textures.put(key, texture); + } catch (Exception e) { + System.out.println("Error loading texture: " + path); + e.printStackTrace(); + } + } + + public Texture getTexture(String key) { + return textures.get(key); + } + + public void dispose() { + for (Texture texture : textures.values()) { + texture.dispose(); + } + } + + public void loadTextures(TextureManager textureManager){ + // Carregar texturas + textureManager.loadTexture("bullet", TexturePaths.BULLET); + textureManager.loadTexture("spaceship", TexturePaths.SPACESHIP); + textureManager.loadTexture("alien", TexturePaths.ALIEN); + textureManager.loadTexture("alienDead", TexturePaths.ALIEN_DEAD); + textureManager.loadTexture("background", TexturePaths.BACKGROUND); + textureManager.loadTexture("star", TexturePaths.STAR); + } +} \ No newline at end of file diff --git a/core/src/main/java/com/space/game/graphics/TexturePaths.java b/core/src/main/java/com/space/game/graphics/TexturePaths.java new file mode 100644 index 0000000..611c7f1 --- /dev/null +++ b/core/src/main/java/com/space/game/graphics/TexturePaths.java @@ -0,0 +1,12 @@ +package com.space.game.graphics; + +public class TexturePaths { + + public static final String BULLET = "assets/images/guns/bullet.png"; + public static final String SPACESHIP = "assets/images/spaceships/spaceship.png"; + public static final String ALIEN = "assets/images/aliens/alien_green.png"; + public static final String ALIEN_DEAD = "assets/images/aliens/alien_red.png"; + public static final String BACKGROUND = "assets/images/scenario/background.png"; + public static final String STAR = "assets/images/scenario/star3.png"; + +} diff --git a/core/src/main/java/com/space/game/levels/DynamicLevel.java b/core/src/main/java/com/space/game/levels/DynamicLevel.java new file mode 100644 index 0000000..c5a2e8e --- /dev/null +++ b/core/src/main/java/com/space/game/levels/DynamicLevel.java @@ -0,0 +1,136 @@ +package com.space.game.levels; + +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.space.game.config.LevelConfig; +import com.space.game.entities.Spaceship; +import com.space.game.graphics.Background; +import com.space.game.graphics.TextureManager; +import com.space.game.managers.AlienManager; +import com.space.game.managers.BulletManager; +import com.space.game.managers.CollisionManager; +import com.space.game.managers.GameStateManager; +import com.space.game.managers.InputManager; +import com.space.game.managers.SoundManager; +import com.space.game.managers.UIManager; +import com.badlogic.gdx.Gdx; +import com.space.game.SpaceGame; + +public class DynamicLevel implements Level { + private Spaceship spaceship; + private BulletManager bulletManager; + private AlienManager alienManager; + private CollisionManager collisionManager; + private TextureManager textureManager; + private SoundManager soundManager; + private UIManager uiManager; + private GameStateManager gsm; + private LevelConfig config; + private InputManager inputManager; + private boolean endLevel; + private boolean isSpaceshipNoMunition; + private int lastKillCount; // variável para rastrear o último valor de kills em que a munição foi incrementada + + public DynamicLevel(LevelConfig config) { + this.textureManager = SpaceGame.getGame().getTextureManager(); + this.uiManager = SpaceGame.getGame().getUiManager(); + this.gsm = SpaceGame.getGame().getGsm(); + this.config = config; + this.soundManager = SpaceGame.getGame().getSoundManager(); + + // background = new Background(textureManager, game); + bulletManager = new BulletManager(textureManager, soundManager, gsm); + spaceship = new Spaceship(textureManager, bulletManager); + + inputManager = new InputManager(gsm, spaceship); + Gdx.input.setInputProcessor(inputManager); + + alienManager = new AlienManager(textureManager, spaceship, config); + collisionManager = new CollisionManager(bulletManager, alienManager, spaceship, soundManager); + + alienManager.spawnAliens(spaceship); + uiManager.setHordas(config.levelNumber); + + if (config.levelNumber != 1) { + spaceship.incrementAmmunitions(config.ammunitions); + }else{ + spaceship.setAmmunitions(config.ammunitions); + } + spaceship.setKillCount(config.kills); + + lastKillCount = -1; + + isSpaceshipNoMunition = false; + + endLevel = false; + } + + @Override + public void render(SpriteBatch batch) { + spaceship.render(batch); + bulletManager.render(batch); + alienManager.render(batch); + } + + @Override + public void update() { + if (alienManager.getEndLevel() == true) { + endLevel = true; + return; + } + + if(spaceship.getAmmunitions() == 0 && !isSpaceshipNoMunition){ + alienManager.setIsSpaceshipNoMunition(true); + isSpaceshipNoMunition = true; + } + + spaceship.update(); + bulletManager.update(); + alienManager.update(bulletManager.getBullets()); + collisionManager.checkBulletCollisions(); + + if (collisionManager.checkSpaceshipCollisions()) { + gsm.setState(GameStateManager.State.GAME_OVER); + } + + alienManager.spawnAliens(spaceship); + + if (spaceship.getKillCount()>0 && (spaceship.getKillCount() % 7 == 0 && spaceship.getKillCount() != lastKillCount)) { + spaceship.incrementAmmunitions(14); + lastKillCount = spaceship.getKillCount(); + } + + inputManager.update(Gdx.graphics.getDeltaTime()); + } + + @Override + public void dispose() { + if(spaceship != null){ + // spaceship.dispose(); + } + + bulletManager.dispose(); + alienManager.dispose(); + collisionManager = null; + } + + @Override + public Spaceship getSpaceship() { + return spaceship; + } + + public AlienManager getAlienManager() { + return alienManager; + } + + public LevelConfig getConfig() { + return config; + } + + public boolean getEndLevel() { + return endLevel; + } + + public void freeSpaceship() { + spaceship = null; + } +} diff --git a/core/src/main/java/com/space/game/levels/Level.java b/core/src/main/java/com/space/game/levels/Level.java new file mode 100644 index 0000000..4331c01 --- /dev/null +++ b/core/src/main/java/com/space/game/levels/Level.java @@ -0,0 +1,15 @@ +package com.space.game.levels; + +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.space.game.entities.Spaceship; +import com.space.game.config.LevelConfig; + +public interface Level { + void render(SpriteBatch batch); + void update(); + void dispose(); + Spaceship getSpaceship(); + void freeSpaceship(); + boolean getEndLevel(); + LevelConfig getConfig(); +} diff --git a/core/src/main/java/com/space/game/levels/LevelFactory.java b/core/src/main/java/com/space/game/levels/LevelFactory.java new file mode 100644 index 0000000..f8290af --- /dev/null +++ b/core/src/main/java/com/space/game/levels/LevelFactory.java @@ -0,0 +1,101 @@ +package com.space.game.levels; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.Random; +import java.util.List; + +import com.space.game.config.LevelConfig; +// import com.space.game.Game; +import com.space.game.SpaceGame; + +public class LevelFactory { + private Map levelConfigs; + // private Game game; + private Random random; + private float factor_speed_initial; + private float speed; + + public LevelFactory() { + // this.game = game; + this.levelConfigs = new HashMap<>(); + this.random = new Random(); + + } + + private void setFactorSpeedInitial(float speed){ + this.factor_speed_initial -= speed; + } + + public Level createLevel(int levelNumber) { + LevelConfig config = levelConfigs.get(levelNumber); + if (config == null) { + config = generateNewLevelConfig(levelNumber); + levelConfigs.put(levelNumber, config); + } + return new DynamicLevel(config); + } + + private LevelConfig generateNewLevelConfig(int levelNumber) { + if (levelNumber == 1) { + // Configuração inicial para o nível 1 + + this.speed = SpaceGame.getGame().getWorldWidth(); + this.factor_speed_initial = 70f; + int enemyCount = 7; + int ammunitions = 49; + int kills = 0; + return new LevelConfig(ammunitions, kills, levelNumber, enemyCount, speed/factor_speed_initial, generateMovementPatterns(enemyCount)); + + } else { + // Configuração para os níveis seguintes + LevelConfig previousConfig = levelConfigs.get(levelNumber - 1); + int newEnemyCount = previousConfig.enemyCount + random.nextInt(7) + 3; // Aumenta de 3 a 7 inimigos + float newEnemySpeed; + + int ammunitions = SpaceGame.getGame().getMapManager().getSpaceship().getAmmunitions() + 7; + int kills = SpaceGame.getGame().getMapManager().getSpaceship().getKillCount(); + + // Aumenta a velocidade a cada nível par + if (previousConfig.levelNumber % 2 == 0 && this.factor_speed_initial >= 15f){ + setFactorSpeedInitial(1f); + newEnemySpeed = speed/factor_speed_initial; + } else { + newEnemySpeed = previousConfig.enemySpeed; // Mantém a velocidade + } + + List newMovementPatterns = generateMovementPatterns(newEnemyCount); + + return new LevelConfig(ammunitions, kills, levelNumber, newEnemyCount, newEnemySpeed, newMovementPatterns); + } + } + + private List generateMovementPatterns(int enemyCount) { + List patterns = new ArrayList<>(); + List weightedPatterns = createWeightedPatterns(enemyCount); + + for (int i = 0; i < enemyCount; i++) { + patterns.add(weightedPatterns.get(random.nextInt(weightedPatterns.size()))); + } + return patterns; + } + + private List createWeightedPatterns(int enemyCount) { + List weightedPatterns = new ArrayList<>(); + // criar pesos: + int weightFor0 = (int) (enemyCount * 0.45f); + int weightFor1 = (int) (enemyCount * 0.35f); + int weightFor2 = enemyCount - weightFor0 - weightFor1; + + for (int i = 0; i < weightFor0; i++) weightedPatterns.add(0); + for (int i = 0; i < weightFor1; i++) weightedPatterns.add(1); + for (int i = 0; i < weightFor2; i++) weightedPatterns.add(2); + + return weightedPatterns; + } + + public void dispose() { + levelConfigs.clear(); + } +} diff --git a/core/src/main/java/com/space/game/managers/AlienManager.java b/core/src/main/java/com/space/game/managers/AlienManager.java new file mode 100644 index 0000000..19d338b --- /dev/null +++ b/core/src/main/java/com/space/game/managers/AlienManager.java @@ -0,0 +1,167 @@ +package com.space.game.managers; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.math.Vector2; +import com.space.game.SpaceGame; +import com.space.game.config.ConfigUtils; +import com.space.game.entities.Alien; +import com.space.game.entities.Bullet; +import com.space.game.entities.Spaceship; +import com.space.game.graphics.TextureManager; +import com.space.game.managers.GameStateManager.State; +import com.space.game.config.LevelConfig; + +public class AlienManager { + private float scale_screen = ConfigUtils.calcularFatorDeEscala(); + private List aliens; + private TextureManager textureManager; + private float deltaTime; + private Spaceship spaceship; + private boolean endLevel; + private int activeAlienCount; + private int deadAliensCount; + private boolean isSpaceshipNoMunition; + + private LevelConfig config; + + public AlienManager(TextureManager textureManager, Spaceship spaceship, LevelConfig config) { + this.config = config; + this.aliens = new ArrayList<>(); + this.textureManager = textureManager; + this.deltaTime = Gdx.graphics.getDeltaTime(); + this.spaceship = spaceship; + + this.activeAlienCount = 0; + this.deadAliensCount = 0; + + this.isSpaceshipNoMunition = false; + + this.endLevel = false; + } + + public void addAlien(Vector2 position, float scale, int textureType, float speed, int movementPattern) { + Alien newAlien = new Alien(textureManager, position, scale, textureType, speed, spaceship, movementPattern); + aliens.add(newAlien); + } + + public List getAliens() { + return aliens; + } + + public boolean getEndLevel() { + return endLevel; + } + + public void setIsSpaceshipNoMunition(boolean isSpaceshipNoMunition) { + this.isSpaceshipNoMunition = isSpaceshipNoMunition; + } + + public void spawnAliens(Spaceship spaceship) { + if (deadAliensCount >= config.enemyCount) { + this.endLevel = true; + return; + } + + activeAlienCount = 0; + + // Conta quantos aliens estão vivos + for (Alien alien : this.getAliens()) { + if (!alien.isDead()) { + activeAlienCount++; + } + // + } + + // Se houver menos de três aliens ativos, spawna mais + if (activeAlienCount <= MathUtils.random(3, 7) && config.enemyMovementPatterns.size() > 0) { + int contSpawn = 1; + if (config.enemyMovementPatterns.size() > 7) { + contSpawn = MathUtils.random(4, 7); + } else { + contSpawn = config.enemyMovementPatterns.size(); + } + for (int i = 0; i < contSpawn; i++) { + // Define posição inicial do alien baseada em 'i' para variar suas posições de spawn + Vector2 alienPosition = calculateAlienSpawnPosition(i, spaceship.getPosition()); + // se config.enemySpeed for 100, então é para gerar numeros de 100 ate 130 + float speed = MathUtils.random(config.enemySpeed, config.enemySpeed + 5); + float alienScale = 0.6f * scale_screen; + int textureType = 0; // Tipo de textura que pode ser variada para diferentes aliens + + this.addAlien(alienPosition, alienScale, textureType, speed, config.enemyMovementPatterns.get(0)); + config.enemyMovementPatterns.remove(0); + // config.enemyCount--; + } + } + } + + private Vector2 calculateAlienSpawnPosition(int index, Vector2 spaceshipPosition) { + // fazer o modulo de index por 4 para que o valor de index seja sempre entre 0 e 3 + index = index % 4; + + float x = 0, y = 0; + // Exemplo simples de spawn positions, pode ser ajustado conforme necessário + switch (index % 4) { + case 0: // Topo + x = MathUtils.random(0, SpaceGame.getGame().getWorldWidth()); + y = SpaceGame.getGame().getWorldHeight(); + break; + case 1: // Direita + x = SpaceGame.getGame().getWorldWidth(); + y = MathUtils.random(0, SpaceGame.getGame().getWorldHeight()); + break; + case 2: // Baixo + x = MathUtils.random(0, SpaceGame.getGame().getWorldWidth()); + y = 0; + break; + case 3: // Esquerda + x = 0; + y = MathUtils.random(0, SpaceGame.getGame().getWorldHeight()); + break; + } + return new Vector2(x, y); + } + + + public void update(List bullets) { + if (SpaceGame.getGame().getGsm().getState() != State.PLAYING) { + return; + } + Iterator alienIterator = aliens.iterator(); + while (alienIterator.hasNext()) { + Alien alien = alienIterator.next(); + if(isSpaceshipNoMunition){ + alien.setMovementPattern(0); + alien.setSpeed(SpaceGame.getGame().getWorldWidth()/11); + setIsSpaceshipNoMunition(false); + } + alien.update(deltaTime, spaceship); + + // Remover o alien se ele atende aos critérios de remoção. + if (alien.shouldRemove()) { + deadAliensCount++; + alienIterator.remove(); + alien.dispose(); + } + } + } + + public void render(SpriteBatch batch) { + for (Alien alien : aliens) { + alien.render(batch); + } + } + + public void dispose() { + for (Alien alien : aliens) { + alien.dispose(); + } + aliens.clear(); + } +} \ No newline at end of file diff --git a/core/src/main/java/com/space/game/managers/BulletManager.java b/core/src/main/java/com/space/game/managers/BulletManager.java new file mode 100644 index 0000000..ae51e4b --- /dev/null +++ b/core/src/main/java/com/space/game/managers/BulletManager.java @@ -0,0 +1,69 @@ +package com.space.game.managers; + +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import com.badlogic.gdx.math.Vector2; +import com.space.game.entities.Bullet; +import com.space.game.graphics.TextureManager; +import com.space.game.managers.GameStateManager.State; +import com.space.game.SpaceGame; + + +public class BulletManager { + private List bullets; + private TextureManager textureManager; + private GameStateManager gsm; + private SoundManager soundManager; + + public BulletManager(TextureManager textureManager, SoundManager soundManager, GameStateManager gsm) { + this.bullets = new ArrayList<>(); + this.textureManager = textureManager; + this.soundManager = soundManager; + this.gsm = gsm; + } + + public void fireBullet(Vector2 position, float angle, float spaceshipWidth, float spaceshipHeight, float scale) { + if (bullets.size() < 7) { // Limita o número de balas ativas + Bullet newBullet = new Bullet(textureManager, position, angle, spaceshipWidth, spaceshipHeight, scale); + bullets.add(newBullet); + soundManager.playBulletSound(); + } + } + + public void update() { + if (gsm.getState() != State.PLAYING) { + return; + } + Iterator bulletIterator = bullets.iterator(); + while (bulletIterator.hasNext()) { + Bullet bullet = bulletIterator.next(); + bullet.update(); + // Remove bullets that are off-screen or have collided + if (bullet.shouldRemove() || bullet.getPosition().x < 0-SpaceGame.getGame().getWorldWidth()/2 || + bullet.getPosition().x > SpaceGame.getGame().getWorldWidth()*1.5f || bullet.getPosition().y < 0 - SpaceGame.getGame().getWorldHeight()/2 || + bullet.getPosition().y > SpaceGame.getGame().getWorldHeight()*1.5f) { + bulletIterator.remove(); + bullet.dispose(); + } + } + } + + public void render(SpriteBatch batch) { + for (Bullet bullet : bullets) { + bullet.render(batch); + } + } + + public List getBullets() { + return bullets; + } + + public void dispose() { + for (Bullet bullet : bullets) { + bullet.dispose(); + } + bullets.clear(); + } +} diff --git a/core/src/main/java/com/space/game/managers/CollisionManager.java b/core/src/main/java/com/space/game/managers/CollisionManager.java new file mode 100644 index 0000000..97cd027 --- /dev/null +++ b/core/src/main/java/com/space/game/managers/CollisionManager.java @@ -0,0 +1,59 @@ +package com.space.game.managers; + +import java.util.Iterator; +import java.util.List; + +import com.space.game.entities.Alien; +import com.space.game.entities.Bullet; +import com.space.game.entities.Spaceship; + +public class CollisionManager { + private BulletManager bulletManager; + private List aliens; + private Spaceship spaceship; + private SoundManager soundManager; + + public CollisionManager(BulletManager bulletManager, AlienManager alienManager, Spaceship spaceship, SoundManager soundManager) { + this.soundManager = soundManager; + this.bulletManager = bulletManager; + this.spaceship = spaceship; + this.aliens = alienManager.getAliens(); + } + + public void checkBulletCollisions() { + List bullets = bulletManager.getBullets(); + Iterator bulletIterator = bullets.iterator(); + while (bulletIterator.hasNext()) { + Bullet bullet = bulletIterator.next(); + Iterator alienIterator = aliens.iterator(); + while (alienIterator.hasNext()) { + Alien alien = alienIterator.next(); + if (alien.getBounds().overlaps(bullet.getBounds())) { + bullet.markForRemoval(); + if (!alien.isDead()) { + // Se o alien não está morto, marcar como atingido pela primeira vez. + spaceship.incrementKillCount(); + alien.hit(); // Muda a textura e inverte a direção. + soundManager.playAlienHitSound(); + } else { + // Se já está morto e foi atingido novamente, marcar para remoção. + alien.markForImmediateRemoval(); + soundManager.playDeadAlienHitSound(); + } + } + } + } + } + + public boolean checkSpaceshipCollisions() { + // Verifica colisões entre a spaceship e aliens + Iterator alienIterator = aliens.iterator(); + while (alienIterator.hasNext()) { + Alien alien = alienIterator.next(); + if (spaceship.getBounds().overlaps(alien.getBounds())) { + return true; + } + } + return false; + } +} diff --git a/core/src/main/java/com/space/game/managers/GameStateManager.java b/core/src/main/java/com/space/game/managers/GameStateManager.java new file mode 100644 index 0000000..74ca54f --- /dev/null +++ b/core/src/main/java/com/space/game/managers/GameStateManager.java @@ -0,0 +1,54 @@ +package com.space.game.managers; + +import com.space.game.states.GameStateInterface; +import java.util.HashMap; +import java.util.Map; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.space.game.states.MenuState; +import com.space.game.states.PlayingState; +import com.space.game.states.GameOverState; +import com.space.game.states.PausedState; +import com.space.game.states.ScoresState; +import com.space.game.Game; + +public class GameStateManager { + public enum State { + MENU, PLAYING, GAME_OVER, PAUSED, SCORES + } + + private Map states; + private GameStateInterface currentState; + + public GameStateManager(Game game) { + states = new HashMap<>(); + states.put(State.MENU, new MenuState(this, game.getUiManager(), game.getSoundManager())); + states.put(State.PLAYING, new PlayingState(game, this, game.getUiManager(), game.getSoundManager())); + states.put(State.GAME_OVER, new GameOverState(this, game.getMapManager(), game.getUiManager(), game.getSoundManager())); + states.put(State.PAUSED, new PausedState(this, game.getMapManager(), game.getUiManager(), game.getSoundManager())); + states.put(State.SCORES, new ScoresState(this, game.getUiManager())); + + setState(State.MENU); + } + + public void setState(State newState) { + if (currentState != null) { + currentState.exit(); + } + + currentState = states.get(newState); + if (currentState != null) { + currentState.enter(); + } + } + + public State getState() { + return currentState.getState(); + } + + public void update(SpriteBatch batch) { + if (currentState != null) { + currentState.update(batch); + } + } + +} diff --git a/core/src/main/java/com/space/game/managers/InputManager.java b/core/src/main/java/com/space/game/managers/InputManager.java new file mode 100644 index 0000000..26151af --- /dev/null +++ b/core/src/main/java/com/space/game/managers/InputManager.java @@ -0,0 +1,81 @@ +package com.space.game.managers; + +import com.badlogic.gdx.Input.Keys; +import com.badlogic.gdx.InputAdapter; +import com.space.game.SpaceGame; +import com.space.game.entities.Spaceship; +import com.space.game.managers.GameStateManager.State; + +public class InputManager extends InputAdapter { + private Spaceship spaceship; + private GameStateManager gsm; + private boolean turningLeft; + private boolean turningRight; + + public InputManager(GameStateManager gsm, Spaceship spaceship) { + this.spaceship = spaceship; + this.gsm = gsm; + this.turningLeft = false; + this.turningRight = false; + } + + @Override + public boolean keyDown(int keycode) { + if (gsm.getState() != State.PLAYING) { + return false; + } + switch (keycode) { + case Keys.A: + turningLeft = true; + break; + case Keys.D: + turningRight = true; + break; + case Keys.SPACE: + spaceship.fire(); + break; + case Keys.P: + gsm.setState(State.PAUSED); + break; + case Keys.Q: + SpaceGame.getGame().getSoundManager().playPreviousTrack(); + break; + case Keys.E: + SpaceGame.getGame().getSoundManager().playNextTrack(); + break; + case Keys.W: + if (SpaceGame.getGame().getSoundManager().isPlaying()) { + SpaceGame.getGame().getSoundManager().pauseMusic(); + } else { + SpaceGame.getGame().getSoundManager().resumeMusic(); + } + break; + } + return true; + } + + @Override + public boolean keyUp(int keycode) { + if (gsm.getState() != State.PLAYING) { + return false; + } + switch (keycode) { + case Keys.A: + turningLeft = false; + break; + case Keys.D: + turningRight = false; + break; + } + return true; + } + + public void update(float deltaTime) { + if (turningLeft) { + spaceship.setAngle(spaceship.getAngle() + 180 * deltaTime); + } + if (turningRight) { + spaceship.setAngle(spaceship.getAngle() - 180 * deltaTime); + } + } +} \ No newline at end of file diff --git a/core/src/main/java/com/space/game/managers/MapManager.java b/core/src/main/java/com/space/game/managers/MapManager.java new file mode 100644 index 0000000..454624f --- /dev/null +++ b/core/src/main/java/com/space/game/managers/MapManager.java @@ -0,0 +1,66 @@ +package com.space.game.managers; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.space.game.entities.Spaceship; +import com.space.game.levels.Level; +import com.space.game.levels.LevelFactory; +import com.space.game.Game; + +public class MapManager { + //private Game game; + private Level currentLevel; + private LevelFactory levelFactory; + + public MapManager(Game game) { + this.levelFactory = new LevelFactory(); + // this.game = game; + } + + public void loadLevel(int levelNumber) { + if (currentLevel != null) { + currentLevel.dispose(); + } + currentLevel = levelFactory.createLevel(levelNumber); + + if (currentLevel == null) { + throw new IllegalArgumentException("Invalid level number: " + levelNumber); + } + + } + + public void render(SpriteBatch batch) { + if (currentLevel != null) { + currentLevel.render(batch); + } + } + + public void update() { + if (currentLevel != null && currentLevel.getEndLevel()) { + loadLevel(currentLevel.getConfig().levelNumber + 1); + } + if (currentLevel != null) { + currentLevel.update(); + } + } + + public void dispose() { + if (currentLevel != null) { + currentLevel.dispose(); + currentLevel = null; + levelFactory.dispose(); + } + } + + public Spaceship getSpaceship() { + return currentLevel != null ? currentLevel.getSpaceship() : null; + } + + public void freeSpaceship() { + if (currentLevel != null) { + currentLevel.freeSpaceship(); + } + } + + +} diff --git a/core/src/main/java/com/space/game/managers/ScoreManager.java b/core/src/main/java/com/space/game/managers/ScoreManager.java new file mode 100644 index 0000000..10a15a0 --- /dev/null +++ b/core/src/main/java/com/space/game/managers/ScoreManager.java @@ -0,0 +1,91 @@ +package com.space.game.managers; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.files.FileHandle; + +public class ScoreManager { + + private static final String FILE_PATH = "data/scores.csv"; + + public static class ScoreEntry { + public String playerName; + public int score; + + public ScoreEntry(String playerName, int score) { + this.playerName = playerName; + this.score = score; + } + } + + public void saveScore(String playerName, int score) { + // usar o Gdx.files.internal para acessar arquivos dentro do JAR + FileHandle file = Gdx.files.local(FILE_PATH); + List scoresList = loadScores(); + + // Adicionar novo score se necessário + if (scoresList.size() < 10 || score > scoresList.get(scoresList.size() - 1).score) { + scoresList.add(new ScoreEntry(playerName, score)); + } + + // Ordenar scores em ordem decrescente + scoresList.sort(Comparator.comparingInt(o -> -o.score)); + + // Manter apenas os 10 melhores scores + if (scoresList.size() > 10) { + scoresList = scoresList.subList(0, 10); + } + // Salvar scores de volta no arquivo + try (OutputStreamWriter writer = new OutputStreamWriter(file.write(false))) { + writer.append("PlayerName,Score\n"); // Adiciona o cabeçalho novamente + for (ScoreEntry entry : scoresList) { + writer.append(entry.playerName) + .append(",") + .append(String.valueOf(entry.score)) + .append("\n"); + } + System.out.println("Score of " + score + " saved for player " + playerName); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public List loadScores() { + List scoresList = new ArrayList<>(); + // File file = new File(FILE_PATH); + FileHandle file = Gdx.files.local(FILE_PATH); + + if (file.exists()) { + try (BufferedReader reader = new BufferedReader(new InputStreamReader(file.read()))) { + String line; + boolean isFirstLine = true; + while ((line = reader.readLine()) != null) { + if (isFirstLine) { + isFirstLine = false; + continue; + } + String[] parts = line.split(","); + if (parts.length == 2) { + String playerName = parts[0]; + int score = Integer.parseInt(parts[1]); + scoresList.add(new ScoreEntry(playerName, score)); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + } + return scoresList; + } + + public boolean isHighScore(int score) { + List scoresList = loadScores(); + return scoresList.size() < 10 || score > scoresList.get(scoresList.size() - 1).score; + } +} diff --git a/core/src/main/java/com/space/game/managers/SoundManager.java b/core/src/main/java/com/space/game/managers/SoundManager.java new file mode 100644 index 0000000..5992fbf --- /dev/null +++ b/core/src/main/java/com/space/game/managers/SoundManager.java @@ -0,0 +1,201 @@ +package com.space.game.managers; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.audio.Sound; +import com.badlogic.gdx.files.FileHandle; +import com.badlogic.gdx.audio.Music; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class SoundManager { + private float volume_sound = 0.5f; // Volume padrão é 1.0 (máximo) + private float volume_music = 0.25f; // Volume padrão é 1.0 (máximo) + private Sound bulletSound; + private Sound hitAlienSound; + private Sound hitDeadAlienSound; + private Music menu_music; + private Music gameover_music; + + private List playlist; + private int currentTrackIndex = 0; + + public void loadSounds() { + menu_music = Gdx.audio.newMusic(Gdx.files.internal("assets\\musics\\menu\\Echoes of the Last Stand.mp3")); + gameover_music = Gdx.audio.newMusic(Gdx.files.internal("assets\\musics\\gameover\\gameover.mp3")); + + bulletSound = Gdx.audio.newSound(Gdx.files.internal("assets\\sounds\\Spaceshipshot.wav")); + hitAlienSound = Gdx.audio.newSound(Gdx.files.internal("assets\\sounds\\hitAlien.wav")); + hitDeadAlienSound = Gdx.audio.newSound(Gdx.files.internal("assets\\sounds\\hitDeadAlien.wav")); + } + + public void loadMusics() { + // Carregar a pasta de músicas + FileHandle musicFolder = Gdx.files.internal("assets\\musics\\playing\\"); + FileHandle[] musicFiles = musicFolder.list(".mp3"); + + playlist = new ArrayList<>(); + for (FileHandle file : musicFiles) { + Music music = Gdx.audio.newMusic(file); + music.setOnCompletionListener(new Music.OnCompletionListener() { + @Override + public void onCompletion(Music music) { + playNextTrack(); + } + }); + playlist.add(music); + } + + // Embaralhar a playlist para tocar músicas aleatoriamente + Collections.shuffle(playlist); + + if (!playlist.isEmpty()) { + currentTrackIndex = 0; + } + + } + + public void playNextTrack() { + if (playlist.isEmpty()) return; + + if (playlist.get(currentTrackIndex).isPlaying()) { + playlist.get(currentTrackIndex).stop(); + } + + currentTrackIndex = (currentTrackIndex + 1) % playlist.size(); + playlist.get(currentTrackIndex).setPosition(0); + playlist.get(currentTrackIndex).play(); + playlist.get(currentTrackIndex).setVolume(volume_music); + } + + public void playPreviousTrack() { + if (playlist.isEmpty()) return; + + if (playlist.get(currentTrackIndex).isPlaying()) { + playlist.get(currentTrackIndex).stop(); + } + + currentTrackIndex = (currentTrackIndex - 1 + playlist.size()) % playlist.size(); + playlist.get(currentTrackIndex).setPosition(0); + playlist.get(currentTrackIndex).play(); + playlist.get(currentTrackIndex).setVolume(volume_music); + } + + public void playMusic() { + if (playlist.isEmpty()) return; + if (playlist.get(currentTrackIndex).isPlaying()) { + playlist.get(currentTrackIndex).stop(); + } + // embaralhar a playlist + Collections.shuffle(playlist); + // resetar a música para o início + playlist.get(currentTrackIndex).setPosition(0); + playlist.get(currentTrackIndex).setLooping(false); + playlist.get(currentTrackIndex).setVolume(volume_music); + playlist.get(currentTrackIndex).play(); + } + + public void stopMusic() { + if (!playlist.isEmpty() && playlist.get(currentTrackIndex).isPlaying()) { + playlist.get(currentTrackIndex).stop(); + } + } + + public void pauseMusic() { + if (!playlist.isEmpty() && playlist.get(currentTrackIndex).isPlaying()) { + playlist.get(currentTrackIndex).pause(); + } + } + + public void resumeMusic() { + if (!playlist.isEmpty() && !playlist.get(currentTrackIndex).isPlaying()) { + playlist.get(currentTrackIndex).play(); + } + } + + + + public void set_VolumeSound(float volume) { + if (volume < 0.0f) { + this.volume_sound = 0.0f; + } else if (volume > 1.0f) { + this.volume_sound = 1.0f; + } else { + this.volume_sound = volume; + } + } + + public float getVolumeSound() { + return this.volume_sound; + } + + public void set_VolumeMusic(float volume) { + if (volume < 0.0f) { + this.volume_music = 0.0f; + } else if (volume > 1.0f) { + this.volume_music = 1.0f; + } else { + this.volume_music = volume; + } + } + + public float getVolumeMusic() { + return this.volume_music; + } + + public void playMenuMusic() { + if (menu_music != null && !menu_music.isPlaying()) { + menu_music.setLooping(true); + menu_music.setVolume(0.4f); + menu_music.play(); + } + } + + public void stopMenuMusic() { + if (menu_music != null && menu_music.isPlaying()) { + menu_music.stop(); + } + } + + public void playGameOverMusic() { + if (gameover_music != null && !gameover_music.isPlaying()) { + // gameover_music.setLooping(true); + gameover_music.setVolume(0.4f); + gameover_music.play(); + } + } + + public void stopGameOverMusic() { + if (gameover_music != null && gameover_music.isPlaying()) { + gameover_music.stop(); + } + } + + public void playBulletSound() { + bulletSound.play(volume_sound); + } + + public void playAlienHitSound() { + hitAlienSound.play(volume_sound); + } + + public void playDeadAlienHitSound() { + hitDeadAlienSound.play(volume_sound); + } + + public boolean isPlaying() { + return playlist.get(currentTrackIndex).isPlaying(); + } + + public void dispose() { + bulletSound.dispose(); + hitAlienSound.dispose(); + hitDeadAlienSound.dispose(); + menu_music.dispose(); + for (Music music : playlist) { + music.dispose(); + } + + } +} diff --git a/core/src/main/java/com/space/game/managers/UIManager.java b/core/src/main/java/com/space/game/managers/UIManager.java new file mode 100644 index 0000000..60fbd66 --- /dev/null +++ b/core/src/main/java/com/space/game/managers/UIManager.java @@ -0,0 +1,340 @@ +package com.space.game.managers; + +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.GlyphLayout; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator; +import com.space.game.config.ConfigUtils; +import com.space.game.entities.Spaceship; +import com.badlogic.gdx.Gdx; +import java.util.List; +import com.space.game.Game; + +public class UIManager { + private BitmapFont font30, font100, font150; + private Game game; + private SpriteBatch batch; + private int hordas; + private final int const_larg = 21; + private Color cian_color; + + public UIManager(Game game, SpriteBatch batch) { + this.game = game; + this.batch = batch; + this.cian_color = new Color(0.0f, 1.0f, 1.0f, 1.0f); + + initializeFonts(); + + + } + + private void initializeFonts() { + FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("assets\\fonts\\nasalization-rg.otf")); + FreeTypeFontGenerator.FreeTypeFontParameter parameter = new FreeTypeFontGenerator.FreeTypeFontParameter(); + + float scaleFactor = ConfigUtils.calcularFatorDeEscala(); + + parameter.size = (int) (30 * scaleFactor); + font30 = generator.generateFont(parameter); + + parameter.size = (int) (100 * scaleFactor); + parameter.borderWidth = 4 * scaleFactor; + parameter.borderColor = cian_color; + parameter.color = Color.BLACK; + font100 = generator.generateFont(parameter); + + parameter.size = (int) (150 * scaleFactor); + parameter.borderWidth = 4 * scaleFactor; + font150 = generator.generateFont(parameter); + + generator.dispose(); + } + + public void displayMenu() { + // Desenha o título "SPACE GAME" + String title = "SPACE GAME"; + GlyphLayout titleLayout = new GlyphLayout(font150, title); + float title_x = game.getWorldWidth() / const_larg; + float title_y = game.getWorldHeight()/1.5f + titleLayout.height; + font150.draw(batch, title, title_x, title_y); + + // Desenha o botão "New Game" + String buttonText = "1. Start Arcade Mode"; + GlyphLayout buttonLayout = new GlyphLayout(font30, buttonText); + float buttonX = game.getWorldWidth() / const_larg; + float buttonY = title_y - titleLayout.height*3; + font30.setColor(cian_color); + font30.draw(batch, buttonText, buttonX, buttonY); + + // Desenha o botão "Scores" + buttonText = "2. Scores"; + buttonLayout = new GlyphLayout(font30, buttonText); + buttonX = game.getWorldWidth() / const_larg; + buttonY = buttonY - buttonLayout.height*3; + font30.draw(batch, buttonText, buttonX, buttonY); + + // Desenha o botão "Exit" + buttonText = "0. Exit"; + buttonLayout = new GlyphLayout(font30, buttonText); + buttonX = game.getWorldWidth() / const_larg; + buttonY = buttonY - buttonLayout.height*12; + font30.draw(batch, buttonText, buttonX, buttonY); + } + + public void displayGameControls() { + float scaleFactor = ConfigUtils.calcularFatorDeEscala(); + + String title = "GAME CONTROLS"; + GlyphLayout titleLayout = new GlyphLayout(font100, title); + float title_x = game.getWorldWidth() / const_larg; + float title_y = game.getWorldHeight() / 1.2f + titleLayout.height * scaleFactor; + font100.draw(batch, title, title_x, title_y); + + font30.setColor(cian_color); + float startY = game.getWorldHeight() / 2 + 3 * 30 * scaleFactor; // 3 é o número de controles + + // Desenhar cabeçalhos da tabela + String actionHeader = "Action"; + String controlHeader = "Control"; + + GlyphLayout controlLayout = new GlyphLayout(font30, controlHeader); + GlyphLayout actionLayout = new GlyphLayout(font30, actionHeader); + + float actionX = game.getWorldWidth() / const_larg; // Espaçamento entre colunas + float controlX = actionX + actionLayout.width + 100 * scaleFactor; + + float headerY = startY + 60 * scaleFactor; // Cabeçalhos um pouco acima da lista de controles + font30.draw(batch, controlHeader, controlX + controlLayout.width/2, headerY); + font30.draw(batch, actionHeader, actionX, headerY); + + // Controles do jogo + String[] actions = { "Turn Left", "Turn Right", "Shoot", "Pause Game", "Prev. Song", "Pause Song", "Next Song"}; + String[] controls = { "A", "D", "Spacebar", "P", "Q", "W", "E"}; + + // Desenhar controles + float y = startY; + + for (int i = 0; i < controls.length; i++) { + String control = controls[i]; + String action = actions[i]; + + GlyphLayout controlTextLayout = new GlyphLayout(font30, control); + GlyphLayout actionTextLayout = new GlyphLayout(font30, action); + + + font30.draw(batch, control, controlX+ controlLayout.width/2, y); + font30.draw(batch, action, actionX, y); + + y -= 50 * scaleFactor; + } + + // Desenha as instruções de iniciar e voltar na parte inferior da tela + String startText = "Enter. Start"; + GlyphLayout startLayout = new GlyphLayout(font30, startText); + // float start_x = game.getWorldWidth() / 2 + game.getWorldWidth() / 4 - startLayout.width / 2; + float start_x = (const_larg-1)*(game.getWorldWidth() / const_larg) - startLayout.width ; + float start_y = game.getWorldHeight() * 0.1f; // Posição inferior + font30.draw(batch, startText, start_x, start_y); + + String backText = "Backspace. Back"; + GlyphLayout backLayout = new GlyphLayout(font30, backText); + // float back_x = game.getWorldWidth() / 2 - game.getWorldWidth() / 4 - backLayout.width / 2; + float back_x = game.getWorldWidth() / const_larg; + float back_y = start_y; + font30.draw(batch, backText, back_x, back_y); + } + + + public void displayGameInfo(Spaceship spaceship) { + // Exibir informações do jogo como munição e hordas + font30.setColor(Color.WHITE); + String ammoText = "AMMO: " + spaceship.getAmmunitions(); + font30.draw(batch, ammoText, 10, 30); + + String hordasText = "WAVE: " + hordas; + GlyphLayout hordasLayout = new GlyphLayout(font30, hordasText); + font30.draw(batch, hordasText, game.getWorldWidth() - hordasLayout.width - 10, 30); + + String killsText = "SCORE: " + (spaceship.getKillCount()); + GlyphLayout killsLayout = new GlyphLayout(font30, killsText); + font30.draw(batch, killsText, game.getWorldWidth() / 2 - killsLayout.width / 2, 30); + } + + public void displayGameOverInfo(Spaceship spaceship) { + String gameOverText = "GAME OVER"; + GlyphLayout gameOverLayout = new GlyphLayout(font100, gameOverText); + float gameOver_x = game.getWorldWidth() / 2 - gameOverLayout.width / 2; + float gameOver_y = game.getWorldHeight() / 2 + gameOverLayout.height; + font100.draw(batch, gameOverText, gameOver_x, gameOver_y); + + font30.setColor(cian_color); + String restartText = "Press Enter to Continue"; + GlyphLayout restartLayout = new GlyphLayout(font30, restartText); + font30.draw(batch, restartText, game.getWorldWidth() / 2 - restartLayout.width / 2, gameOver_y - gameOverLayout.height * 2); + + } + + public void displayPausedInfo(Spaceship spaceship) { + String pausedText = "PAUSED"; + GlyphLayout pausedLayout = new GlyphLayout(font100, pausedText); + font100.draw(batch, pausedText, game.getWorldWidth() / 2 - pausedLayout.width / 2, game.getWorldHeight() / 1.3f + pausedLayout.height); + + font30.setColor(cian_color); + String restartText = "Backspace. Exit | Enter. Resume"; + GlyphLayout restartLayout = new GlyphLayout(font30, restartText); + font30.draw(batch, restartText, game.getWorldWidth() / 2 - restartLayout.width / 2, game.getWorldHeight() / 1.3f - restartLayout.height * 3); + + String ammoText = "AMMO: "; + // GlyphLayout ammoLayout = new GlyphLayout(font30, ammoText); + font30.draw(batch, ammoText + spaceship.getAmmunitions(), 10, 30); + + String hordeText = "WAVE: "; + GlyphLayout hordeLayout = new GlyphLayout(font30, hordeText + hordas); + font30.draw(batch, hordeText + hordas, game.getWorldWidth() - hordeLayout.width - 10, 30); + + String killsText = "SCORE: "; + int totalKills = (spaceship.getKillCount()); + GlyphLayout killsLayout = new GlyphLayout(font30, killsText + totalKills); + font30.draw(batch, killsText + totalKills, game.getWorldWidth() / 2 - killsLayout.width / 2, 30); + + } + + public boolean displayNewLevel(boolean fadeIn, boolean fadeOut, float alpha, float fadeSpeed, float deltaTime) { + + if (fadeIn) { + alpha += fadeSpeed * deltaTime; + // alpha = Math.min(alpha, 1f); // Limita o alpha para não ultrapassar 1 + + batch.setColor(1, 1, 1, alpha); + String newLevelText = "WAVE " + hordas; + GlyphLayout newLevelLayout = new GlyphLayout(font100, newLevelText); + font100.draw(batch, newLevelText, game.getWorldWidth() / 2 - newLevelLayout.width / 2, game.getWorldHeight() / 1.3f + newLevelLayout.height); + batch.setColor(1, 1, 1, 1); + + return alpha >= 1f; // isso é verdadeiro quando o alpha é maior ou igual a 1 + } + + if (fadeOut) { + alpha -= fadeSpeed * deltaTime; + // alpha = Math.max(alpha, 0f); // Limita o alpha para não ser menor que 0 + + batch.setColor(1, 1, 1, alpha); + String newLevelText = "WAVE " + hordas; + GlyphLayout newLevelLayout = new GlyphLayout(font100, newLevelText); + font100.draw(batch, newLevelText, game.getWorldWidth() / 2 - newLevelLayout.width / 2, game.getWorldHeight() / 1.3f + newLevelLayout.height); + batch.setColor(1, 1, 1, 1); + + return alpha <= 0f; + } + + return false; + + } + + public void displaySaveScore(Spaceship spaceship, String playerName, boolean showCursor) { + String highscore = "HIGH SCORE: " + (spaceship.getKillCount()); + GlyphLayout highscoreLayout = new GlyphLayout(font100, highscore); + float highscore_x = game.getWorldWidth() / 2 - highscoreLayout.width / 2; + float highscore_y = game.getWorldHeight() / 1.3f + highscoreLayout.height; + font100.draw(batch, highscore, highscore_x, highscore_y); + + // String scoreText = "Score: " + (spaceship.getKillCount()); + // GlyphLayout scoreLayout = new GlyphLayout(font100, scoreText); + // font100.draw(batch, scoreText, game.getWorldWidth() / 2 - scoreLayout.width / 2, highscore_y - highscoreLayout.height * 2); + + font30.setColor(cian_color); + String playerText = "Player: " + playerName + (showCursor ? "_" : " "); + GlyphLayout playerLayout = new GlyphLayout(font30, playerText); + float player_x = game.getWorldWidth() / 2 - playerLayout.width / 2; + float player_y = game.getWorldHeight() / 2; + font30.draw(batch, playerText, player_x, player_y); + + String continueText = "Press Enter to Continue"; + GlyphLayout continueLayout = new GlyphLayout(font30, continueText); + font30.draw(batch, continueText, game.getWorldWidth() / 2 - continueLayout.width / 2, player_y - continueLayout.height * 3); + } + + + public void displayScores(List scoresList) { + float scaleFactor = ConfigUtils.calcularFatorDeEscala(); + + String title = "HIGH SCORES"; + GlyphLayout titleLayout = new GlyphLayout(font100, title); + float title_x = game.getWorldWidth() / const_larg; + float title_y = game.getWorldHeight() / 1.2f + titleLayout.height * scaleFactor; + font100.draw(batch, title, title_x, title_y); + + font30.setColor(cian_color); + float startY = game.getWorldHeight() / 2 + (scoresList.size() / 2) * 30 * scaleFactor; + + // Desenhar cabeçalhos da tabela + String rankHeader = "Rank"; + String playerHeader = "Player"; + String scoreHeader = "Score"; + + GlyphLayout rankLayout = new GlyphLayout(font30, rankHeader); + GlyphLayout playerLayout = new GlyphLayout(font30, playerHeader); + GlyphLayout scoreLayout = new GlyphLayout(font30, scoreHeader); + + float rankX = game.getWorldWidth() / const_larg; + float playerX = rankX + rankLayout.width + 20 * scaleFactor; // Espaçamento entre colunas + float scoreX = playerX + playerLayout.width + 200 * scaleFactor; + + float headerY = startY + 60 * scaleFactor; // Cabeçalhos um pouco acima da lista de scores + font30.draw(batch, rankHeader, rankX, headerY); + font30.draw(batch, playerHeader, playerX, headerY); + font30.draw(batch, scoreHeader, scoreX, headerY); + + // Determinar a largura máxima da coluna Rank + float maxRankWidth = rankLayout.width * scaleFactor; + for (int i = 0; i < scoresList.size(); i++) { + String rank = (i + 1) + "."; + GlyphLayout rankTextLayout = new GlyphLayout(font30, rank); + if (rankTextLayout.width * scaleFactor > maxRankWidth) { + maxRankWidth = rankTextLayout.width * scaleFactor; + } + } + + // Desenhar scores + float y = startY; + + for (int i = 0; i < scoresList.size(); i++) { + ScoreManager.ScoreEntry entry = scoresList.get(i); + String rank = (i + 1) + "."; + String player = entry.playerName; + String score = String.valueOf(entry.score); + + GlyphLayout rankTextLayout = new GlyphLayout(font30, rank); + GlyphLayout playerTextLayout = new GlyphLayout(font30, player); + GlyphLayout scoreTextLayout = new GlyphLayout(font30, score); + + float rankXAdjusted = rankX + maxRankWidth - rankTextLayout.width * scaleFactor; + + font30.draw(batch, rank, rankXAdjusted, y); + font30.draw(batch, player, playerX, y); + font30.draw(batch, score, scoreX, y); + + y -= 50 * scaleFactor; + } + + String continueText = "Backspace. Back"; + GlyphLayout continueLayout = new GlyphLayout(font30, continueText); + font30.draw(batch, continueText, game.getWorldWidth() / const_larg, game.getWorldHeight() * 0.1f); + } + + + public void dispose() { + font30.dispose(); + font100.dispose(); + font150.dispose(); + } + + public void setHordas(int hordas) { + this.hordas = hordas; + } + + public int getHordas() { + return hordas; + } +} diff --git a/core/src/main/java/com/space/game/states/GameOverState.java b/core/src/main/java/com/space/game/states/GameOverState.java new file mode 100644 index 0000000..c102c07 --- /dev/null +++ b/core/src/main/java/com/space/game/states/GameOverState.java @@ -0,0 +1,153 @@ +package com.space.game.states; + +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.space.game.managers.GameStateManager; +import com.space.game.managers.GameStateManager.State; +import com.space.game.managers.MapManager; +import com.space.game.managers.SoundManager; +import com.space.game.managers.UIManager; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input; +import com.badlogic.gdx.utils.TimeUtils; +import com.space.game.managers.ScoreManager; +import com.badlogic.gdx.Input.Keys; +import java.util.HashMap; +import java.util.Map; + +public class GameOverState implements GameStateInterface { + + private UIManager uiManager; + private MapManager mapManager; + private SoundManager soundManager; + private GameStateManager gsm; + private String playerName; // Para armazenar o nome do jogador + private boolean enterName = false; + private long lastBlinkTime; // Variável para controlar o tempo de piscar + private boolean showCursor = true; // Variável para alternar a exibição do cursor + private ScoreManager scoreManager; + Map keyToCharMap; + + public GameOverState(GameStateManager gsm, MapManager mapManager, UIManager uiManager, SoundManager soundManager) { + this.uiManager = uiManager; + this.mapManager = mapManager; + this.soundManager = soundManager; + this.gsm = gsm; + this.scoreManager = new ScoreManager(); + + // Mapear teclas para caracteres correspondentes + keyToCharMap = new HashMap<>(); + + keyToCharMap.put(Keys.A, "A"); + keyToCharMap.put(Keys.B, "B"); + keyToCharMap.put(Keys.C, "C"); + keyToCharMap.put(Keys.D, "D"); + keyToCharMap.put(Keys.E, "E"); + keyToCharMap.put(Keys.F, "F"); + keyToCharMap.put(Keys.G, "G"); + keyToCharMap.put(Keys.H, "H"); + keyToCharMap.put(Keys.I, "I"); + keyToCharMap.put(Keys.J, "J"); + keyToCharMap.put(Keys.K, "K"); + keyToCharMap.put(Keys.L, "L"); + keyToCharMap.put(Keys.M, "M"); + keyToCharMap.put(Keys.N, "N"); + keyToCharMap.put(Keys.O, "O"); + keyToCharMap.put(Keys.P, "P"); + keyToCharMap.put(Keys.Q, "Q"); + keyToCharMap.put(Keys.R, "R"); + keyToCharMap.put(Keys.S, "S"); + keyToCharMap.put(Keys.T, "T"); + keyToCharMap.put(Keys.U, "U"); + keyToCharMap.put(Keys.V, "V"); + keyToCharMap.put(Keys.W, "W"); + keyToCharMap.put(Keys.X, "X"); + keyToCharMap.put(Keys.Y, "Y"); + keyToCharMap.put(Keys.Z, "Z"); + } + + @Override + public void enter() { + enterName = false; + playerName = ""; + lastBlinkTime = TimeUtils.millis(); // Inicializa o tempo de piscar + soundManager.stopMusic(); + soundManager.playGameOverMusic(); + } + + @Override + public void update(SpriteBatch batch) { + if (enterName) { + setupUI(); + } else { + uiManager.displayGameOverInfo(mapManager.getSpaceship()); + handleInput(); + } + } + + @Override + public State getState() { + return State.GAME_OVER; + } + + @Override + public void exit() { + mapManager.freeSpaceship(); + mapManager.dispose(); + } + + private void handleInput() { + if (Gdx.input.isKeyJustPressed(Input.Keys.ENTER)) { + // verificar se ja tem 10 scores salvos e se o score atual é menor que o ultimo salvo + if (scoreManager.isHighScore(mapManager.getSpaceship().getKillCount())) { + // enterName = true; + setupUI(); + } else { + soundManager.stopGameOverMusic(); + gsm.setState(State.MENU); + } + + } + } + + private void setupUI() { + // Alterna a exibição do cursor a cada 500 milissegundos + if (TimeUtils.timeSinceMillis(lastBlinkTime) > 500) { + showCursor = !showCursor; + lastBlinkTime = TimeUtils.millis(); + } + + uiManager.displaySaveScore(mapManager.getSpaceship(), playerName, showCursor); + + // Verificar teclas pressionadas e atualizar o nome do jogador + for (Map.Entry entry : keyToCharMap.entrySet()) { + if (Gdx.input.isKeyJustPressed(entry.getKey()) && playerName.length() < 10) { + playerName += entry.getValue(); + } + } + + // Verificar tecla BACKSPACE + if (Gdx.input.isKeyJustPressed(Keys.BACKSPACE) && playerName.length() > 0) { + playerName = playerName.substring(0, playerName.length() - 1); + } + + // Verificar tecla ENTER para salvar o score + if (Gdx.input.isKeyJustPressed(Keys.ENTER) && enterName) { + if (playerName.isEmpty()) { + System.out.println("Player name is empty, setting to UNKNOWN"); + playerName = "UNKNOWN"; + } + saveScore(playerName, mapManager.getSpaceship().getKillCount()); + soundManager.stopGameOverMusic(); + gsm.setState(State.MENU); + System.out.println("Score saved"); + } + + if (!enterName) { + enterName = true; + } + } + + private void saveScore(String playerName, int score) { + scoreManager.saveScore(playerName, score); + } +} diff --git a/core/src/main/java/com/space/game/states/GameStateInterface.java b/core/src/main/java/com/space/game/states/GameStateInterface.java new file mode 100644 index 0000000..5d70d9a --- /dev/null +++ b/core/src/main/java/com/space/game/states/GameStateInterface.java @@ -0,0 +1,11 @@ +package com.space.game.states; + +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.space.game.managers.GameStateManager.State; + +public interface GameStateInterface { + void enter(); + void update(SpriteBatch batch); + State getState(); + void exit(); +} diff --git a/core/src/main/java/com/space/game/states/MenuState.java b/core/src/main/java/com/space/game/states/MenuState.java new file mode 100644 index 0000000..a358505 --- /dev/null +++ b/core/src/main/java/com/space/game/states/MenuState.java @@ -0,0 +1,71 @@ +package com.space.game.states; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.space.game.managers.GameStateManager; +import com.space.game.managers.SoundManager; +import com.space.game.managers.UIManager; +import com.space.game.managers.GameStateManager.State; + +public class MenuState implements GameStateInterface { + private UIManager uiManager; + private SoundManager soundManager; + private GameStateManager gsm; + private boolean isPlaying; + + public MenuState(GameStateManager gsm, UIManager uiManager, SoundManager soundManager) { + this.uiManager = uiManager; + this.soundManager = soundManager; + this.gsm = gsm; + } + + @Override + public void enter() { + soundManager.playMenuMusic(); + isPlaying = false; + } + + @Override + public void update(SpriteBatch batch) { + if (isPlaying) { + uiManager.displayGameControls(); + } else { + uiManager.displayMenu(); + } + // Verificar entrada do usuário para iniciar o jogo + handleInput(); + } + + @Override + public State getState() { + return State.MENU; + } + + @Override + public void exit() { + // soundManager.stopMenuMusic(); + } + + private void handleInput() { + if (!isPlaying){ + if (Gdx.input.isKeyJustPressed(Input.Keys.NUM_1)) { + isPlaying = true; + } else if (Gdx.input.isKeyJustPressed(Input.Keys.NUM_2)) { + gsm.setState(State.SCORES); + } else if (Gdx.input.isKeyJustPressed(Input.Keys.NUM_0)) { + System.out.println("Key 0 pressed, exiting the game."); // Depuração + Gdx.app.exit(); + } + } else { + if (Gdx.input.isKeyJustPressed(Input.Keys.ENTER)) { + soundManager.stopMenuMusic(); + soundManager.playMusic(); + gsm.setState(State.PLAYING); + } else if (Gdx.input.isKeyJustPressed(Input.Keys.BACKSPACE)) { + isPlaying = false; + } + } + } +} + diff --git a/core/src/main/java/com/space/game/states/PausedState.java b/core/src/main/java/com/space/game/states/PausedState.java new file mode 100644 index 0000000..f1dd18b --- /dev/null +++ b/core/src/main/java/com/space/game/states/PausedState.java @@ -0,0 +1,69 @@ +package com.space.game.states; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.space.game.managers.GameStateManager; +import com.space.game.managers.GameStateManager.State; +import com.space.game.managers.MapManager; +import com.space.game.managers.SoundManager; +import com.space.game.managers.UIManager; + +public class PausedState implements GameStateInterface { + + private UIManager uiManager; + private MapManager mapManager; + private GameStateManager gsm; + private SoundManager soundManager; + private boolean wasPlaying; + + public PausedState(GameStateManager gsm, MapManager mapManager, UIManager uiManager, SoundManager soundManager) { + this.uiManager = uiManager; + this.mapManager = mapManager; + this.gsm = gsm; + this.soundManager = soundManager; + } + + @Override + public void enter() { + if (soundManager.isPlaying()){ + soundManager.pauseMusic(); + wasPlaying = true; + } else { + wasPlaying = false; + } + } + + @Override + public void update(SpriteBatch batch) { + mapManager.update(); + mapManager.render(batch); + uiManager.displayPausedInfo(mapManager.getSpaceship()); + + handleInput(); + } + + @Override + public State getState() { + return State.PAUSED; + } + + @Override + public void exit() { + + } + + private void handleInput() { + if (Gdx.input.isKeyJustPressed(Input.Keys.ENTER)) { + if (wasPlaying) { + soundManager.resumeMusic(); + } + gsm.setState(State.PLAYING); + } else if (Gdx.input.isKeyJustPressed(Input.Keys.BACKSPACE)) { + soundManager.stopMusic(); + mapManager.dispose(); + gsm.setState(State.MENU); + } + } + +} diff --git a/core/src/main/java/com/space/game/states/PlayingState.java b/core/src/main/java/com/space/game/states/PlayingState.java new file mode 100644 index 0000000..12b82db --- /dev/null +++ b/core/src/main/java/com/space/game/states/PlayingState.java @@ -0,0 +1,50 @@ +package com.space.game.states; + +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.space.game.managers.GameStateManager; +import com.space.game.managers.GameStateManager.State; +import com.space.game.managers.MapManager; +import com.space.game.managers.SoundManager; +import com.space.game.managers.UIManager; +import com.space.game.Game; + +public class PlayingState implements GameStateInterface { + + private UIManager uiManager; + private MapManager mapManager; + private SoundManager soundManager; + + public PlayingState(Game game, GameStateManager gsm, UIManager uiManager, SoundManager soundManager) { + this.uiManager = uiManager; + this.mapManager = game.getMapManager(); + this.soundManager = soundManager; + + } + + @Override + public void enter() { + if (this.mapManager.getSpaceship() == null){ + System.out.println("Loading level 1"); + this.mapManager.loadLevel(1); + } + // soundManager.playMusic(); + } + + @Override + public void update(SpriteBatch batch) { + mapManager.update(); + mapManager.render(batch); + uiManager.displayGameInfo(mapManager.getSpaceship()); + } + + @Override + public State getState() { + return State.PLAYING; + } + + @Override + public void exit() { + + } + +} diff --git a/core/src/main/java/com/space/game/states/ScoresState.java b/core/src/main/java/com/space/game/states/ScoresState.java new file mode 100644 index 0000000..d779698 --- /dev/null +++ b/core/src/main/java/com/space/game/states/ScoresState.java @@ -0,0 +1,56 @@ +package com.space.game.states; + +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.space.game.managers.GameStateManager; +import com.space.game.managers.UIManager; +import java.util.List; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input; +import com.space.game.managers.GameStateManager.State; +import com.space.game.managers.ScoreManager; + +public class ScoresState implements GameStateInterface { + + private UIManager uiManager; + private GameStateManager gsm; + private List scoresList; + private ScoreManager scoreManager; + + public ScoresState(GameStateManager gsm, UIManager uiManager) { + this.uiManager = uiManager; + this.gsm = gsm; + this.scoreManager = new ScoreManager(); + + } + + @Override + public void enter() { + // soundManager.playScoresMusic(); + scoresList = scoreManager.loadScores(); + } + + @Override + public void update(SpriteBatch batch) { + uiManager.displayScores(scoresList); + handleInput(); + } + + + @Override + public State getState() { + return State.SCORES; + } + + @Override + public void exit() { + // soundManager.stopScoresMusic(); + } + + private void handleInput() { + if (Gdx.input.isKeyJustPressed(Input.Keys.BACKSPACE)) { + gsm.setState(State.MENU); + } + } + + +} diff --git a/data/scores.csv b/data/scores.csv new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/data/scores.csv @@ -0,0 +1 @@ + diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..c552283 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,9 @@ +org.gradle.daemon=true +org.gradle.jvmargs=-Xms512M -Xmx1G +org.gradle.configureondemand=false +ashleyVersion=1.7.4 +box2dlightsVersion=1.5 +gdxControllersVersion=2.2.3 +graalHelperVersion=2.0.1 +enableGraalNative=false +gdxVersion=1.12.1 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..e644113 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..a441313 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..b740cf1 --- /dev/null +++ b/gradlew @@ -0,0 +1,249 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..25da30d --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/lwjgl3/build.gradle b/lwjgl3/build.gradle new file mode 100644 index 0000000..182cff4 --- /dev/null +++ b/lwjgl3/build.gradle @@ -0,0 +1,113 @@ +buildscript { + repositories { + gradlePluginPortal() + } + dependencies { + if(enableGraalNative == 'true') { + classpath "org.graalvm.buildtools.native:org.graalvm.buildtools.native.gradle.plugin:0.9.28" + } + } +} +plugins { + id "io.github.fourlastor.construo" version "1.1.1" + id "application" +} + + +import io.github.fourlastor.construo.Target + +sourceSets.main.resources.srcDirs += [ rootProject.file('assets').path ] +mainClassName = 'com.space.game.lwjgl3.Lwjgl3Launcher' +application.setMainClass(mainClassName) +eclipse.project.name = appName + '-lwjgl3' +java.sourceCompatibility = 11 +java.targetCompatibility = 11 + +dependencies { + implementation "com.badlogicgames.gdx-controllers:gdx-controllers-desktop:$gdxControllersVersion" + implementation "com.badlogicgames.gdx:gdx-backend-lwjgl3:$gdxVersion" + implementation "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-desktop" + implementation "com.badlogicgames.gdx:gdx-bullet-platform:$gdxVersion:natives-desktop" + implementation "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop" + implementation "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop" + implementation project(':core') +} + +def jarName = "${appName}-${version}.jar" +def os = System.properties['os.name'].toLowerCase() + +run { + workingDir = rootProject.file('assets').path + setIgnoreExitValue(true) + + if (os.contains('mac')) jvmArgs += "-XstartOnFirstThread" +} + +jar { +// sets the name of the .jar file this produces to the name of the game or app. + archiveFileName.set(jarName) +// using 'lib' instead of the default 'libs' appears to be needed by jpackageimage. + destinationDirectory = file("${project.layout.buildDirectory.asFile.get().absolutePath}/lib") +// the duplicatesStrategy matters starting in Gradle 7.0; this setting works. + duplicatesStrategy(DuplicatesStrategy.EXCLUDE) + dependsOn configurations.runtimeClasspath + from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } +// these "exclude" lines remove some unnecessary duplicate files in the output JAR. + exclude('META-INF/INDEX.LIST', 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA') + dependencies { + exclude('META-INF/INDEX.LIST', 'META-INF/maven/**') + } +// setting the manifest makes the JAR runnable. + manifest { + attributes 'Main-Class': project.mainClassName + } +// this last step may help on some OSes that need extra instruction to make runnable JARs. + doLast { + file(archiveFile).setExecutable(true, false) + } +} + +construo { + // name of the executable + name.set(appName) + // human-readable name, used for example in the `.app` name for macOS + humanName.set(appName) + // Optional, defaults to project version + version.set("0.0.0") + + targets.configure { + create("linuxX64", Target.Linux) { + architecture.set(Target.Architecture.X86_64) + jdkUrl.set("https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.11%2B9/OpenJDK17U-jdk_x64_linux_hotspot_17.0.11_9.tar.gz") + } + create("macM1", Target.MacOs) { + architecture.set(Target.Architecture.AARCH64) + jdkUrl.set("https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.11%2B9/OpenJDK17U-jdk_aarch64_mac_hotspot_17.0.11_9.tar.gz") + // macOS needs an identifier + identifier.set("i.should.be.changed.before.merge." + appName) + // Optional: icon for macOS + macIcon.set(project.file("icons/logo.icns")) + } + create("macX64", Target.MacOs) { + architecture.set(Target.Architecture.X86_64) + jdkUrl.set("https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.11%2B9/OpenJDK17U-jdk_x64_mac_hotspot_17.0.11_9.tar.gz") + // macOS needs an identifier + identifier.set("i.should.be.changed.before.merge." + appName) + // Optional: icon for macOS + macIcon.set(project.file("icons/logo.icns")) + } + create("winX64", Target.Windows) { + architecture.set(Target.Architecture.X86_64) + jdkUrl.set("https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.11%2B9/OpenJDK17U-jdk_x64_windows_hotspot_17.0.11_9.zip") + } + } +} + +// Equivalent to the jar task; here for compatibility with gdx-setup. +tasks.register('dist') { + dependsOn 'jar' +} + +if(enableGraalNative == 'true') { + apply from: file("nativeimage.gradle") +} diff --git a/lwjgl3/icons/logo.icns b/lwjgl3/icons/logo.icns new file mode 100644 index 0000000..5e41ad7 Binary files /dev/null and b/lwjgl3/icons/logo.icns differ diff --git a/lwjgl3/icons/logo.ico b/lwjgl3/icons/logo.ico new file mode 100644 index 0000000..c4f2d5e Binary files /dev/null and b/lwjgl3/icons/logo.ico differ diff --git a/lwjgl3/icons/logo.png b/lwjgl3/icons/logo.png new file mode 100644 index 0000000..788f542 Binary files /dev/null and b/lwjgl3/icons/logo.png differ diff --git a/lwjgl3/nativeimage.gradle b/lwjgl3/nativeimage.gradle new file mode 100644 index 0000000..255dc0d --- /dev/null +++ b/lwjgl3/nativeimage.gradle @@ -0,0 +1,65 @@ + +project(":lwjgl3") { + apply plugin: "org.graalvm.buildtools.native" + + dependencies { + implementation "io.github.berstanio:gdx-svmhelper-backend-lwjgl3:$graalHelperVersion" + implementation "io.github.berstanio:gdx-svmhelper-extension-box2d:$graalHelperVersion" + implementation "io.github.berstanio:gdx-svmhelper-extension-bullet:$graalHelperVersion" + implementation "io.github.berstanio:gdx-svmhelper-extension-freetype:$graalHelperVersion" + } + graalvmNative { + binaries { + main { + imageName = appName + mainClass = project.mainClassName + requiredVersion = '23.0' + buildArgs.add("-march=compatibility") + jvmArgs.addAll("-Dfile.encoding=UTF8") + sharedLibrary = false + } + } + } + + run { + doNotTrackState("Running the app should not be affected by Graal.") + } + + // Modified from https://lyze.dev/2021/04/29/libGDX-Internal-Assets-List/ ; thanks again, Lyze! + // This creates a resource-config.json file based on the contents of the assets folder (and the libGDX icons). + // This file is used by Graal Native to embed those specific files. + // This has to run before nativeCompile, so it runs at the start of an unrelated resource-handling command. + generateResourcesConfigFile.doFirst { + def assetsFolder = new File("${project.rootDir}/assets/") + def lwjgl3 = project(':lwjgl3') + def resFolder = new File("${lwjgl3.projectDir}/src/main/resources/META-INF/native-image/${lwjgl3.ext.appName}") + resFolder.mkdirs() + def resFile = new File(resFolder, "resource-config.json") + resFile.delete() + resFile.append( + """{ + "resources":{ + "includes":[ + { + "pattern": ".*(""") + // This adds every filename in the assets/ folder to a pattern that adds those files as resources. + fileTree(assetsFolder).each { + // The backslash-Q and backslash-E escape the start and end of a literal string, respectively. + resFile.append("\\\\Q${it.name}\\\\E|") + } + // We also match all of the window icon images this way and the font files that are part of libGDX. + resFile.append( + """libgdx.+\\\\.png|lsans.+)" + } + ]}, + "bundles":[] +}""" + ) + } +} + +project(":core") { + dependencies { + implementation "io.github.berstanio:gdx-svmhelper-annotations:$graalHelperVersion" + } +} diff --git a/lwjgl3/src/main/java/com/space/game/lwjgl3/Lwjgl3Launcher.java b/lwjgl3/src/main/java/com/space/game/lwjgl3/Lwjgl3Launcher.java new file mode 100644 index 0000000..8ce9435 --- /dev/null +++ b/lwjgl3/src/main/java/com/space/game/lwjgl3/Lwjgl3Launcher.java @@ -0,0 +1,34 @@ +package com.space.game.lwjgl3; + +import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application; +import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration; +import com.space.game.SpaceGame; + +/** Launches the desktop (LWJGL3) application. */ +public class Lwjgl3Launcher { + public static void main(String[] args) { + if (StartupHelper.startNewJvmIfRequired()) return; // This handles macOS support and helps on Windows. + createApplication(); + } + + private static Lwjgl3Application createApplication() { + return new Lwjgl3Application(new SpaceGame(), getDefaultConfiguration()); + } + + private static Lwjgl3ApplicationConfiguration getDefaultConfiguration() { + Lwjgl3ApplicationConfiguration configuration = new Lwjgl3ApplicationConfiguration(); + configuration.setTitle("Space Game"); + configuration.useVsync(true); + //// Limits FPS to the refresh rate of the currently active monitor. + configuration.setForegroundFPS(Lwjgl3ApplicationConfiguration.getDisplayMode().refreshRate); + //// If you remove the above line and set Vsync to false, you can get unlimited FPS, which can be + //// useful for testing performance, but can also be very stressful to some hardware. + //// You may also need to configure GPU drivers to fully disable Vsync; this can cause screen tearing. + // configuration.setWindowedMode(640, 480); + // configuration.setWindowIcon("libgdx128.png", "libgdx64.png", "libgdx32.png", "libgdx16.png"); + configuration.setFullscreenMode(Lwjgl3ApplicationConfiguration.getDisplayMode()); + configuration.setWindowIcon("assets\\images\\spaceships\\spaceship.png"); + + return configuration; + } +} \ No newline at end of file diff --git a/lwjgl3/src/main/java/com/space/game/lwjgl3/Space-Game-setup.ico b/lwjgl3/src/main/java/com/space/game/lwjgl3/Space-Game-setup.ico new file mode 100644 index 0000000..ccf03d0 Binary files /dev/null and b/lwjgl3/src/main/java/com/space/game/lwjgl3/Space-Game-setup.ico differ diff --git a/lwjgl3/src/main/java/com/space/game/lwjgl3/StartupHelper.java b/lwjgl3/src/main/java/com/space/game/lwjgl3/StartupHelper.java new file mode 100644 index 0000000..4003e6c --- /dev/null +++ b/lwjgl3/src/main/java/com/space/game/lwjgl3/StartupHelper.java @@ -0,0 +1,179 @@ +/* + * Copyright 2020 damios + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +//Note, the above license and copyright applies to this file only. + +package com.space.game.lwjgl3; + +import org.lwjgl.system.macosx.LibC; + +import java.io.BufferedReader; +import java.io.File; +import java.io.InputStreamReader; +import java.lang.management.ManagementFactory; +import java.util.ArrayList; + +/** + * Adds some utilities to ensure that the JVM was started with the + * {@code -XstartOnFirstThread} argument, which is required on macOS for LWJGL 3 + * to function. Also helps on Windows when users have names with characters from + * outside the Latin alphabet, a common cause of startup crashes. + *
+ * Based on this java-gaming.org post by kappa + * @author damios + */ +public class StartupHelper { + + private static final String JVM_RESTARTED_ARG = "jvmIsRestarted"; + + private StartupHelper() { + throw new UnsupportedOperationException(); + } + + /** + * Starts a new JVM if the application was started on macOS without the + * {@code -XstartOnFirstThread} argument. This also includes some code for + * Windows, for the case where the user's home directory includes certain + * non-Latin-alphabet characters (without this code, most LWJGL3 apps fail + * immediately for those users). Returns whether a new JVM was started and + * thus no code should be executed. + *

+ * Usage: + * + *


+     * public static void main(String... args) {
+     * 	if (StartupHelper.startNewJvmIfRequired(true)) return; // This handles macOS support and helps on Windows.
+     * 	// after this is the actual main method code
+     * }
+     * 
+ * + * @param redirectOutput + * whether the output of the new JVM should be rerouted to the + * old JVM, so it can be accessed in the same place; keeps the + * old JVM running if enabled + * @return whether a new JVM was started and thus no code should be executed + * in this one + */ + public static boolean startNewJvmIfRequired(boolean redirectOutput) { + String osName = System.getProperty("os.name").toLowerCase(); + if (!osName.contains("mac")) { + if (osName.contains("windows")) { +// Here, we are trying to work around an issue with how LWJGL3 loads its extracted .dll files. +// By default, LWJGL3 extracts to the directory specified by "java.io.tmpdir", which is usually the user's home. +// If the user's name has non-ASCII (or some non-alphanumeric) characters in it, that would fail. +// By extracting to the relevant "ProgramData" folder, which is usually "C:\ProgramData", we avoid this. + System.setProperty("java.io.tmpdir", System.getenv("ProgramData") + "/libGDX-temp"); + } + return false; + } + + // There is no need for -XstartOnFirstThread on Graal native image + if (!System.getProperty("org.graalvm.nativeimage.imagecode", "").isEmpty()) { + return false; + } + + long pid = LibC.getpid(); + + // check whether -XstartOnFirstThread is enabled + if ("1".equals(System.getenv("JAVA_STARTED_ON_FIRST_THREAD_" + pid))) { + return false; + } + + // check whether the JVM was previously restarted + // avoids looping, but most certainly leads to a crash + if ("true".equals(System.getProperty(JVM_RESTARTED_ARG))) { + System.err.println( + "There was a problem evaluating whether the JVM was started with the -XstartOnFirstThread argument."); + return false; + } + + // Restart the JVM with -XstartOnFirstThread + ArrayList jvmArgs = new ArrayList<>(); + String separator = System.getProperty("file.separator"); + // The following line is used assuming you target Java 8, the minimum for LWJGL3. + String javaExecPath = System.getProperty("java.home") + separator + "bin" + separator + "java"; + // If targeting Java 9 or higher, you could use the following instead of the above line: + //String javaExecPath = ProcessHandle.current().info().command().orElseThrow(); + + if (!(new File(javaExecPath)).exists()) { + System.err.println( + "A Java installation could not be found. If you are distributing this app with a bundled JRE, be sure to set the -XstartOnFirstThread argument manually!"); + return false; + } + + jvmArgs.add(javaExecPath); + jvmArgs.add("-XstartOnFirstThread"); + jvmArgs.add("-D" + JVM_RESTARTED_ARG + "=true"); + jvmArgs.addAll(ManagementFactory.getRuntimeMXBean().getInputArguments()); + jvmArgs.add("-cp"); + jvmArgs.add(System.getProperty("java.class.path")); + String mainClass = System.getenv("JAVA_MAIN_CLASS_" + pid); + if (mainClass == null) { + StackTraceElement[] trace = Thread.currentThread().getStackTrace(); + if (trace.length > 0) { + mainClass = trace[trace.length - 1].getClassName(); + } else { + System.err.println("The main class could not be determined."); + return false; + } + } + jvmArgs.add(mainClass); + + try { + if (!redirectOutput) { + ProcessBuilder processBuilder = new ProcessBuilder(jvmArgs); + processBuilder.start(); + } else { + Process process = (new ProcessBuilder(jvmArgs)) + .redirectErrorStream(true).start(); + BufferedReader processOutput = new BufferedReader( + new InputStreamReader(process.getInputStream())); + String line; + + while ((line = processOutput.readLine()) != null) { + System.out.println(line); + } + + process.waitFor(); + } + } catch (Exception e) { + System.err.println("There was a problem restarting the JVM"); + e.printStackTrace(); + } + + return true; + } + + /** + * Starts a new JVM if the application was started on macOS without the + * {@code -XstartOnFirstThread} argument. Returns whether a new JVM was + * started and thus no code should be executed. Redirects the output of the + * new JVM to the old one. + *

+ * Usage: + * + *

+     * public static void main(String... args) {
+     * 	if (StartupHelper.startNewJvmIfRequired()) return; // This handles macOS support and helps on Windows.
+     * 	// the actual main method code
+     * }
+     * 
+ * + * @return whether a new JVM was started and thus no code should be executed + * in this one + */ + public static boolean startNewJvmIfRequired() { + return startNewJvmIfRequired(true); + } +} \ No newline at end of file diff --git a/lwjgl3/src/main/resources/libgdx128.png b/lwjgl3/src/main/resources/libgdx128.png new file mode 100644 index 0000000..788f542 Binary files /dev/null and b/lwjgl3/src/main/resources/libgdx128.png differ diff --git a/lwjgl3/src/main/resources/libgdx16.png b/lwjgl3/src/main/resources/libgdx16.png new file mode 100644 index 0000000..47af189 Binary files /dev/null and b/lwjgl3/src/main/resources/libgdx16.png differ diff --git a/lwjgl3/src/main/resources/libgdx32.png b/lwjgl3/src/main/resources/libgdx32.png new file mode 100644 index 0000000..4cf903a Binary files /dev/null and b/lwjgl3/src/main/resources/libgdx32.png differ diff --git a/lwjgl3/src/main/resources/libgdx64.png b/lwjgl3/src/main/resources/libgdx64.png new file mode 100644 index 0000000..ebcd8f1 Binary files /dev/null and b/lwjgl3/src/main/resources/libgdx64.png differ diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..374cd64 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,4 @@ +// A list of which subprojects to load as part of the same larger project. +// You can remove Strings from the list and reload the Gradle project +// if you want to temporarily disable a subproject. +include 'lwjgl3', 'core'