Sign in

iiinova is part of the Atmosphere — an open, public network where you own your identity.

Domo 🐧 Soda-Powered Penguin

@domo-yoro.games
998 followers 55 following 179 posts

they/them | indie dev, working hard on Soda-Powered Penguin! steam: (WITH DEMO!) sodapoweredpenguin.com discord: discord.gg/txpYqy7pyV patreon: www.patreon.com/sodapoweredpenguin contact: sodapoweredpenguin AT gmail.com

PostsRepliesMedia
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 16/10/2026
we out here bubble hoppin' 🫧 #indiedev #pixelart #platformer #gamedev #indiegame
1114537 145
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 02/10/2026
they 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/2026
i'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/2026
one and-a two and-a one two three! #indiedev #pixelart #platformer #gamedev #indiegame
713321 133
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 17/08/2026
real smooth-like ✨ #indiedev #pixelart #platformer #gamedev
423449 234
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 06/08/2026
In 'n' Out 😋 #indiegame #pixelart #platformer #gamedev
611424 114
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 21/07/2026
there'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/2026
new developments in palette technology 🎨 #pixelart #indiegame #gamedev #platformer
37814 78
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 30/06/2026
i only need two coins as my reward, thanks bye #pixelart #gamedev #indiedev #platformer
723136 231
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 16/06/2026
mind if i swoosh on in? #pixelart #indiegame #gamedev #platformer
1125759 257
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 28/03/2026
ping pong ✨ #pixelart #indiegame #platformer #gamedev
1551685 516
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 21/03/2026
nyoooom #pixelart #indiegame #platformer #gamedev
1228938 289
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 12/03/2026
good catch! 💥 #pixelart #indiegame #platformer #gamedev
510819 108
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 06/03/2026
rocket jumping! 💥 #pixelart #platformer #indiegame #gamedev
610118 101
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 28/02/2026
did you know? penguins are immune to explosions. 💥 #pixelart #indiegame #gamedev #platformer
23502120 502
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 26/02/2026
level design is my passion ❤️ #pixelart #indiedev #gamedev #platformer
916724 167
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 25/02/2026
moving too fast now for my square camera lol #pixelart #gamedev #indiedev #platformer
1221661 216
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 19/02/2026
drilling down into the snow ☃️ #pixelart #indiedev #gamedev #platformer
822960 229
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 12/02/2026
if 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/2026
wow, 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/2026
platformers 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/2026
wild 'n' reckless 💜💙💜 #indiedev #pixelart #gamedev
35413 54
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 16/01/2026
i mightve gotten carried away from testing #pixelart #gamedev #indiedev
24913 49
Domo 🐧 Soda-Powered Penguin @domo-yoro.games · 21/09/2025
pssst..... 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/2025
maybe 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/2025
i 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/2025
i 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/2025
Soda-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/2025
texture 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/2025
so, 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/2025
image 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/2025
so, 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/2025
once 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/2025
this 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/2025
since 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/2025
so, 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/2025
the 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/2025
old 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/2025
this 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/2025
we'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/2025
so, 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/2025
devs 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/2025
this 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/2025
so: 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/2025
in 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/2025
in 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/2025
since 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/2025
with 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/2025
in 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