TweenGMS Dev History (Part 1)

TweenGMSAs of writing this, I just completed a large update(v0.9.70) for TweenGMS. It adds a lot to the engine, while stripping away many redundant scripts which cluttered previous versions. I hope to have version 1.0 *fingers crossed* released by the end of the year.

I have now been working on the engine for nearly 3 years… crazy. Creating the tool has been an interesting adventure. At the beginning, I hardly knew what tweening was. Before TweenGMS, my previous experience included dabbling with a tweening engine in Unity, for about 30 minutes, a year before. I still hadn’t “got it”.

Back in 2012, a couple of weeks before Halloween, I decided that I wanted to make a “stupid little game” for the season. And, inspired by this video, I wanted to use the project as a way to learn and apply tweening. The result was Sugar Crash, a “stupid little game” made in just a few days which would later become the base for TweenGMS. (The game was originally called “Candy Crash” and was out before Candy Crush was on mobile platforms… I had never heard of Candy Crush)

When I set out to create my own tweening engine in GameMaker, I decided from the start to not reference other engines. I used Robert Penner’s easing algorithms as a base and went from there. I didn’t want to mold the engine around common standards found in other engines. Instead, I wanted to build it in a way that made sense for my own needs and worked best with GameMaker’s GML language. I didn’t know if I was “doing it right”, but I started to form a system which was relatively simple to use and did what I needed it to. That’s got to count for something!

To be continued…

 

Harry High Dive

I recently finished up work on a new mobile game, “Harry High Dive”. I have been working on it part time as the programmer since last September(?) and have finally managed to put the finishing touches on it. Even “simple” projects can take much longer than expected when adding time for polish.

Anyhow, feel free to check it out! It is currently available for Android devices on Google Play, but will also be available for iOS soon enough!

harry_menuharry_climbharry_dive

TweenGMS – YYC Performance Boost

With TweenGMS, I have made use of script_execute() functions instead of switch statements to enhance performance. However, I have since found that this optimisation, while improving the standard VM and JS exports, greatly limits the YYC (C++ compiler). So, I experimented with changing out script_execute() for switch statements when executing property setters and easing algorithms. The performance gains for YYC were much higher than I originally expected. Below are benchmark results from my test.

The benchmark used patrolling tweens with the EaseInOutSine algorithm. The numbers below represent the number of tweens running before frame rate drops below 30. Run on a AMD 2.2GHZ quad core cpu (only one core used).

3500VM Runner using switch statement

5220VM Runner using script_execute() -> 49% gain over previous

12720YYC using script_execute() -> 144% gain over previous

28240YYC using switch statement -> 122% gain over previous

As you can see, there is a huge difference between these numbers. It is easy to see why I originally used script_execute, as it greatly improves performance for the standard VM Runner by nearly 50%. When using script_execute, there are still massive gains over the VM Runner when using the YYC. However, when reverting back to switch statements for the YYC, gains are through the roof. YYC performance more than doubles and pushes 5X faster than the optimised VM Runner version(8X faster than VM-switch).

In a future TweenGMS update, I will be adding an optional optimisation path which will allow you to get these gains when using the YYC. By default, the system will continue to use script_execute, but with a tiny bit of extra work, you can easily switch on (or off) the YYC optimisations provided by managed switch statements for easing algorithms and property setters.

 

TweenGMS 2nd Anniversary

The first version of TweenGMS was made public on November 25, 2012. To celebrate 2 years of development, TweenGMS will be discounted 50% on the GameMaker Marketplace until November 26.

I’d like to give a sincere thanks to those who have been supportive of this ongoing project.

If you are curious to see what TweenGMS was like on it’s initial release, you can download the first available public version.

[TweenGMS Dev] Sequences and Drag ‘n Drop

After a bunch of distracted tinkering, it looks like Sequences as well as Drag and Drop functionality will make their way into the next TweenGMS (0.9.6) update.

Sequences present an alternative to using tween delays. They allow you to set an order of tweens to be executed one after the other. Unlike the use of delays, this allows you to make individual timing changes without having to change values for other various scheduled tweens. It will also allow you to pause, resume, cancel or generally manipulate whole sequences.

Dragging and a dropping!

Dragging and a dropping!

As for the addition of Drag and Drop functionality, it is intended to make things more accessible for new users and amuse those with an unhealthy addiction to dragging things around. Essential DnD functions will be provided, such as easing an instance’s position, angle, direction, speed, alpha, image blend, image index as well as path tweening. A general function will also be provided for easing custom property values.

If all goes well, these features and a few other tweaks should be live some time in November. If you are a user of TweenGMS, be sure to let me know if there are any other features you would like to see added!

-Stephen