Reading Time: 12 minutes

Creating Game Pencil's LTS version 1.6.X

So a couple of months have gone by and after dozens of hours of making the next iteration of Game Pencil and the 'lowkey secret' of github and my laptop I have some exciting updates to share.

Long Term Support and BETA versions incoming!

So people can begin being more comfortable with the editor and engine I have decided to seperate new code and updates into two seperate branches.

One branch will be titled LTS an acrynym for "Long Term Support". It can be thought of as a version meant exclusively for tightly tested features and less prone to crashes and weird bugs and behaviors.

Secondly we will have the BETA branch. This branch is meant for testing new features and is not considered stable for a production release. This will be where most of the 'fun happens'.

Farewell HTML5 via JavaScript based engine

Next, if there are any HTML5 users out there, there is no easy way to say this; but Game Pencil Engine will not be supporting HTML5 via a seperate HTML5 runtime.
For those interested in using HTML5 they are advised to use an engine like Construct or Game Maker, Phaser, etc.

The original version of this editor was meant to be a Desktop Editor for making Wii U and HTML5 based games, but something like that is probably better for other engines.

This will allow us to focus solely on making native based games via the Game Pencil Engine.

Of course, you can try to use enscripten, but this is currently not supported in 1.6X.

Next up is a big one.

Hello to 2D, 2.5D and 3D Modes in Editor and Engine

I have begun experimenting with Renderer/Artist multi-views and cameras. This will be a juicy update for those using the Raylib backend for 3D camera support within the editor as well.

In regards to the SDL 2.x backend, support wil also come for doing 2.5D rendering.

Although, not confirmed there is hope that SDL3 may include it's own version of 3D based rendering. If this happens, of course we will be on that like white on rice!

The editor will have in the top buttombar an eye that opens up a drop down menu in which you can select the view you are currently in. For those Godoters this is similiar to toggling between 2D or 3D.

The main difference is that instead of a tab, it is a drop down menu to incorporate 2.5D based views as well and to keep the screen not filled with all of the options.

These current editors are responsive to this change:

-Animation[2d] Editor
-Font Editor
-Particle Editor
-Path Editor
-Scene Editor
-Texture Editor
-Tilesheet Editor

Preparing for 3D and other editor types

Currently there is no editor for these, but in advance I have also added the following Branch types:

  • SHADER = 22,
  • SEQUENCE = 23,
  • _3D_MODEL = 24,
  • _3D_ANIMATION = 25,
  • _3D_LIGHT = 26,
  • _3D_OTHER = 27,
  • _3D_OTHER2 = 28,
  • _3D_OTHER3 = 29,

The last 3 are just placeholders in case I forgot something useful.

Improving 2D Animations and storing data

Next up is 2D Animations and the 2D Animation Editor:

I have created a new class(possibly struct in the future) called 'animation2d_frame_data' this will store the 2D animation's frame for
rendering as well as another rectangle for it's collision shape and an int for it's collision radius. The reasoning is in some odd cases, the collision box can differ by frame.

This also merges the 3 vectors into one vector and hopefully helps storage and navigation between these relevant data fields a little bit more easier to map out.

Currently these are all set to public, but it will be advised to treat it like a protected or private variable outside of the scene class( maybe i'll make em' friends later).

Within this new class is also a brand new int called frame_message_id that will store a coordinated message to said frame that it will tell the world about when it reaches said frame.

-In the Animation Editor we will store a new vector to keep track of each individual frame. I will as well make it easy to set each frame to the current frame data as well.

-Within the Animation Editor will compose of a new parsable text editor where you can simply type an id and then add a message that is assigned to said id ( mayhaps made cleaner and cooler later).

Scene Layer upgrades

-Adding object depth sorting on a frame by frame basis. This for now will be experimental as it may require optimization later, especially for large scenes with tens of thousands of objects.
--This feature is quite important especially for top down / ortho view based RPGs/Adventure games when tryin to make sure sprites/objects stack into the player's eyes in a rational matter.

Flirting with IMGUI

-For the 1.6x I am still using PAWGUI, which has not been updated in ages, but all of the currently needed classes are there.
For newer GUI elements I may begin to see if I can firstly have IMGUI copy the actual theme of PAWGUI and then have it take over new GUI elements.
IMGUI is a legendary GUI software and over the past decades it has been a tried and tested GUI engine.
Originally when development on this engine first began, it was not considered because it was simply a newer released technology. Typing out that sentence feels surreal to me even.

No lie, IMGUI has far more GUI features and fan-created extensions than I ever hope to make and is literally responsible for SDL 2.x being able to render geometry versus the classical pointilism many developers used to depend on.
The main reaosn for not a flat out switch(just yet) is deleting and changing out the architecture can take too many man hours and also result in unexpected crashes since PAWGUI is tied to the engine/editor and not a 3rd party addon.

Stay alert for any random IMGUI menus and integrations in coming versions ( teehee)


Avoided in this version, but absolutely neccesary in the future ===

These features are currently avoided as it does not relate to creating games/apps in editor, which is the goal of 1.6X. They are indeed important, just are delayable as it currently does not cause memory leaks/random crashes,etc.

1. Audio Handling and effects

--- 3D positional audio built into the main audio module or a seperate module.
--- Increased sound effects.
--- Boolean flags/functions for if module supports those effects ( i.e if soloud, SDL2_Mixer, SDL3_Mixer, Raylib Audio, etc supports XYZ).

2. Fonts and Font Editor optimizations

--- This will most likely be a 1.65 LTS and beyond feature, but the way fonts are currently handled, cached and rendered via the SDL2.x backend is a huge memory and GPU hog. It currently suprisingly does not appear to reduce FPS or anything; however, if you look at that class you may want to ask me, "Why, bro? How is this even scalable". So for now, just consider this a feature that will be fixed later, but 1.60 is not that version.

3. Localization

--- Being American and able to barely speak English,does not mean the entire world speaks American English. I plan to start reading texts from translation files and hopefully would have an option to select in editor between:
"American English", "British English", "Spanish" and "Mexican Spanish" soon.

4.Raylib module improvements

--- Raylib will most likely be the choice for people interested in full 3D via Game Pencil, so making sure it stays updated more frequently will be needed for LTS and Release branches.

Avoiding Feature Creeping

Althoughh considered, I did not implement the following features to avoid making features for the sake of being a feature creep. These features are not immediately neccesary for any of the games I plan to develop within the next couple of years using this engine.

The reasoning is this is really feature creeping and if wanted badly someone else should contribute as no games I have in mind require these features. Ordered alphabetically:

2D Collision upgrades avoided for 1.6x:

-Elipses collision - rare and probably useful only in 2D/scaling objects
-Diamond collision, rare and probably useful only in 2D
-Precise collisions, usually slow and CPU intensive

Animation Timelines / Exposure Sheets and Editors

I felt myself singing the "How can I say no to this?" song from Hamilton as this is a feature I was craving, but knew it can lowkey wait. Of all of the features added to this list, this was the most tempting to add to engine now. 🙂

MarkDown viewer and editor

This would've been cool for adding tutorials within the editor as well as for project management/information, but with a race for borrowed time, it was not crucial.

SDL 3.x module

Although SDL 3.x is not fully in the wild yet, current iterations is available via github. Since this is a LTS version, there is no need to create a SDL 3.x module just yet as it will take some time for it to be released and usable.

Shaders and Shader Editors:

-3D is in early infancy for Game Pencil and will not be exportable until I personally have released two 2D games using the engine. This helps to avoid maintenance need.
-Blend modes and lighting effects for now will have to do for Game Pencil.
-I of course know that you can use shaders for 2D games as well, but currently this can wait as Raylib is the only module that supports shaders and it is not too important for the games I am developing. This was the second most wanted feature, but alas does Super Mario World have Shaders?

Sound cropping and manipulation

--Via SDL_Mixer_Bark there are some features to crop sound and music, however; it can be optimized. I am not creating Guitar Hero or my own version of iTunes anytime soon, for now this will be avoided.

Video Playback

--This feature was of course easy to implement via the HTML5 export, but doing it natively and being aware of so many endless codecs and licensing is harder and currently is not being considered right now.
--There is hope for a .webm and .mp4 player, but as said, it's a feature not needed right now and not needed for many indie games.

WebViewer in engine

--Although this is often seen in many mobile applications

Feature creeping is the King of project delays, cancellations and failures. Gotta stay the course.

That is all for now. Version 1.6X is not released yet, feel free to check out the github for commits and branches.