A downloadable extension for Windows and Android

Buy Now$2.99 USD or more

 NOTICE: Requires a registered license of GameMaker Studio 2.3 or higher

Display scalers: everyone needs one, and Xtend is the last one you'll ever need!

Xtend automatically and intelligently resizes your games and applications to fill any window or display, desktop or mobile, with pixel precision and no black bars. It's easy to use and comes pre-configured to suit most projects, while also offering deep customization and powerful camera functions for even the most challenging scaling needs.

Try a demo for HTML5 in your browser here!


Features

Setupless

How to use Xtend? Add it to your project. Done. Seriously.

Universal

Xtend supports multiple scaling modes for different needs. No matter your project, there's a mode for you! Such as:

  • Linear - For desktop-style applications that need 1:1 screen real estate
  • Aspect - For games and interactive applications that need to fill the screen while preserving a base play area
  • Axis - For horizontal or vertical splitscreen
  • Pixel - For retro art styles that demand pixel perfection at any shape and size

All modes also support DPI scaling for windowed applications, ensuring consistent physical size across any screen resolution and pixel density.

Optimal

Xtend only runs when there's a change in viewport resolution. Your app's performance is uncompromised!

Powerful

Still not enough? Xtend includes additional functions for managing multiple view cameras, all with their own scaling modes, and drawing regular content relative to display scale. It's the complete package!

Helpful

Take a peek under the hood at any time with built-in debug statistics and hint boxes. You'll see exactly what's being scaled and how! Take it for a spin in the included demo, and learn more from detailed documentation!

Purchase

Buy Now$2.99 USD or more

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

xtend-1.0.6.zip 24 MB

Download demo

Download
xtend-1.0.5-demo-android.zip 16 MB
Download
xtend-1.0.5-demo-win.zip 12 MB

Development log

Comments

Log in with itch.io to leave a comment.

Been a while since I talked with you on Reddit about this but I purchased and am excited to try it out when I get the chance!  The documentation looks pleasingly detailed.  I'd like to use it to make a web upload that also scales well when I open it on my phone -- would be a first for me.

(+1)

Awesome! I'd recommend looking over the additional setup for HTML5 to get the best experience:  https://docs.xgasoft.com/posts/xtend-html5-pixel-ratio-fix

Before adding Xtend to my project the GUI layer would scale to match my window size ( I used the full scale setting in the Windows > Graphics section of the settings).

Now when I resize my window, no matter what Gamemaker Graphics setting I use, instead of the GUI layer scaling to fully fit in the game window, it simply cuts off a proportionate chunk of the right side of the GUI layer. (E.g. I can now only see half of my pause screen instance and the UI instances it contains if the game window has been resized decently smaller).

Is there a setting in Xtend to have the GUI layer behave in the typical "full scale" way. I'm mostly using Xtend for the "pixel" scaling mode, which is doing it's job great, but I just wanted to ask if there is a clean solution before I try to put some kind of "shrink with the window scale" code into the step event of every last UI object I've made.

Thanks!

Hi Max,

Certain elements are the developers' responsibility to position responsively. Basically, this means positioning by percentage of width/height rather than absolute pixel values. I'd recommend taking a look at the Best Practices section of the documentation for an overview and examples.

While stretching the GUI layer to the window will work around the need for responsive design, it's not a true solution to the problem. However, you can disable GUI scaling in the xtend_config script if you'd like to manage it yourself.

Thanks for using Xtend!

I have issues with the GMS 2022 Plugin - iOS YYC Exports.  Xcode error: 

Xtend.mm:36:27 Use of undeclared identifier 'UIScreen'

Xtend.mm:39:17 Use of undeclared identifier 'UIApplication'

Please Advise. Thanks

Hi Animacio,

Unfortunately, I'm unable to do any testing on real iOS hardware, so I have to rely on documentation alone for iOS-specific features. I believe this error report tells me everything I need to know to create a fix, but I'd like to confirm before pushing out an update. Be on the lookout for an email with further details!

Thank you for the fast reply/support!

in demo, I see all with low quality :/

Hello! What platform are you using? If you happen to be on HTML5, you will need to include a snippet of JavaScript to get full rendering quality: https://docs.xgasoft.com/posts/xtend-html5-pixel-ratio-fix

Im speaking about online demo, your demo

What device are you using to try the demo?

Also, make sure that your browser is set to 100% zoom, if applicable.

after I installed this add-on, I can't seem to start following the character. Without it, it works.

Hello! Xtend allows you to move the scaled view, but if you're relying on an older method (e.g. backwards compatibility scripts from GMS 1.x) you will need to update to GMS 2 standards. Specifically, you should be using the camera_set_view_* functions, such as camera_set_view_pos, to move the view camera with your player.

(1 edit)

I am using camera_set_view_pos(cam, x-temp_cam_w_half, y-temp_cam_h_half); in step. But after I change the screen resolution, my camera is attached to the upper left corner. https://i.imgur.com/L6sOhbJ.png

It looks like you're doing a lot of manual calculations to solve things Xtend provides for you. While not all of the code is visible in your screenshot, it's possible some of your existing camera system is conflicting with Xtend. I would recommend going through the Macros & Keywords documentation and updating your code to use Xtend's provided values. You should be able to remove a lot of custom code from your project this way.

I have tried commenting all my code, and leaving only your plugin.  Result 1. After changing the resolution, I can't get the camera to follow the character.  yes, there is a lot of superfluous in the code, but there is nothing in it that would break the camera.  macro values from the plugin are identical to those that I have.

A few notes here:

  • I still see window functions from another extension in your example. Some of these functions appear redundant to Xtend and may be interfering.
  • Your code is using instance variables for things like cam, which is not a good idea. The actual camera ID assigned to a view can change, at which point your variable would become obsolete. It is best to always reference view_camera[0] directly or use a macro instead of a variable for shorthand.

Some debug ideas:

  • Draw the value of view_camera[0] and check for changes. (If the camera ID changes and your cam variable isn't updated, the camera will stop following the player.)
  • Draw the value of window_resized() and make sure it only returns true for one frame. If it gets stuck on true, something in your code is causing Xtend to always register a change in scale even when there is none. (If this happens, the camera will always attempt to correct its position for changes in scale and will never have a chance to follow the player.)

https://ibb.co/ZXRMW7z see...

(1 edit)

Hello, in my project I draw sprites and texts (eg: draw_text).  I would like to know if with xtend, I can make sure that my sprites and my texts always draw the same size, no matter the size of the screen, whether I am on android or on windows. If so, how can I do this.  I tried to configure xtend in aspect mode, but it draws my drawings smaller or larger when the screen size changes or when I am in landscape mode. (I draw them in size of pixel) Thank you for your reply

What you're describing is DPI scaling. Xtend has built-in features for this, but the results are targeted for usability rather than identically matching physical size between mobile and desktop displays (which usually isn't desirable). You may wish to use the Linear scaling method combined with DPI scaling for the closest match, and you can also use the window_get_dpi and window_set_dpi functions to customize results with your own code.

It is not at all clear how to set it up.
I have a game for android with a room size of 768x5000, a camera of 768x1550. When xtend is turned on, the whole vertical of the room is shown, more than 768px. The touch buttons have gone up, the xtend settings do not really affect anything. Help set up.

Hello,

Xtend will automatically configure itself to work for most projects, but if yours requires special configuration, I would recommend checking the documentation in your project's Included Files area or online at docs.xgasoft.com/xtend

Especially make sure that the xtend.scale.view setting is set to the same viewport number as your camera is assigned to. Your camera resolution will be adopted as the base resolution, which may or may not be what you want. Consider how you want your game to scale on the lowest aspect ratio and the highest aspect ratio and set your viewport resolution accordingly.

I've purchased and installed this tool, because this is the first project I've ever done with GMS2.  My problem is that I set my first room size to 1600x1000 on day 1, and have built all of my rooms with that same room size.  My puzzle game doesn't have any viewports, so the resolution is just set by the room size (1600x1200).  That being said, many things looks pixelated when they shouldn't be, and everywhere I read about resolution, people are suggesting creating their rooms with small resolutions that can scale up easier, with either 4:3 or 16:9.  Right now when I installed Xtend and run my game, it runs in 1600x1200 and it's zoomed in.  When I resize the window, it snaps back to the original size, not allowing me to resize or go to full screen.

I'm not sure where I went wrong... I probably should have chosen a lower room size and something more standard like 16:9 aspect ratio, but my game isn't pixel art, so all my assets are quite large.  I was thinking about lowering the resolution to something like 800x600 and then scaling down all the assets, but then they look pixelated and not so nice.  Also, when I export my game to the web, it's also zoomed in and it doesn't scale in any way.  Do you have any tips for how to wrestle this under control?  Thanks

Xtend uses aspect ratio scaling by default, meaning at any window size, a central area will be preserved that renders the original viewport. You probably don't want the entire room to be that central area—the room should never be used to set resolution.

I would need to know more details about your setup to say for sure, but it sounds like with your game setup, the default Xtend config is hitting the limit of what it can do on your display, and compensating for it the best it can.

I would recommend setting up your own viewport in your room settings and then customizing xtend_config appropriately for your project. The documentation will walk you through each available setting, and can be found in your project's Included Files area or online at https://docs.xgasoft.com/xtend

Hi, I've read your documentation and still having a few issues.  My setup is very simple.. I've updated my first room's size to 1280x720 and scaled down/rearranged my assets accordingly so they still look sharp and well positioned.  I also have no viewports at all, so it's pretty basic.  

That being said, when I run my game and it opens up into 1280x720, and I double click to expand the window, it pops it back to the 1280x720 window size every single time.  It never allows itself to expand or shrink at all.  I've tried both `aspect` and `linear` modes in the xtend_config and they behave the same way.

I guess what I'm looking for is when I reduce or expand the window size, it should allow it to expanded and perhaps add black bars where necessary.  Or maybe that's the wrong thing to do?  I'm not sure what the best course of action is, but if someone's screen is under 1280x720 or if they have a 4K screen, not being able to resize the window is bad, isn't it?

(1 edit)

Xtend is designed to remove black bars by expanding content to fill the empty space. If you don't have any viewports, Xtend will create one, so be aware that at least one viewport does exist.

It definitely doesn't enforce the original window size, though... that would defeat the whole purpose. Is your project configured to allow resizing the window? (This setting must be applied in GameMaker itself, not Xtend.)

If you're unable to identify the problem, feel free to send me your project by email (contact@xgasoft.comso I can investigate and better advise.

Ok that is definitely strange then, because I removed Xtend from my project and then I am able to resize my game window normally.  When I re-imported Xtend to my project, it once again locks the resolution.  I'll send you a link to my project to your email.  Thanks again!

Hi, this looks really good for me because I'm having resolution issues with my game.  Does this work on the Mac version of GMS2 as well?  Thanks!

Xtend is universal—it will work on any platform!

Thanks for your interest!

Awesome, thanks!  I was only asking because of this line: "A downloadable extension for Windows and Android" but I was 95% sure after browsing your docs that this should be universal.

That would be because the free demo is compiled for Windows and Android—sorry for the confusion