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).
3500 - VM Runner using switch statement
5220 - VM Runner using script_execute() -> 49% gain over previous
12720 - YYC using script_execute() -> 144% gain over previous
28240 - YYC 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.
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.
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.
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!
Schedule scripts and any type of event, easily, with a single line of code!
Set schedule timers using steps or seconds. Pass arguments to scheduled scripts without hassle. Pause, resume, cancel, or immediately finish any schedule. Want a schedule to repeat a set number of times? Easy! Want it to repeat endlessly? You can do that, too!
Give ScheduleGMS a go and make things easier in no time!
- Step and delta timing
- Supports scripts and events
- Ability to supply arguments to scripts
- Cancel, pause, resume, or finish schedules
- Schedule control groups
- Ability to repeat schedules a set number of times (or endlessly)
- System-wide and schedule-specific time scale manipulation
- Persistent room and persistent instance support
- Useful support functions
- Documentation and example project
// Show message box "Hello" after 3 seconds schedule1 = ScheduleScript(id, true, 3, ShowMessage, "Hello"); // Call user event 1 after 30 steps schedule2 = ScheduleEventUser(obj_Player, false, 30, 1); // Execute mouse event after 5 seconds schedule3 = ScheduleEvent(id, true, 5, ev_mouse, ev_left_release); // Set schedules to repeat set number of times ScheduleSetRepeat(schedule1, 2); // play twice ScheduleSetRepeat(schedule2, 0); // play infinitely // Manipulate schedule state SchedulePause(schedule1); ScheduleResume(schedule1); // Have schedule immediately finish ScheduleFinish(schedule2);
Available for Android on Google Play
You control Slimey, a puddle of sentient dungeon ooze drawn to shiny gems and crazy speeds. Put your skills to the test. Dodge cold stone floors as you fall endlessly faster in your adventure. How long can you survive the drop into the deep dark dungeon?
-Addictive skill-based gameplay
-Carefully crafted tilt controls
-Compulsive gem collecting
-Colourful pixel art visuals
-Retro styled audio