Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 16/10/2026we out here bubble hoppin' 🫧 #indiedev #pixelart #platformer #gamedev #indiegame 1114537 145
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 02/10/2026they call me a cauldron the way i'm bubblin'🫧 #indiedev #pixelart #platformer #gamedev #indiegame 523440 234
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 22/09/2026i'm tempted to remove this room but damn i still like the vision #indiedev #pixelart #platformer #gamedev #indiegame 1317525 175
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 11/09/2026one and-a two and-a one two three! #indiedev #pixelart #platformer #gamedev #indiegame 713321 133
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 17/08/2026real smooth-like ✨ #indiedev #pixelart #platformer #gamedev 423449 234
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 06/08/2026In 'n' Out 😋 #indiegame #pixelart #platformer #gamedev 611424 114
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 21/07/2026there's a lot goin on here (sorry about the discord notif while i was recording) #indiegame #pixelart #platformer #gamedev 719738 197
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 10/07/2026new developments in palette technology 🎨 #pixelart #indiegame #gamedev #platformer 37814 78
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 30/06/2026i only need two coins as my reward, thanks bye #pixelart #gamedev #indiedev #platformer 723136 231
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 16/06/2026mind if i swoosh on in? #pixelart #indiegame #gamedev #platformer 1125759 257
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 28/03/2026ping pong ✨ #pixelart #indiegame #platformer #gamedev 1551685 516
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 21/03/2026nyoooom #pixelart #indiegame #platformer #gamedev 1228938 289
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 12/03/2026good catch! 💥 #pixelart #indiegame #platformer #gamedev 510819 108
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 06/03/2026rocket jumping! 💥 #pixelart #platformer #indiegame #gamedev 610118 101
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 28/02/2026did you know? penguins are immune to explosions. 💥 #pixelart #indiegame #gamedev #platformer 23502120 502
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 26/02/2026level design is my passion ❤️ #pixelart #indiedev #gamedev #platformer 916724 167
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 25/02/2026moving too fast now for my square camera lol #pixelart #gamedev #indiedev #platformer 1221661 216
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 19/02/2026drilling down into the snow ☃️ #pixelart #indiedev #gamedev #platformer 822960 229
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 12/02/2026if you've forgotten your ice axe, a penguin's beak will still work! 🐧 #pixelart #gamedev #indiedev #platformer 16813 68
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 04/02/2026wow, these speedy sections are fun. it's almost as if you could make a whole game out of this... #pixelart #gamedev #indiedev 47518 75
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 29/01/2026platformers never use ceilings in fun ways and i've had enough of that 🙃 #pixelart #indiedev #gamedev 48215 82
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 23/01/2026wild 'n' reckless 💜💙💜 #indiedev #pixelart #gamedev 35413 54
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 16/01/2026i mightve gotten carried away from testing #pixelart #gamedev #indiedev 24913 49
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 21/09/2025pssst..... hey... the Soda-Powered Penguin SAGE '25 demo is out now! the entire demo has been brought to a new visual standard thanks to @magipixel.bsky.social !! #indiedev #gamedev 515647 156
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 19/09/2025maybe i'm milking it but i do think the 2025 version of this room looks infinitely better #pixelart #indiedev #leveldesign 512816 128
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 19/09/2025i still can't believe how good all of the new art looks now, it's surreal #pixelart #indiedev #gamedev 45710 57
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 19/09/2025i couldn't quite finish putting the full palette article into the new sage demo in time 😔 i need to rest but this is the first thing i'll do when i wake 0130 13
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 03/09/2025🐧 Soda-Powered Penguin will return... September 19th for SAGE 2025! 14712 47
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 08/08/2025Soda-Powered Penguin in the penguin colony in antarctica 🐧 I can't express how awesome it was of lenny from the discord to do this :) #pixelart 2364 36
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 17/07/2025texture sizes do have limits though, whether you're using the RGBA32 color format or just the single-color channel R8 color format. so... how about we combine multiple R8 color indexed textures into a single RGBA32 texture? each R8 texture could occupy a different color channel after all! 120 2
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 17/07/2025so, after the game engine imports an image into a texture, we'll overwrite that texture data with the color indexed texture data! and, while we're at it, we could actually use a single-color channel texture format too! this reduces the texture file size by 75% 110 1
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 17/07/2025image file formats, like .JPG or .PNG, often use compression to shrink the image size. this compression may involve breaking up the image into multiple grids of colors! 110 1
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 17/07/2025so, technically speaking, images are not textures. shaders only accept textures, not just any image type. a texture is a single grid of colors. 110 1
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 17/07/2025once again, we'll turn to shaders to automate this process! this is actually just the first part of the "Find and Replace All" shader- but instead of outputting a swapped color, we just output index "i" converted to a color! 120 2
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 17/07/2025this raises a new question: how do we create these color-indexed textures? doing it by hand is certainly not an option. like the original recolor-by-hand approach, you'd need to throw out your work and start again every time you make a change to the original image. 110 1
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 17/07/2025since we only need one color index per pixel, we actually only need to use just one color channel- red- to store the color indices! so, the shader to convert color indices back to RGBA colors should look something like this: 120 2
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 17/07/2025so, instead of using an image to represent color data, we should instead use images to represent color index (position) data. textures use a different RGBA format than shaders, where each color channel value can be 0-255. this is automatically converted to 0.0-1.0 in the shader. 120 2
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 17/07/2025the answer, as it turns out, is that the NES stores RGBA values externally! the 2-bit value is used as a position on the palette, allowing colors to be represented with less data! 120 2
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 17/07/2025old game systems didn't have this performance caveat, so they're doing something different to achieve the palette swap effect. especially since the NES only defined colors with 2 bits- so that sprites could only have 4 colors total! 120 2
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 17/07/2025this shader is good for sprites with a handful of colors! unfortunately, this shader is too limited for swapping a whole level's visuals. the penguin's palette consists of 6 colors, but the level palette will have at least 36. shaders run for every pixel on every frame, so performance matters! 120 2
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 17/07/2025we'll iterate through this set of colors with index position "i". 1. if the color matches source color at position "i", then output the corresponding swap color at position "i". 2. if the color doesn't match, then add 1 to "i" and go back to step 1 120 2
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 17/07/2025so, instead, it'd make more sense to define a set of "source" colors and a set of "swap" colors- that way we can change as many colors as we want! 110 1
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 17/07/2025devs will often call the palette swap feature finished here, as this is about as good as visual scripting tools can do. this is fine for games with limited palette swaps! but remember, i want to swap the palette of a whole level, so i need to build a more robust system. 120 2
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 17/07/2025this enables changing any singular color on the sprite. if we wanted to change more colors, we could chain the logic of this shader: 120 2
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 17/07/2025so: shaders are the best tool to accomplish palette swapping! we'll start with a basic "Find and Replace" shader. If the pixel's color matches the "source" color, then the shader will render the "swap" color instead of the original color. 120 2
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 17/07/2025in short: shaders are GPU programs that use data from "materials" in order to render (draw) images! here's the default shader most game engines have- and here's exactly where you see the "tint" color multiplication! 130 3
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 17/07/2025in order to get a properly palette-swapped sprite, we'll need to look into how sprites are drawn on the screen. the important part of this process is the shader, which i promise to break down in an easy-to-understand way! 120 2
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 17/07/2025since color component values can only be between 0.0 and 1.0, this means that the product of color multiplication will always result in something that's darker than either starting color. this explains why "tint" never provides a satisfactory result! (it is useful for transparency at least!) 120 2
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 17/07/2025with a numerical representation of colors, this means that color math is possible- like color multiplication! in order to get the product of two colors, you'd multiply each of the color components together. X(Rx, Gx, Bx, Ax) × Y(Ry, Gy, By, Ay) = Z(Rx × Ry, Gx × Gy, Bx × By, Ax × Ay) 110 1
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 17/07/2025in order to explain why, we need to talk about RGB! RGB is a color model to represent colors via Red, Green, and Blue colors. the lights blend together additively to create the colors you see! the values for the lights are between 0.0-1.0, which means that colors are represented with numbers! 110 1