Korge 2.0 Released! 🎉🎉🎊 KTree, Spine, improved tooling, lightning fast sprites and much more!
Woah! It has been almost two years since 1.0 was released and almost four years since the first public version! A lot has happened since then.
We created the KorGE organization korge.org and now we are a few members included @emign , @RezMike, @tamygm21, @TobseF , and recently @avdim welcome! Thank you all for joining the org and contributing to this project, you are the best!
We also organized a GameJAM with prizes hosted at itch.io, that helped to promote the engine. And we plan to make several more chill JAMs during the next year.
Not only that: some people helped us contributing with money to the project both to me personally and to our patreon page. We are really grateful for that. Thank you very much! We plan to use that money to make KorGE grow faster so you can get a much more mature engine with an active nice community.
- Github sponsors: @TobseF, @smelc, @ryopei, @danielgruber, @cmhulbert, @avdim, @pablocaviglia, +2 anonymous sponsors + other people that contributed some time
- Patreon (+discord): @kharf, @GEorge, @nanodeath, +1 anonymous patreon
This release includes lots of features and bug fixes from a lot of external contributors that helped making Korlibs much better than they are already! @andriipanasiuk (klock locales) , @Dambakk (klock locales), @IgnacioCarrionN (krypto & klock), @nanodeath (easing functions), @stewsters ( gamepad fixes), @sojuz151 (red images on some linux+amdgpu) , @dhakehurst (3D API improvements)
Thank to all the people at Discord, Slack, GitHub and our other channels giving feedback, reporting issues, helping other people. Remember: we have hundred of tasks, several channels, and other jobs, personal projects and lives. And in the end, a good day is not just coding, but having a healthy lifestyle with exercising, good eating, time for relax and investing time in our existing relationships while helping others and forging new friendships, making the world a better place to be a step at a time. So if we don’t fix the issue immediately, or take our time to reply, it is nothing personal; life happens! Thank you all for your huge patience and understanding!
We also want to thank JetBrains and the Kotlin team for making this awesome language and for helping us out with all the reported issues, listening to the community with feature requests and hosting our channels at Slack!
Now that we have reached 2.0, we are looking into the future and we are planning the next steps. Our first objective is to stabilize everything with your feedback, improve the editor, documenting all the missing stuff, while adding longstanding smaller features. For 3.0, we will match the version and the dimensions we support by adding an extra one 2D->3D, bringing a much mature three dimensional support including tooling, importing 3D models, and placing them into an integrated editor.
You can check our roadmap/board here: https://github.com/orgs/korlibs/projects/1
We have also moved the mmo-poc back to the korlibs organization. Now it is called korge-kingdom. We plan to migrate all the code to KorGE 2.0, and to the latest version of kotlinx.serialization and Ktor and make it available giving some perks to the sponsors and providing a nice client-server sample created using KorGE and Ktor while promoting the engine.
With all that said, let’s take a look at some of the new features! Full changelog here.
With the preview versions of the KorGE IntelliJ plugin, we added a new XML-based format for creating scenes combining several kind of views, including sub-ktrees into something bigger. With KorGE 2.0, you can already load those .ktree files and use them in your games!
Spine is a popular 2d-skeletal animation library and editor. It is not free, but it is probably the most popular one, it is feature packed, stable and its support was requested by many people. Now you can load your spine models with KorGE and preview them into the IntelliJ plugin!
We added an easy way to add sourcecode+resources via github without having to publish to a maven repository before. That’s the new bundle system. We created an open catalog: https://awesome.korge.org/ you can check the current bundles there and contribute with your own: https://github.com/korlibs/awesome.korge.org
You can for example get CC0 assets from https://opengameart.org/, put them into a git repository and add code that gives semantics to those assets, helping the community. We plan to expose published bundles and resources directly into the IntelliJ plugin in future versions. Remember that even if the resources are CC0, it is always nice to give proper credit to the assert authors!
Do you want to pause a music file and resume it later while performing fade in and fade outs? Now you can. Do you want MP3 files to load 10x faster as before? Here we go. And do you want to be able to easily add custom effects like echo? What about not wanting to type NativeSound because Sound is shorter and nicer? KorAU 2.0 to the rescue!
New integrated debugger
On the JVM target, we have an integrated debugger: a window opened on the side providing the whole render tree and supporting modifying the view properties on the fly as well as debugging global and local bound boxes.
Improved texts with TTF Font support
KorGE 1.x included a small pixelated bitmap font. 2.0 now includes an embedded TTF Font that will be used by default. The new Text view supports both vector TTF fonts and Bitmap fonts. When using TTF fonts, it will render into a texture that is nice for static texts and will regenerated if the text changes in size automatically to be , and with BitmapFonts will perform per-glyph batch rendering that is nice for texts that change frequently.
On the fly BitmapFont generation with effects
Now you can use any font to generate on the fly a new BitmapFont at a specific size. You can provide a custom fill for the bitmap font (either solid colors, textures or gradients) and provide effects like blurring, drop shadow or border. How cool is that?
How cool is that?
Sometimes you want to limit what you see of a view. For example by simulating a telescope or doing other kind of effects. Now you can!
You can mask several views at once
Transition mask support
Do you want to perform cool transitions to show/hide or transform a view into another? With the transition mask filter, you can now blend the alpha of a view with a mask bitmap or predefined transition mask, and do just that!
Transition mask is the one at the top-right
Know JQuery? This is a similar way to group from zero to many views into a single object that allows to for example apply alpha to several views at once, and to perform queries to select children.
The 10K sample looked not too impressive? We are with you! Now we provide a special container where you can put lots and lots of sprites from the same atlas. How many are lots you wonder? How about 200K while keeping it at 60fps on the JVM target? Nice!
Bunnymark port to KorGE
Lots of input fixes
Mouse wheel, detecting shift, control, alt, while moving the mouse. Or detecting keys on our new target Android TV.
Resource caching system
With KorGE 2.0 we rethought how we were loading/unloading resources and managed to create a new system that is simple and works like lazy but asynchronous, and can be invalidated in some circumstances. Now you can define global resources that are kept the whole time, and local resources that are loaded and unloaded along scenes following their lifecycle.
Kotlin 1.4.20 and IR-JS
API improvements, fixes and deprecated stuff
In KorGE 1.x we accumulated a lot of APIs that we deprecated, but kept temporarily to make transition easier. Now in KorGE 2.0 they are gone, giving more space to pack new stuff.
We have also fixed a lot of longstanding issues, like the red images happening on some Linux with AMD gpus, or not being able to execute the game into an iOS simulator directly from a gradle task.
In-project plugins and resource processors
Resource processors only used to work with loaded dependencies. Now you can define plugins in your own project.
You can try new KorGE by using the IntelliJ plugin or updating your already existing target to 188.8.131.52. Keep in mind
that now the targets are defined manually to prevent downloading unused artifacts. To keep the old behaviour, just
targetDefault() on the korge block in your build.gradle file.
We will update the documentation, samples and other stuff remaining in the coming weeks. Feel free to join us at Discord, Forum, Stackoverflow, Github and Slack for any questions, reporting issues and giving feedback!
Have a nice Kotlin and KorGE your game ideas!