TweenGMS Pro is a feature-rich tweening engine for GameMaker Studio 2 which is both flexible and easy-to-use.

With years of development, it offers essential and advanced features powered by an optimised codebase.

Boost the look of your games by tweening movement, rotation, scale, views, paths, and much more!

Not familiar with tweening? See this video.
You can also check out some video tutorials.


  • Fire-and-forget tweening
  • Step and seconds(delta) timing
  • Time scale control (global and per-tween)
  • Play modes (once,bounce,patrol,loop,repeat)
  • State control (pause,resume,stop,finish,reverse)
  • Automatic memory and persistence management
  • Advanced callback system
  • Custom variable easing
  • Path resource tweening
  • Data structure support
  • Delayed tweens
  • Control groups
  • Heavily optimised
  • Supports all platforms
  • And more...
Made withGameMaker: Studio
Average sessionDays or more


Download NowName your own price

Click download now to get access to the following files:

TweenGMS Pro v103 [GameMaker Studio 2] 67 kB
TweenGMS Pro v103 [GameMaker Studio 1.4] 87 kB
Demo Projects [GameMaker Studio 2] 771 kB
Demo Projects [GameMaker Studio 1.4] 780 kB
Starter Guide 42 kB
Script Reference 88 kB


Log in with to leave a comment.

(1 edit)

First I would like to thank for the asset. I have a question though. Would it be possible to control the change of the variable on each step? So basically I would like to give to the tweener the time/steps and ease control but keep the changing of the variable, for example in a tween step callback script. That script would accept start and end position, duration and progress of a particular tween execution and would set/return the tweening variable value for the particular step (similarly like the To method in DOTween library for unity, if you are familiar).

Thank you


Hey! I am having some trouble understanding exactly what you need. Would it be possible to show an example of code from Unity and the DOTween library, and I could try to translate it to GameMaker and TweenGMS :)

Hi 8BitWarrior. I want to achieve the following. I have an object with triangle shape sprite and I need to rotate an instance of it around any of the vertices depending on the user action. I can not use sprite origin to do that, by dynamically changing the sprite origin and then rotating the sprite, for it will affect the origins of all other instances of the object. But I want to animate that rotation and this means that I need to calculate the instance position and rotation for each step of the move. For that I want the tweener to call my script 30 or 60 times and I will move the instance in code rather than allowing it to lerp between start and end value and move the instance automatically. This i because my trajectory is not  a line, but a curve. My script would accept the instance id, start and end value and the progress value, from them I can calculate the exact position and rotation.

This is easily achievable by DOTWeen library in Unity (

Please see the following script (C#):

public static Tween Rotate(Transform target, Vector3 rotationPoint, float angle, float duration)
            var angleRotated = 0f;
            return DOTween.To(
                () => angleRotated,
                newAngle =>
                    // This is a custom function which calculates the position and then moves the object to it
                    GameObjectHelpers.RotateAroundLocal(target, rotationPoint, newAngle - angleRotated);
                    angleRotated = newAngle;


Thanks in advance       

Hey, Darius.

Sorry for the SUPER late reply! Did you ever find a solution to this, or can I still be of any help?

Let me know :)


Deleted 145 days ago
Deleted 145 days ago
Deleted 40 days ago

It's actually possible to restart a tween by using TweenPlay(tween), even if the tween was created with TweenFire() or TweenEasy*().

Let me know if that helps or if you need a more involved solution!


Hmm, I have it in a room start event and it works when you first pause. The main problem is that TweenPlay() doesn't get called again even when the pause screen room starts, meaning that the pause screen text is being held at it's starting position.

Thank you for help by the way, I appreciate so much when developers go out of their way like this. It's a rare thing <3

Hmm. I will try to replicate this later today and let you know what I find :)

Are you playing tweens in both the CREATE event and ROOM START event, or just in the ROOM START event? That could possibly be an issue.

Would it be possible for you to send me an example of your problem as a gamemaker project? You could contact me at StephenLoney86 at gmail.

Just in room start, I'll create an example for you

Prepare to receive an email in the coming hours

Hm, after recreating it all, it seems to work absolutely fine. My pause screen uses room persistence so it might be issue with the way that's implemented

Welp, playing the tween in the create event seems to fix it. Thanks for your help though man, I really appreciate it ^^;

Glad you got it working!

Let me know if you come across any other issues. Feedback greatly helps the asset improve. :)

hello my asset will be sold, as I understand it, I can’t use your twin system as part of an asset or can I remove most of the code leaving only the piece I need so that it works?

You can include it.

I have deemed TweenGMS open source, so use it as you like! ^.^

Thanks you! However, I will definitely buy it for money when I can afford it!

hey, how do you change the fps of the tween?

(1 edit)

Hi! I am not 100% sure what you are wanting, but I have a couple of things to try. First you could change the time scale of a tween by using TweenSet()...

TweenSet(tweenID, "time_scale", 0.5);

You could also change the time scale for the whole tweening system like such...

TweenSystemSet("time_scale", 0.5);

Lastly, you can change the update interval of of the tweening system...

TweenSystemSet("update_interval", 2);

The default interval is 1 which updates the system every step. But if you set it to 2, it would update every 2 steps. This means that if your game ran at 60fps, then the tweening engine would run at roughly 30fps.

I hope this helps. Follow up and let me know if any of this works for your needs :)