GameMaker (all)

Retro Palette Swapper

Pixelated Pope

You must be logged in to obtain assets


End of Support Announcement (Oct 2nd, 2023) As I've been taking a step back from Game Dev over the course of the last year, I've finally decided it's time to cease formal updates on my assets. They will now be free to use, but will receive no further features, bug fixes, or any changes at all. Enjoy them for as long as they continue to work in GM, and thanks for all the support over the years.

Retro Palette Swapper is a bit more than just a shader; it is an entire system for drawing sprites, surfaces, tiles, and backgrounds with a manipulated palette.

Have you ever created a character in your game and wished you could change the character's hair or clothing color without uploading a complete new set of sprites for every single one of that character's animations? What about making a sprite appear on fire in a much more vibrant way than just putting a red or orange image_blend on it? Maybe you've got a black outline around your sprite and want to make it red when the player mouses over it?

All of this and much more is possible with Retro Palette Swapper!


  • Draw any sprite, surface, tile layer, or background with a specific palette!
  • Use surfaces to build dynamic palettes on the fly!
  • Gradually shift between palettes to create dynamic effects!
  • No known color limit (although 256 is suspected)!
  • Easy to drop into any existing project!
  • Fully commented example code!
  • Helpful scripts for manipulating palettes!
  • Full featured tool available to help non-artists build palette sprites!



HTML5 Demo:


All Platforms Supported (As far as I know. Desktop, Mobile, and HTML5) HTML5 is currently not FULLY supported due to bugs within GMS2, so it might magically work perfectly after a future update*

This shader will make your project require a video card that supports Shader Model 3.0. So make sure the demo functions before purchasing.

Additionally, your graphics need to be "retro"... or at the very least you should NOT be using the "interpolate colors between pixels" graphical option.




Tool Download:

Additional Setup for HTML5: Using this on HTML5 is a bit more challenging than on desktop or mobile. You need to do a few steps.

*When you initialize the system, you need to pass the init script your two HTML5 shaders: one for sprites and one for surfaces (these are included). *You need to go into the sprite shader and set your texture page size that you use for your project. *You need to go into the surface texture and set your size to the size your dynamic palettes are being built at. By default, it's set to 64x64, which means when you want to create a custom palette using shaders, instead of making the surface the exact size you need, you need to create the surface at 64x64. Again, this number can be changed, if desired.
*You may notice an error right when you run your game about some for loop or whatever. That can be safely ignored, and when you release your final HTML5 build, just remove the default shd_pal_swapper and the error will no longer appear. Hopefully GMS2 will give us target based resource configurations in the future. *There are a few missing features (gradual palette changes, layer swapping), but these seem to be related to a bug in GMS2, so it might all start working magically after a future update. Fingers crossed.

End User Licence Agreement (EULA).

Age Rating: 4+


GMS1 - Version 1.0.1. Published April 6, 2015

GMS2 - Version 2.2.2. Published May 26, 2020

Fixed smooth palette transitions for non-windows platforms. Removed "depth swapping": recommend you use layer swapping only.

GMS2.3 - Version 2.4.0. Published December 6, 2022

Loading, please wait

Package contents

Loading, please wait

What is the issue?

Loading, please wait