Khao
Member
Hey.
So I'm making a multiplayer game with frame-by-frame animation. Characters are super simplistic, but with complex, detailed animations with a large amount of frames. Despite using simple characters, it's an HD game, with high-resolution sprites, basicaly, I want the game to feel like a cartoon. Character actions are kind-of comparable to what you'd expect in a fighting game, walking forward, walking backwards, jumping, a few different attack moves and special moves, that kind of thing.
Soooooo the thing is that, much like a fighting game (this is not really a fighting game, but similar in structure) I want to have multiple color-palettes for every character, in case more than one player chooses the same character. And I was wondering what would be the best way to do this. Obviously, I shouldn't just have the duplicate the sprites and change the colors for every single alternate color palette because texture space. So I thought of a system that I think could work, but I'd still like to know if there's a better way to do it.
This is a character.
Buuuuuuut internally, that's not one single sprite. This is how I'm actually handling it.
I have five separate sprites total. One large sprite that has only the outline, and four separate sprites in half the resolution containing the shape of each color in pure white. Then, when drawing the character, I draw the four color sprites blended with color variables defined beforehand, and the outline on top. The color sprites are a lower resolution, but since they're completely flat and have the edges covered by the outline, it looks exactly the same as if they were of a higher resolution. And it works! So if I want to have multiple color palettes, all I have to do is give the color variables different value and I'm getting more sprites for free. Yay!
The problem?
Well, like I said, the game does use complex, detailed animations with a large amount of frames. I'm only just starting to create the animations, and I still mostly have place-holders in-game. But my jumping animation alone already has 15 frames total, and I really don't want to simplify it in any way.
The character also has 3 separate attack moves and I'm anticipating them to have something like 7 frames each. I'm gonna have two different walking animations, probably with 8 - 12 frames. And there's a few more animations for special moves, and in the future, probably for extra details like victory/defeat animations, or even just to make transitions feel better, like an animation for landing in the floor.
All those animations probably wouldn't be such a problem on their own, but with the color sprites, the texture information is basically doubled. And that's just assuming that every other character is going to have four colors! I may very likely want to use more colors with other characters, which is going to fill up textures much faster. So even though this may be fine right now, I'm worried that it'll become a problem in the future.
Which is why I made this thread. Do you guys think this will actually become a problem? Or is this actually a perfectly safe idea? If I do this, I'm probably going to need a full large texture page per character, potentially more than one page for some characters, and I'm gonna be loading up to four characters at once. Is this too much? Or do you think it's manageable?
And if it is too much... Is there a better way? I'd really rather not save space with animation detail, because I have high hopes that the animations could become one of the game's most visually appealing features, and while I could decrease the sprite resolution without losing to much detail, I have dramatic zoom-ins in the game from time to time, and I'd rather have sprites not lose definition when that happens. I've seen color-swapping shaders flying around the place, but I've only seen them work with pixel-art sprites, not with big sprites with anti-aliased edges with a potentially unlimited amount of colors. I'm hardly an expert on shaders though, so I don't know either way.
Aaaaaaaaaaaaanyway, I think I've said enough already. Thoughts?
So I'm making a multiplayer game with frame-by-frame animation. Characters are super simplistic, but with complex, detailed animations with a large amount of frames. Despite using simple characters, it's an HD game, with high-resolution sprites, basicaly, I want the game to feel like a cartoon. Character actions are kind-of comparable to what you'd expect in a fighting game, walking forward, walking backwards, jumping, a few different attack moves and special moves, that kind of thing.
Soooooo the thing is that, much like a fighting game (this is not really a fighting game, but similar in structure) I want to have multiple color-palettes for every character, in case more than one player chooses the same character. And I was wondering what would be the best way to do this. Obviously, I shouldn't just have the duplicate the sprites and change the colors for every single alternate color palette because texture space. So I thought of a system that I think could work, but I'd still like to know if there's a better way to do it.
This is a character.
Buuuuuuut internally, that's not one single sprite. This is how I'm actually handling it.
I have five separate sprites total. One large sprite that has only the outline, and four separate sprites in half the resolution containing the shape of each color in pure white. Then, when drawing the character, I draw the four color sprites blended with color variables defined beforehand, and the outline on top. The color sprites are a lower resolution, but since they're completely flat and have the edges covered by the outline, it looks exactly the same as if they were of a higher resolution. And it works! So if I want to have multiple color palettes, all I have to do is give the color variables different value and I'm getting more sprites for free. Yay!
The problem?
Well, like I said, the game does use complex, detailed animations with a large amount of frames. I'm only just starting to create the animations, and I still mostly have place-holders in-game. But my jumping animation alone already has 15 frames total, and I really don't want to simplify it in any way.
The character also has 3 separate attack moves and I'm anticipating them to have something like 7 frames each. I'm gonna have two different walking animations, probably with 8 - 12 frames. And there's a few more animations for special moves, and in the future, probably for extra details like victory/defeat animations, or even just to make transitions feel better, like an animation for landing in the floor.
All those animations probably wouldn't be such a problem on their own, but with the color sprites, the texture information is basically doubled. And that's just assuming that every other character is going to have four colors! I may very likely want to use more colors with other characters, which is going to fill up textures much faster. So even though this may be fine right now, I'm worried that it'll become a problem in the future.
Which is why I made this thread. Do you guys think this will actually become a problem? Or is this actually a perfectly safe idea? If I do this, I'm probably going to need a full large texture page per character, potentially more than one page for some characters, and I'm gonna be loading up to four characters at once. Is this too much? Or do you think it's manageable?
And if it is too much... Is there a better way? I'd really rather not save space with animation detail, because I have high hopes that the animations could become one of the game's most visually appealing features, and while I could decrease the sprite resolution without losing to much detail, I have dramatic zoom-ins in the game from time to time, and I'd rather have sprites not lose definition when that happens. I've seen color-swapping shaders flying around the place, but I've only seen them work with pixel-art sprites, not with big sprites with anti-aliased edges with a potentially unlimited amount of colors. I'm hardly an expert on shaders though, so I don't know either way.
Aaaaaaaaaaaaanyway, I think I've said enough already. Thoughts?
Last edited: