A downloadable Extension

Buy Now$1.00 USD or more

NOTE: This is an extension designed to work specifically with the software GameMaker: Studio 2.2 (2.3 compatible)

NOTE 2: The latest version (1.0.9) REQUIRES GameMaker: Studio 2.3. If you have 2.2 or earlier, please download version 1.0.4

If you want smooth room transition effects in your game, look no further. This extension provides you with all you need to get going quickly as well as for designing your own transitions with ease!

Initial Setup

There is none! Simply call room_goto_transition to switch rooms while using a transition effect. The function takes an enum value from ROOM_TRANSITION to specify which transition you would like to use, the length of transition in seconds, and whether or not the room you are entering should freeze for the length of the transition or not.


This extension is made to be as simple to use as possible but feature rich as well. Here are some highlights:

  • Over 40 transitions included out of the box
  • Instance freezing can make the game wait for the transition. Handles deactivated instances and physics objects perfectly fine.
  • Adding your own transitions is a piece of cake. Your transition code is automatically provided with a snapshot of each room, a surface to render to, and the percentage through the transition.
  • System handles difficult situations with ease. If you change screen sizes between rooms or even don't use the application surface, the system can still function just fine.
  • No setup required! Just pop in the extension and call the room_goto_transition function out-of-the-box!
  • Transitions are handled in realtime not game time. Lag, or changing FPS mid-way through your project doesn't alter the transitions at all.

Platform Support / Resources

This system is programmed in native GML with all systems in mind. It has not been tested on mobile or browser exports at this time, however.


Is there something here you need or want? Came a cross a bug? Let me know! I actively maintain all my extensions for the lifetime of the product they are targeted for.


Take a look at the built-in transition effects:

v1.0.4 Changes 

  • Added 7 new transition effects including, page flip (left / right), spin (left / right), fade to black, drops, and pixelate.

v1.0.9 Changes

  • Numerous small bugfixes
Updated 1 day ago
Tagsextension, GameMaker, gml, room, studio, transition, ubg


Buy Now$1.00 USD or more

In order to download this Extension you must purchase it at or above the minimum price of $1 USD. You will get access to the following files:

ubg_transitions_1_0_4.yymp 63 kB
ubgtransitions_1_0_9.yymps 65 kB


Log in with itch.io to leave a comment.

I believe you have created a bug of some sort in 1.0.9.  I'm on the latest stable GMS2.3.3.574/Runner  I have tried several transitions, and none of them work.  It DOES freeze, showing the previous room, and then suddenly the next room pops in.  The timing is also working...just not the transition itself.  It doesn't show any errors either.

FYI, I loaded 1.0.6 back in, and without changing ANY code on my end, the transitions suddenly work again.

(1 edit)

I'm having an issue where the fade doesn't draw over the DrawGUI layer in GMS2.3. The fading works fine it just doesn't cover elements drawn on DrawGUI.


This only happens when I have set true to deactivate objects. They just appear when the transition is done. 

Thank you for bringing this to my attention. 

I have uploaded a new version with several bug fixes including this issue.

(1 edit)

Hi, one question what should we type in the transition itself aka (surface_start,surface_end,surface_render,lerp ) ?

Edit : I tried one without the surface_start.end.etc.. and get this error

surface_set_target argument 1 incorrect type (undefined) expecting a Number (YYGI32)

 at gml_Script_ubg_transition_spin_right (line 12) -        surface_set_target(argument2);

If you are simply trying to execute a transition then there is no need to call those scripts directly, they are for the system. Just call room_goto_transition().

If you are trying to make your own custom transition, then the values are as follows when going from room A to room B:

surface_start -> A snapshot of room A

surface_end -> A snapshot of room B

surface_render -> The surface to render during the transition

lerp -> Value between 0 and 1 where 0 is at the start of the transition, 1 is at the end.

When making your own transitions all these values are generated and created for you, your script just needs to take them as arguments, do something with them, and draw the result to surface_render. You can specify to render a custom transition by just specifying the script name (w/o parenthesis) instead of a transition ENUM name when calling room_goto_transition().

Sorry my bad, the mistake was (  room_goto_transition(TestingRoom,ubg_transition_bookflip_right(),0.5,false)  ) instead of  (  room_goto_transition(TestingRoom,ROOM_TRANSITION.flip_tiles_center,0.5,false)  )   Thank you for the reply. 

(1 edit)

This is really useful, thank you! I think the only thing it's missing is a fade to black (fade to black from room 1, into room 2 from black.)


Thank you for purchasing the extension, I am glad that you are enjoying it!

I was considering doing a small update to add a handful of extra transitions to the system. I will add a fade to black to the list!

All the best.

I appreciate the update! Thanks for taking the suggestion into consideration, I'm already implementing the new transitions!

I am not sure what is wrong but this does not work properly for me. When calling room_goto_transition to switch rooms, the transition effect only covers a small portion of the screen and not the whole screen. 

Firstly, apologizes that you are having trouble with the extension. Can you tell me a bit more about the project itself? Perhaps there is a use case I missed for detecting view size.

What version of GM are you using? Targeted platform? Are you using the application surface or no? What are your view sizes in each room? Viewport size? GUI size?

As a temporary fix until the issue is figured out you can try using the force surface size hack. In the create event of ubg_transition_obj change the variable hack_force_surface_size to match that of your view's render resolution.

All the best.

Thanks. Your suggestion to use the force surface size hack, solved everything.

I can confirm my project(GMC Jam 40 entry Escape of the Clowns) was also having this issue.  I'm not sure if it has to do with the fact that my room is 1920x1080, which is the same size as the monitor, and so GMS is slightly scaling the thing down in windowed mode.  It was also doing it in full-screen IIRC.

The same fix you mentioned ALSO worked perfectly for mine.  Since you want info, I'm not using any views, cameras, anything like that in this project.  All the action in every single room is the same 1920x1080 room size, Viewports are not enabled in the room editor anywhere either.


Thank you for all the info! I have uploaded a fixed version.

It seems that it was a problem when GameMaker was set to resize the screen w/ "Keep Aspect Ratio" that occurred when the screen was shrunk down a little.


I have released a small update that address a bug brought to my attention. Semi-transparent objects would render at incorrect transparency levels while transitions were running. This has been fixed.

If you ever come across a bug with the system, please let me know and I will attempt to fix it as soon as possible. Thank you!