[LPC] Updated spritesheet generator
Tuesday, July 24, 2018 - 12:12
For my upcoming release I have been working a lot with the LPC content. I started off using the LPC-Spritesheet generator created by Gaurav0, however, a lot of cool stuff has been added since the last commit in this repo, and as I needed some flexibility and speed I forked it and updated it my self.
It offers all expansions made on LPC that I know about (some still missing as described in the readme). I hope it can be of any help for you as well.
You can use the generator here:
https://sanderfrenken.github.io/Universal-LPC-Spritesheet-Character-Gene...
And check the sources here:
https://github.com/sanderfrenken/Universal-LPC-Spritesheet-Character-Gen...
Thanks for the update, this is great!
One request: the Robe Skirt (male only) appears to be on the wrong layer - it's below the shoes layer. It seems to be properly aligned with the metal boots and golden boots, but each of the shoes are rendering on top of the robe skirt, which looks a bit awkward. Pic is below:
Untitled.png 136.3 Kb [56 download(s)]
Thnx! It has been quite a job so I am happy to hear others like it as well.
I will take a look at the issue you reported, will come back at you asap!
Cool thanks. This error was included in the original generator and never corrected -- not a huge deal, but definitely annoying!
I think it is fixed now, you can pull and check if it works as you expected:)
Please let me know!
Yeah, looks good now. Working on a Jedi/Sith LPC game and this will save me a lot of time.
Thanks a bunch for doing this!
Sounds cool, you are using the blue and red saber already i suppose?
I am working on an LPC game too, do you already have something to share or show? I think the LPC style can serve a lot of different types of games.
If you have any additions for the generator please let me know, i will be glad to add them:)
Yeah, sabers and the modern tilesets. More of a prototype than a complete game, however....probably won't be released/distributed.
My only real edits so far have been the male clothing pack I uploaded a while back. I have a few others but they have licensed content - if I get around to cleaning them up I'll post here on OGA.
It is nice to hear someone is getting use of the Glow Swords. I created them while making my game Grimm's Battlefield[1] but they didn't fit the style.
I agree the LPC style is very flexible. Grimm's Battlefield is a tower defense like game.
[1] https://grimmsbattlefield.firebaseapp.com
Some shoe styles look better drawn above certain pants, and some look better below. Robe skirt should be drawn over all footwear, of course, but the female tall boots (which I widened and adapted to male) look better drawn over the pants (cowboy style)
Yes that makes sense indeed. I will adjust the generator, propably i will need to split shoes and boots and put them in separate divs in the tree. Let me see, I will notify when I changed it!
@tskaufma yes I think they are very cool! They can be used to make jedi like characters. Maybe some other colors would be nice as well, could be something for the future.
Nice project you made btw! I am making a strategy/ tower defense like game as well, for iOS. The environments you designed are inspiring, especially the battle ground looks very cool!
It might be a good idea to use github.io for showing the web interface instead of linking Gaurav's version
Done: https://sanderfrenken.github.io/Universal-LPC-Spritesheet-Character-Gene...
Good idea indeed! Will do:)
There are some other issues with some of the assets that are worth fixing, but they can't all be done in software.
First, there's the Orc body. Because it has a bigger head, normal clothing doesn't work correctly (it goes over the Orc's chin). The easiest fix is to cut out the head in its own layer, and put the head above torso clothing in forward and sideway frames.
In general, it would be better to cut out arms, legs and heads and put them in separate layers, and then stacking them in the right order when composing the spritesheet. This avoids the need for cut-outs in strategic places that will turn out to be wrong if you use, say, a different type of clothing.
For weapons, it probably makes sense to maintain one version, and then shift it as needed for frames other than the male sprite.
There is a similar problem with hair and helmets/hatz, especially the bandana. I am going to make masks showing where hair can and can't be drawn, and each helmet will need it's own mask. Most game engines can load up such masks quickly and easily and clip sprites for you. A similar process can be used for the orc and other issues. As far as arms and legs oh man I so agree. I've considered making layered arms and legs, which would allow for the creation of new and more diverse animation cycles, without making more of a headache for artists. The arms and legs can be anchored to an origin. The same method should apply to hats. Most hats are just 3 images, one is mirrored and then those 4 just get pasted in the right space. weapons and hats would be much simpler to define
For hats I actually have a program that takes the necessary frames and spits out the spritesheet, which I think I've used a grand total of one time.
Still, it'll be useful if/when I get around to making my own head gear.
I have the Orc head split off on its own spritesheet for the frames I'm interested in. I also have an incomplete "carry above head" walking animation lying around somewhere. It's not hard to make these things (using existing frames), but it is very tedious to have to separate body parts first (and then fill in formerly occluded body parts).
Yes there are some of these issues indeed, I never thought of splitting the bodies in parts but it makes sense indeed. But it will be quite some work. Personally, I just accepted that some of the combinations don't work, and try to focus on the ones that do, which are still a lot and of great quality.
But ofcourse it would be nice to polish the complete set:) So maybe Evert, do you still have that spritesheet for the Orc cut in two layers? I would like to give it a try and fix it in the generator using that solution. It could be a quick win.
Let me know!
Sure, here's the head (the other half is just the standard Orc spritesheet). There's no problem with the back view, so it doesn't include the head for that one, and I haven't made Orc archers yet, so it's also missing the archery frames. And the death animation, it seems.
There are some other assets where making two separate "in front" and "behind" layers makes sense, like the cape (it's much easier to put the full cape behind the body than it is to make cut-outs). That's also useful for weapons.
orc_head.png 94.2 Kb [18 download(s)]
Everything in my collection with the exception of chin/torso combos, lizard/hat combos hair/hat combos.
The lizard thing is sprite specific and can't be fixed dynamically, but the chin problem can be solved with the drawing heads separately like your method but also with masking method I plan to come up with for hair. I'm hoping that I can have it be as simple as a defined rectangle within the sprite, origin top left 0,0 and just define a rectangle with range 0-63 for x and y of where it is ok to draw hair. unfortunately some may require more than 1 rectangle. My engines clippers can handle it no problem, is that something you could easily implement into the generator, Evert?
Also, I've been working on a universal cape, it just needs a little more work. The cape NEEDS to be drawn over the body because it has parts that overlap feet; the cape exists in the background and foreground, so the cutout still makes sense unless you want to have 2 sheets and do 2 draws.
Here is an example of the mask. This represents where hair can be drawn for ANY hairstyle for the male chain hood. It assumes any long hair would be tucked inside the hood, which is reasonable enough, right?
Yes this would definitely work in a game engine easily. I need to see if it can also be achieved in one way or another in the generator code. In fact it is just a cropping action to the mask applied. Maybe there is an easy way. I will have a look at it!
btw, the capes made for female by jaidyn have later also been adapter for male characters. Yesterday I added them correctly to the generator. Are they similar to your universal cape?
Update:
HMTL canvas does not support clipping with a mask like this. You can clip, but on only rectangles. So supporting custom masks will propably require a lot of extra work, ie moving away from canvas and use some other drawing tool
Currently, the generator does support drawing images behind the body (ie force it to the bottom layer). However, there are no additional layers support, like normally you would use a z-index. It draws all content over each other in order of how the list is created in the generator.
EG, if I would put the hair sprite on the top of the list, the body would be drawn over the hair etc. etc. One way to overcome this, is to add custom z-property to each item. Then, before drawing the items, create an array of all drawables, sort them on z-property and then do the drawing.
Also quite some work. I will make the z-index support my priority, But I think I will add missing sprites first (like androgynous and pregnant characters).
Any ideas from you guys?
I should point out that I don't actually use the generator itself, I just cloned the repository locally to have all the assets available in one location. Well, all the assets that are in the generator anyway; I think some of them may not be up to date though (the axe is what I noticed).
One thing I didn't like about the generator when I tried it (the original version a few years ago anyway): restricting what I can include in the sheet based on body type. I think the cape was female-only, but I wanted a cape on a male character. Couldn't be done. Sure, I if I want to actually use the sprite, it needs to be touched up, but if I just want to have a quick-and-dirty version to get an idea for how it looks, it's annoying that I'm arbitrarily limited because of body type.
Regarding the cape (and similar things): yes, in fact I do want two sheets to draw, one behind and one on top of the body. The reason is that depending on the frame, some parts of the cape should be behind the body, but other parts should be in front, and relying on cutouts is not good enough. Sure, you can make it work with the standard spritesheet easily enough, and it feels clever. Then you make a character that is wearing bracers, or spiky armour and oops, the cut-out no longer works! What if the character is wearing robes, or trousers? The same cut-out doesn't work for both combinations. Similar issues when trying to switch it from male to female sprites: having to fix the cut-out is more work than it would be if you simply had two layers.
The main issue, by the way, is in the side-facing frames. For the north and south facing frames you can simply change the drawing order, and it'll work correctly.
Having said all that, I should further point out that I do very little compositing within my game itself (just weapons, because those can be swapped; I haven't decided on what to do with armour yet, but that'd probably be switched as a set too, and only for the main character). Most of the compositing work is done in Gimp. If I were to do compositing in the game though, I would build the character spritesheet on the fly, similar to how the generator works, then draw from the generated spritesheet.
Ah is there a newer version of the axe to use? Then I would like to update it.
Yes i agree that is quite an annoying feature. On hand, it helps understand quickly that it is not supposed to be supported, but sometimes you want to draw it anyways. I already removed it at some points.
Yes about the cape I agree with your remark. It is also how it is done now.
I also dont do composition in the game. Just use the sheets generated by the generator. That way I can easily prototype in a quick way. For me, I find it easier than recreating the logic made in the generator. Also, it helps me to find bugs in the generator/ assets, and when I am able to fix them everybody can benefit from it.
Moreoever, when you composit all sheets in game, you will need to load all the separate textures in memory, if you use a lot different asset combinations (which I do for example).
BTW to quickly support the separate head sprites, I will just add another entry "Heads" where you can attach another head to the sprite. The fun thing is now, that you can put an orc head on a skeleton for example. Quite fun!
I think so. The attack animation I grabbed from the spritesheet folder yesterday is the weird "wave axe in front of my face" rather than "swing axe at the enemy", which I think was fixed in the actual spritesheet.
Evert, I don't see what you mean about the cape. The cape cutout works perfectly with bracers, with everything else in the set. Two sheets will do nothing but take up space and slow down CPUs. It sounds like you think one cape can be made that fits both sexes, it won't.The body types are different and the cape will look goofy for one of them.
Castelonia, the male cape on the repo doesn't come close to fitting, the JeidynReiman cape is why I started making my own cape/necktie in the first place
Evert, I think I understand something now. If a spiky armor is messing up your cape, you are drawing the cape to the wrong layer. Simply draw the cape behind the player for that frame. That doesn't require differerent sheets though.
I don't see why the adjusted male cape is so bad, where should I pay attention to to see the issues?
It has gaps in down dir frames. I just overlaid it over the female cape and it seems to work. Maybe it was designed as an extension to female? On its own though it's incomplete. On the down frames you can see It wrap around legs but gap between torso and arms, where you should see cape, possibly edge of it but still something
Yes it should be used in combination with the female backcape (as described in the actual submission):
"I didn't adabt the back cape, because female version works with it."
Yesterday I found this out as well, and it is now working properly in the generator. That is also why I was surprised because of your reaction that it does not work
Damn, I should have read that submission text more carefully. Scratch my cape. My work on the necktie, though, is great. I made it look great for both male and female. Will be doing Cape clip soon too
You're missing the point. Cutouts work as long as the thing they cut around have the shape that you expect. The bracers extend outside the outline of the arm, so if your cut-out was made to reveal the arm, it will now incorrectly occlude part of the bracers. Even if it works fine with everything now, there's no guarantee it'll stay that way. Cutting out parts that should be hidden behind other parts of the sprite rather than working with layers is simply not scalable when you want to combine assets this way.
No it won't, unless you're compositing in real time, which is a waste regardless. If you composit the sprites off-line (GIMP, the generator) it's not an issue, and if you do it on-demand but cache the resulting spritesheet, it's also not an issue. Keeping all the LPC assets in memory is a waste of resources anyway.
That's not what I'm saying. Perhaps I don't care that the cape doesn't look right, but I do want a quick idea of what the sprite looks like overall. If I want to actually use the sprite sheet, I'll need to fix up the cape afterwards, but that's probably still less work than if the program doesn't allow me to put the cape in at all.
bigbeargames haha ah well, shit happens sometimes. Looking forward to see the work on the necktie!
Masks should work in with canvas, it should be similar to replacing colors:
Iterating through the pixels of the mask, if pixel has mask color do a clearRect on the pixel of the other image.
In my opinion, the biggest down side of the generator was, that it can't generate attribution or links to the original assets.
I don't think, dropping the creative commons license completely was a good choice either.
Basto something like that would work, though that requires a mask that indicates which pixels should be removed, instead of a mask that indicates what should be visible. This would be possible though.
For the Attribution, i could generate one credits file that contains attribution for all assets, and put it in the repo, or do you need it per asset?
I just started to fork it and try to put all meta data into tsx-files.
For now I plan for the tileset following properties:
For tiles (always the first of a row):
I'm not sure if I also want to use tiled's animations, that would be pretty redundant. Content of the author json is:
This would allow to mix spritesheets with different formats, warn for missing animations, generate a spritesheet with only a part of all animations. Encoding relationships between spritesheets could help to apply improvements of the original to derivatives.
This would allow games to access that data, instead of hardcoding it for the generator.
I also want to throw out cloudflare, since I think it's stupid to load libraries from other sites. The risk, that I'll just loose motivation is high.
Quite some good ideas there, though I think the chances you would loose motivation are in fact, very high:P
I will add pregnant females sprites to the generator today, I still believe in the generator as it is now :)
BTW, what did you mean when you said about "Dropping CC license was a bad idea"?
All LPC spritesheets are at least licensed GPL 3.0 and CC-BY-SA 3.0
Your repository is only licensed GPL 3.0, therefore people who wanna use by-sa would need to look on oga for the originals.
Generated spritesheets from those sources are also only GPL 3.0 then.
You neither mention the authors or link to the uploads on oga, which is fine for GPL 3.0
Universal LPC spritesheet has an AUTHORS.txt for by-sa.
I mentioned it, because I think you just overlooked that side effect of replacing the submodule.
Yes you are completely right I overlooked that, my apologies.
If I copy the authors and licenses, and offcourse I need to adjust the authors btw, would it be enough for allowing by-sa?
I added support for the pregnant women by Elizawy as well. They only support walk animations, all shirts and pants are in it as well now. BTW, you dont need to be a man to be pregnant according to the generator now;)
For the record, the reason I don't generate finished sheets and just load all the equipment into memory and generate it in game is because in my game when you change equipment, it changes your sprite. so it would require millions of sprite sheets if I wanted to use the generator
@castelonia: I'd copy cc-by-sa 3.0 to the bottom of the LICENSE file and mention in the beginning that the code is GPL 3.0 everything in spritesheets/ is dual licensed under GPL 3.0 and CC-BY-SA 3.0.
And that the authors can bee looked up in the AUTHORS.txt file.
What makrohn did is already a pretty dirty way of doing it. You would also need to give the correct title of the work, it would be better to use the actual file names
How do I properly attribute material offered under a Creative Commons license
I always had trouble finding the originals.
@bigbeargames: I use the generator as an overview and preview.
Its faster for me to just use my own generator, built into my games map editor. It automatically loads whatevers is in the directories
Thanks basto! I will look into doing this tomorrow. Indeed it will be quite hard to attribute properly, maybe I can also use the generate license file from my collection at OGA as input.
bigbeargames yes makes sense in your situation to load/ compose sheets at runtime. I was hoping that maybe it could still serve you for prototyping, but appearantly you already have that covered
Still I want to help support it!
Luckily it's quiet easy to load XML and JSON with vanilla Javascript.
I'm loading spritesheets into charactersets, distinguished by name and category.
This means male and femal are in one set, but more interestlingly such sets would make it pretty easy to load sprites with multiple layers.
I wasn't aware of that possibility, just chose sets so animations can be scattered over multiple files.
Can you post your work on the above head sprites?
https://basxto.github.io/Universal-LPC-Spritesheet-Character-Generator/
I've only adden 4 sprite sheets so far.
It does not really run. You can select sprite sheets and it breaks easily.
I added the orc head, just a trial. I see it is has a small offset somehow. Still, i think having the heads separate might be handy and fun, as you can make some strange combinations then, and headless characters:)
I also updated the licensing and attribution, not perfect yet but it is a start
I'll go the hard way for my version. I'm still not sure how I wanna handle multiple links (github, oga etc.)
But you find some funny things here and there: JRConway3 and JaidynReiman is the same person.
I plan on doing an PR in the end, I could already generate sprites from multilayer assets (same category, name and sex)
Maybe for heads and such it would be easier to just specify the offsets for each frame instead of actually manually copying it. Maybe I'll play around with that for Major Triumph, I really don't wanna do that manually. You would even need to do less if the overlapping arms are on a different layer.
It would be harder to import that into a game, but one could always just generate the sprite sheet.
Only bad thing with canvas is that you can't create 8bit PNG with indexed pallette. I guess it's sufficient to shrink it manually later on.
Recoloring also could be done with simple color replacement. Gimp's pallette (gpl) files are just plain text.
I also think body none could be practical for generating dress combinations.
But I have no idea how to handle sprites that depend on others like noses, lizard hood etc.
Pages