Replies: 16 comments 57 replies
|
My thoughts:
|
|
I don't mind frameworks, though I've personally never used Mythril its still JS. Wouldn't be too hard to learn. I don't have any inherent problem with rewriting the codebase as long as it works and we don't lose functionality. I'll do a bit more research on it before commenting further, though. |
|
In the defense of mithriljs (first time using it too), it is just replacing jquery. It uses a vdom and enables reactivity which makes it easier to compose some patterns and keeps it relatively performant when compared against vanilla dom manipulation (and all of this without requiring an npm build). The rendering part still uses the actual dom.
If this gets traction I would achieve parity before releasing it, and then would iterate with smaller updates (the canvas is still using the DOM, the mithriljs components can probably be further improved, the global state can be handled better, etc). These should be easier to play with once everything is more straightforward. As a closing note, I think the value this tool provides is not the how, but the what. If changing the how can improve the what (smoother UX to generate the sprites for my game), and more people find it useful in the end, that would be a nice win. Thanks for opening the discussion :). I have had fun doing all of this, and it is in a state that it is usable for my needs, so I am ok with what you decide. |
Oh yes. Definitely in favor of improved reactivity and getting rid of jquery slop. Again, this doesn't actually require a js framework.
We don't, technically, but I find it makes the code easier to read.
I agree with this. I think this is overall a technical improvement, so as next steps we should achieve parity and discuss any interface changes. @cdvv7788 Can you post some screenshots for discussion purposes? Anyway, I think first the order should still be download, controls, filters, body type, selections, available items on the left. I also think the left and right sides should remain independently scrollable. I do generally like the shadow boxes and more prominent buttons though. |
|
We’ll probably need to rewrite the codebase at some point since it’s starting to show its age by today’s standards. The main question is which framework we should use. This is actually the first time I’ve heard of Mithril.js. I read through its documentation, and it seems like a decent option, especially since we only need a client-side framework. However, I’m not sure how future-proof it is or how strong the community support will be in the long run. We might risk losing contributors if people aren’t familiar or comfortable with it. It might be good to consider other factors, like how well-supported the framework is in terms of third-party libraries, that we might want later on, such as styling libraries or other tools. I think it will be better to update/migrate each part one by one instead of rewriting everything. There are also popular lightweight options out there that we can consider. |
|
Ok people, I think I am done with this for now https://deploy-preview-223--liberatedpixelcup.netlify.app/#bodyType=male&body-body=light&head-heads-heads_human_male=light The main features should be in place, I just need you to decide if you are moving forward or not now (not rushing like
Waiting on you finishing the discussion for now. I may tweak it here and there, but I will stop adding features now (I think functionally I should have achieved at least 95% parity by now). In the case where you decide not to move forward with it, that's ok too. Feel free to use the code if it helps you further down the line when you decide it is time for a revamp. It has been a fun ride, you got a nice tool :) |
|
To be honest, it's mostly there. Some missing features I see:
|
|
I think the main focus if we merge it to a branch here would be discussing how we want the tree to look like. Ideally I would like to have what we can and cannot render based on the path. For example, if we already have a body, don't allow other bodies to render at all. At this moment this can happen with regular bodies and the zombie body for example. The exclusion key is body-body vs body-special. If we can make the structure of the tree dictate this exclusion, we can control the app just by placing assets in the right path. Any ideas about this? Should we just make zombie a body type? Should we give the bodies a special treatment? |
|
Remaining things (not blocking, just for remembering and discussion)
|
|
Now that we have a new branch, I think we can report issues related to said branch and slowly work on them. I still have yet to review again, I've been busy with other things (and work). But I'll try reviewing later in the week. |
|
@sanderfranken did some testing. Here is what he found:
|
|
@cdvv7788 Are you registered on the OpenGameArt.org discord? If so, what's your username? I can add you to our chat. |
|
Further issues: Details
{
"bodyTypeName": "female",
"url": "https://liberatedpixelcup.github.io/Universal-LPC-Spritesheet-Character-Generator/#?body=Body_color_light&head=Human_female_light&sex=female&hair=Sara_blonde&earring_left=Simple_Earring_Left_blue&earring_right=Simple_Earring_Right_blue&earrings=none&eyes=Eyes_blue&nose=Straight_nose_light&clothes=Shortsleeve_sky&hat=Tiara_tiara_silver&apron=none&shoes=Sara_sara&legs=Straight_skirt_navy&sash=Waistband_rose&cape=none&facial_left=none&neck=none&buckles=Buckles_gold&weapon=none",
"spritesheets": "https://liberatedpixelcup.github.io/Universal-LPC-Spritesheet-Character-Generator/spritesheets/",
"version": 1,
"datetime": "8/21/2025, 2:45:16 PM",
"credits": [
{
"fileName": "body/bodies/female/light.png",
"licenses": "OGA-BY 3.0,CC-BY-SA 3.0,GPL 3.0",
"authors": "Benjamin K. Smith (BenCreating),bluecarrot16,TheraHedwig,Evert,MuffinElZangano,Durrani,Pierre Vigier (pvigier),ElizaWy,Matthew Krohn (makrohn),Johannes Sjölund (wulax),Stephen Challener (Redshrike)",
"urls": "https://opengameart.org/content/liberated-pixel-cup-lpc-base-assets-sprites-map-tiles,https://opengameart.org/content/lpc-medieval-fantasy-character-sprites,https://opengameart.org/content/lpc-ladies,https://opengameart.org/content/lpc-7-womens-shirts,https://opengameart.org/content/lpc-jump-expanded,https://opengameart.org/content/lpc-be-seated,https://opengameart.org/content/lpc-revised-character-basics,https://gitlab.com/vagabondgame/lpc-characters,https://opengameart.org/content/lpc-male-jumping-animation-by-durrani,https://opengameart.org/content/lpc-runcycle-and-diagonal-walkcycle",
"notes": "see details at https://opengameart.org/content/lpc-character-bases"
},
{
"fileName": "head/heads/human/female/light.png",
"licenses": "OGA-BY 3.0,CC-BY-SA 3.0,GPL 3.0",
"authors": "bluecarrot16,Benjamin K. Smith (BenCreating),Stephen Challener (Redshrike)",
"urls": "https://opengameart.org/content/,https://opengameart.org/content/lpc-character-bases",
"notes": "original head by Redshrike, tweaks by BenCreating, modular version by bluecarrot16"
},
{
"fileName": "head/nose/straight/adult/light.png",
"licenses": "GPL 3.0,CC-BY-SA 3.0",
"authors": "Thane Brimhall (pennomi),laetissima,Matthew Krohn (makrohn)",
"urls": "https://opengameart.org/content/lpc-base-character-expressions",
"notes": ""
},
{
"fileName": "hair/sara/adult/fg/blonde.png",
"licenses": "OGA-BY 3.0,CC-BY 3.0",
"authors": "Stephen Challener (Redshrike),William.Thompsonj,Mandi Paugh,bluecarrot16",
"urls": "https://opengameart.org/content/lpc-sara,https://opengameart.org/content/lpc-hair,https://opengameart.org/content/lpc-expanded-xlong-hair",
"notes": ""
},
{
"fileName": "hair/sara/adult/bg/blonde.png",
"licenses": "OGA-BY 3.0,CC-BY 3.0",
"authors": "Stephen Challener (Redshrike),William.Thompsonj,Mandi Paugh,bluecarrot16",
"urls": "https://opengameart.org/content/lpc-sara,https://opengameart.org/content/lpc-hair,https://opengameart.org/content/lpc-expanded-xlong-hair",
"notes": ""
},
{
"fileName": "hat/formal/tiara/adult/tiara_silver.png",
"licenses": "CC-BY-SA 3.0,GPL 3.0",
"authors": "Luke Mehl",
"urls": "https://opengameart.org/content/female-mage-clothing-set,https://opengameart.org/content/lpc-expanded-hats-facial-helmets",
"notes": ""
},
{
"fileName": "facial/earrings/simple/left/adult/blue.png",
"licenses": "CC0",
"authors": "bluecarrot16",
"urls": "https://opengameart.org/content/lpc-pirates",
"notes": ""
},
{
"fileName": "facial/earrings/simple/right/adult/blue.png",
"licenses": "CC0",
"authors": "bluecarrot16",
"urls": "https://opengameart.org/content/lpc-pirates",
"notes": ""
},
{
"fileName": "torso/clothes/shortsleeve/shortsleeve/female/sky.png",
"licenses": "OGA-BY 3.0,CC-BY-SA 3.0,GPL 3.0",
"authors": "bluecarrot16,ElizaWy,JaidynReiman,Stephen Challener (Redshrike)",
"urls": "https://opengameart.org/content/liberated-pixel-cup-lpc-base-assets-sprites-map-tiles,https://opengameart.org/content/lpc-7-womens-shirts,http://opengameart.org/content/lpc-revised-character-basics,http://opengameart.org/content/lpc-clothing-updates,https://github.com/ElizaWy/LPC/tree/main/Characters/Clothing,https://opengameart.org/content/lpc-expanded-sit-run-jump-more,https://opengameart.org/content/lpc-expanded-simple-shirts",
"notes": "original by ElizaWy walkcycle only; extended to all animations by adapting from longsleeve, edited to v3 bases by bluecarrot16; cleanup and climb/jump/run/sit/emote/revised combat adapted from LPC Revised by JaidynReiman"
},
{
"fileName": "torso/waist/waistband/female/rose.png",
"licenses": "OGA-BY 3.0",
"authors": "Bluecarrot16,Mandi Paugh,Stephen Challener (Redshrike),William.Thompsonj",
"urls": "http://opengameart.org/content/sara-wizard,https://opengameart.org/content/lpc-sara",
"notes": "LPC Sara by Redshrike, contributed by William Thompsonj, Waistband Separated by Bluecarrot16"
},
{
"fileName": "torso/waist/buckles/female/gold.png",
"licenses": "CC-BY-SA 3.0,GPL 3.0",
"authors": "Luke Mehl",
"urls": "https://opengameart.org/content/female-mage-clothing-set",
"notes": ""
},
{
"fileName": "legs/skirts/straight/female/navy.png",
"licenses": "OGA-BY 3.0,GPL 3.0",
"authors": "bluecarrot16,ElizaWy",
"urls": "http://opengameart.org/content/lpc-clothing-updates",
"notes": "original skirt by ElizaWy, extended to all animation frames and edited for v3 bases by bluecarrot16"
}
],
"layers": [
{
"fileName": "hair/sara/adult/bg/blonde.png",
"zPos": 9,
"parentName": "hair",
"name": "Sara",
"variant": "blonde",
"supportedAnimations": "spellcast,thrust,walk,slash,shoot,hurt,watering,idle,jump,run,sit,emote,climb,combat,1h_slash,1h_backslash,1h_halfslash"
},
{
"fileName": "body/bodies/female/light.png",
"zPos": 10,
"parentName": "body",
"name": "Body_color",
"variant": "light",
"supportedAnimations": "spellcast,thrust,walk,slash,shoot,hurt,watering,idle,jump,run,sit,emote,climb,combat,1h_slash,1h_backslash,1h_halfslash"
},
{
"fileName": "legs/skirts/straight/female/navy.png",
"zPos": 20,
"parentName": "legs",
"name": "Straight_skirt",
"variant": "navy",
"supportedAnimations": "spellcast,thrust,walk,slash,shoot,hurt,watering"
},
{
"fileName": "torso/clothes/shortsleeve/shortsleeve/female/sky.png",
"zPos": 35,
"parentName": "clothes",
"name": "Shortsleeve",
"variant": "sky",
"supportedAnimations": "spellcast,thrust,walk,slash,shoot,hurt,watering,idle,jump,run,sit,emote,climb,combat,1h_slash,1h_backslash,1h_halfslash"
},
{
"fileName": "torso/waist/waistband/female/rose.png",
"zPos": 65,
"parentName": "sash",
"name": "Waistband",
"variant": "rose",
"supportedAnimations": "spellcast,thrust,walk,slash,shoot,hurt,watering"
},
{
"fileName": "torso/waist/buckles/female/gold.png",
"zPos": 75,
"parentName": "buckles",
"name": "Buckles",
"variant": "gold",
"supportedAnimations": "spellcast,thrust,walk,slash,shoot,hurt,watering"
},
{
"fileName": "head/heads/human/female/light.png",
"zPos": 100,
"parentName": "head",
"name": "Human_female",
"variant": "light",
"supportedAnimations": "spellcast,thrust,walk,slash,shoot,hurt,watering,idle,jump,run,sit,emote,climb,combat,1h_slash,1h_backslash,1h_halfslash"
},
{
"fileName": "head/nose/straight/adult/light.png",
"zPos": 105,
"parentName": "nose",
"name": "Straight_nose",
"variant": "light",
"supportedAnimations": "spellcast,thrust,walk,slash,shoot,hurt,watering,idle,jump,run,sit,emote,climb,combat,1h_slash,1h_backslash,1h_halfslash"
},
{
"fileName": "facial/earrings/simple/left/adult/blue.png",
"zPos": 115,
"parentName": "earring_left",
"name": "Simple_Earring_Left",
"variant": "blue",
"supportedAnimations": "spellcast,thrust,walk,slash,shoot,hurt,watering,idle,jump,run,sit,emote,climb,combat,1h_slash,1h_backslash,1h_halfslash"
},
{
"fileName": "facial/earrings/simple/right/adult/blue.png",
"zPos": 115,
"parentName": "earring_right",
"name": "Simple_Earring_Right",
"variant": "blue",
"supportedAnimations": "spellcast,thrust,walk,slash,shoot,hurt,watering,idle,jump,run,sit,emote,climb,combat,1h_slash,1h_backslash,1h_halfslash"
},
{
"fileName": "hair/sara/adult/fg/blonde.png",
"zPos": 120,
"parentName": "hair",
"name": "Sara",
"variant": "blonde",
"supportedAnimations": "spellcast,thrust,walk,slash,shoot,hurt,watering,idle,jump,run,sit,emote,climb,combat,1h_slash,1h_backslash,1h_halfslash"
},
{
"fileName": "hat/formal/tiara/adult/tiara_silver.png",
"zPos": 130,
"parentName": "hat",
"name": "Tiara",
"variant": "tiara_silver",
"supportedAnimations": "spellcast,thrust,walk,slash,shoot,hurt,watering,idle,jump,run,sit,emote,climb,combat,1h_slash,1h_backslash,1h_halfslash"
}
]
}
Also the hash #? |
|
@jrconway3 wrote:
Yes, reading generate-sources.js it looks like it is. Before we ordered things by manually specifying the order in source-index.html. I don't want to keep doing that, however. Maybe we should add an optional order field to the sheet definition json files? |
|
Re: Eye color It looks like dynamic replacements are hardcoded to only replace the |





Uh oh!
There was an error while loading. Please reload this page.
@cdvv7788 has written a full rewrite in mithril.js here:
#223
First, do we want to consider a full rewrite in a js framework?
All reactions