[SUG][PLAYER] Remove support for fully custom lemming sprites, allow recolors.

Started by namida, August 15, 2019, 09:21:42 PM

Previous topic - Next topic

0 Members and 2 Guests are viewing this topic.

namida

EDIT: The decision has been made - custom lemming sprites will continue to be supported, but a recoloring system will also be implemented that can be used where only a recolor is desired. This will mean that sprites that are just recolors need no updates for new features - the same recoloring just gets applied to the new sprites automatically.

The whole debacle with shimmier sprites shows that custom lemming sprites are going to be a problem whenever anything new is introduced. We've had some styles where the shimmier graphic is present but the associated metadata is missing; and custom styles are giving error messages due to lack of shimmier sprites. At least in this latter case, V12.6.0 no longer crashes - it instead shows an error (only once per session, after this it's silent) and falls back to default sprites.

I'm thinking the easiest way to avoid this - remove the support for custom lemming sprites altogether. Instead, allow custom style creators to specify recoloring data only. Almost all existing custom sprites are just recolors of the default ones. The Xmas sprites aren't quite, but they're similar enough that a recolor would achieve the needed effect. Alternatively, the Xmas sprites - as official content rather than custom - could be kept, and styles can select one or the other and recolor from there.

A third option is of course a hybrid approach - leave support for custom sprites in, but also implement the recoloring option. Styles that only need to recolor can then use this (which I believe is all styles aside from Xmas, some of GigaLem's styles, and some of Plom's styles - even Arty's silhouette style could be done with a recolor-only setup), and won't need any further work for future updates; while those who wish to use custom sprites can still do so - at their own responsibility for keeping their sprites updated. With that being said, if we're going to go this route, I would need to see that people actually using this feature are in fact willing to maintain their sprites - so how quickly we get the shimmier graphics for the relevant styles may affect how willing I am to consider this option.
My projects
2D Lemmings: NeoLemmix (engine) | Lemmings Plus Series (level packs) | Doomsday Lemmings (level pack)
3D Lemmings: Loap (engine) | L3DEdit (level / graphics editor) | L3DUtils (replay / etc utility) | Lemmings Plus 3D (level pack)
Non-Lemmings: Commander Keen: Galaxy Reimagined (a Commander Keen fangame)

Minim

I'm in support of the removal of custom lemming sprites, but if I were you I would send a PM to all the graphic set creators who use custom sprites. As for Christmas I might put them in a separate folder first until the shimmier thing works. If we do feel the need to add Xmas sprites, the setting could be configured in the styles.ini file.
Level Solving Contest creator. Anybody bored and looking for a different challenge? Try these levels!

Neolemmix: #1 #4 #5 #6
Lix: #2  #7
Both Engines: #3

GigaLem

I'm against this, fully. I wouldn't EVER want to remove the theming the completes the Millas pack. I can't go through a cull this big, period. I've went through removing gimmicks, removing slowfreezes and radiation, but this I can't afford. You wouldn't believe the amount of roadblocks I had to go through to get to where I am, and I'm sick of getting more in the way. Unless we go forward with the third option (I haven't even got the chance to have shimmiers made, and now those are an instant must since I have no choice) DO NOT MOVE FORWARD WITH THIS CULL.

Strato Incendus

Guess what, my culling-alarm sensors are going off again... :evil:

This is another case of "I'm not personally affected by this", since all my sprites are mere recolours. BUT I immediately thought of GigaLem's edits when I read this, and as such, I cannot support an outright removal of custom-sprite support.

GigaLem put a lot of effort into actually changing the shape of the sprites. You don't want to punish content creators who put in more work than others. Otherwise, you're going to demotivate specifically those people who could provide the most interesting new things to the game.

([virtue-signal]See, kids? That's called empathy. Caring about other people being affected even when your own stuff isn't. Probably could have prevented some other culls as well...[/virtue-signal] :P)

Wasn't this one of the main appeals of New Formats that you originally advertised to me during the transition period? ;) That adding custom sprites is a lot easier now than in Old Formats?

At the same time, having to change the image files for all sprites whenever one wants to do a mere recolouring is a nuisance, and makes adding new sprites more work than it actually needs to be if it's merely about recolouring.

Therefore, I think the obvious solution is the hybrid approach you suggested:

QuoteA third option is of course a hybrid approach - leave support for custom sprites in, but also implement the recoloring option.

This would allow a "quick way" for everyone who wants to do mere recolours, and might actually encourage people to give more styles custom-coloured sprites (which is a term I'm going to use from now on to explicitly distinguish them from custom-shaped sprites).

Custom-shaped sprites should still be allowed, and would obviously require separate image files for each sprite. Especially given Nessy's plans to introduce the L2 sprites for all the respective styles across the board, this feature actually needs to remain. Remember that all L2 sprites have custom exiting animations (e.g. the Medieval lemmings raise their sword, the Outdoor lemmings sneak into the tent from the sides, etc.).

QuoteI haven't even got the chance to have shimmiers made, and now those are an instant must since I have no choice

I've already seen namida's "fallback" feature in action, i.e. the security routine that detects missing sprites and just automatically switches back to default sprites. If that routine works consistently, I don't really see the problem - neither with missing sprites being a danger to the stability of the game, nor with GigaLem being under any time pressure to create Millas Shimmiers?

Removing support for custom-shaped sprites would definitely be an overreach with this feature already implemented. Without this security measure, I would have had some understanding and would have seen it as a tradeoff between stability and creative options. But with that routine in place, there's really no justification to remove support for custom-shaped sprites.

If a lemming-sprite creator is "lazy" and doesn't update their sprites with the newest skills (like e.g. the Jumper being next on the list), then they will simply automatically be "punished" by no-one actually getting to admire their work as long as the sprite set isn't complete: The game will simply automatically resort back to default sprites, and no player will ever get to see what this specific content creator's custom sprites look like - until they are complete and thus automatically added again.

(And to be clear, I'm not calling GigaLem specifically "lazy" for not having made Shimmier sprites yet. I simply acknowledge that some people may have more good reasons to not update their sprites than others... ;) )

So it's like a general "temporary ban" of incomplete sprite sets. Not bothering the player with stability issues, but also not outright banning the content creator from ever making custom-shaped sprites again.

So yeah, easy choice - total support for option 3. :thumbsup: :agree: That would be an improvement of the current state in every way.

Absolute and complete rejection of options 1 and 2! :disagree:
My packs so far:
Lemmings World Tour (New & Old Formats), my music-themed flagship pack, 320 levels - Let's Played by Colorful Arty
Lemmings Open Air, my newest release and follow-up to World Tour, 120 levels
Paralems (Old Formats), a more flavour-driven one, 150 levels
Pit Lems (Old Formats), a more puzzly one, 100 levels - Let's Played by nin10doadict
Lemmicks, a pack for (very old) NeoLemmix 1.43 full of gimmicks, 170 levels

ccexplore

Quote from: namida on August 15, 2019, 09:21:42 PMWith that being said, if we're going to go this route, I would need to see that people actually using this feature are in fact willing to maintain their sprites - so how quickly we get the shimmier graphics for the relevant styles may affect how willing I am to consider this option.

This kind of automatically bias against custom sprites because if we are still considering possibilities of adding new skills in future, there will inevitably come a time when the person who made some custom sprites might no longer be around or active by the time some new skill came along, possibly in the indefinite far future.

I also feel like even if a style is missing custom sprites for some new skill/behavior that the original designer had no way to anticipate, the style might still remain useful/preferred to some people, who may choose to simply avoid the skills that have missing graphics when designing levels using the style.  Custom sprites will fundamentally be problematic when it comes to new skills (or just any new behaviors that require new lemmings animations), but I'm not convinced that they become completely useless just because of this weakness.

Are there any more work left to fix the current issues with custom sprites, so that game can at least always reliably fall back to default sprites for anything missing?

Recoloring support is definitely a more future-proof way to customize sprites, and given its relative ease compared to having to make your own set of sprites, it will definitely be a good option to support.  But it is of course a trade-off since it provides much more limited customization.  It's of note that even the official games opted to create new sprites for Xmas lemmings rather than just doing a mere re-color.

Ultimately all culls will punish the people who spent time and effort in creating and using the assets that are affected.  At the same time, technically this might arguably be one of the less problematic culls, in the sense that any affected existing levels can simply change back to using the default sprites.  Unlike culls of skills/behaviors that generally require nontrivial redesigning the level around the culled behaviors.

namida

QuoteI also feel like even if a style is missing custom sprites for some new skill/behavior that the original designer had no way to anticipate, the style might still remain useful/preferred to some people, who may choose to simply avoid the skills that have missing graphics when designing levels using the style.  Custom sprites will fundamentally be problematic when it comes to new skills (or just any new behaviors that require new lemmings animations), but I'm not convinced that they become completely useless just because of this weakness.

Are there any more work left to fix the current issues with custom sprites, so that game can at least always reliably fall back to default sprites for anything missing?

Currently, NeoLemmix does not fall back on a per-file basis, it's all or nothing. So for example - if one were to play one of GigaLem's levels that use his custom sprites right now, they would get the default lemmings because of the missing Shimmier graphics, even though the levels themself don't use Shimmiers.

A per-file fallback is perhaps an option I could look into implementing. It's not completely straightforward, as the metainfo also will need to be loaded from a different file in this case - basically, there's one (sometimes two; the second is optional, and they should be taken as a pair - ie: if the custom style lacks the optional one, don't combine the custom style's 1st file with the default's 2nd) PNG files per animation, and a "scheme.nxmi" file with metainfo for the entire spriteset.

The other issue that arises here is the recoloring for selected lemming / etc - this is based on replacing colors, and the current code only supports loading one style's data at a time. Loading both could give weird visual results, while applying different sets based on the individual sprite would be extremely messy.
My projects
2D Lemmings: NeoLemmix (engine) | Lemmings Plus Series (level packs) | Doomsday Lemmings (level pack)
3D Lemmings: Loap (engine) | L3DEdit (level / graphics editor) | L3DUtils (replay / etc utility) | Lemmings Plus 3D (level pack)
Non-Lemmings: Commander Keen: Galaxy Reimagined (a Commander Keen fangame)

GigaLem

I am currently looking into having the custom sprites be made before any more progress on Millas is made
The only compromise I've thought of is to put custom lemmings sprites in a different spot and have any custom lemmings be selectable from a menu on the editor
as in "if you want to use Xmas lemmings in a non-xmas level, go to the drop down menu and select xmas"
Like have use for custom lemmings be universal instead of just "Per set" add a bit of freedom to which set you use.

And this something I highly recommend in the future, for creators that want keep their custom lemmings up to date, PLEASE DM or PM THE NEW SHEETS AND SCHEMES TO THEM! This will let them know to get new sprites done ASAP. Some people do more maintenance than you would think.

Dullstar

I support the hybrid option! My suggestion would be to do this in a way that future-proofs functional-even-if-incomplete outdated styles (even if this might require another period where every set needs to be updated once now to keep working):

Suppose a set uses custom lemming sprites which do not have shimmier graphics. My desired behavior would be that the game would use the custom sprites when they're available, and fall back on the defaults if they are not, on a per-animation basis. So assuming the shimmier sprite is the only missing graphic, the style would function as normal in a level which contains no shimmiers. This fallback behavior should respect the proposed recoloring as well, which would add an advantage for the L2 sets given L2's exiting animations: for any set that is based off the defaults but contains a few custom animations, the set would only need to provide data for the animations it wishes to overwrite.

If desired, the editor could be made to give a warning if an animation potentially required in the level is missing: again, assuming only the shimmier is missing, the warning only displays if the level contains shimmiers. This warning would likely require some metadata to distinguish between out-of-date sets and the default-with-some-custom-animations scenario I described, however.

namida

The problem there is that currently, NeoLemmix isn't coded to handle mix-and-matching lemming sprites from different sets. The actual spritesets wouldn't be too hard to make mixable, but the recoloring would need some significant rewriting to be able to handle it properly. Displaying the warning only on levels that (for example) contain shimmiers would be even trickier.

Honestly - I think it's best we rule out any per-sprite fallback, on complexity grounds. I agree that the points being raised in favor of keeping custom sprites as an option are valid - so I will leave support for them in, while also implementing the recoloring capability. I'll have to think about the best way to go about this. Custom sprites will remain on an "all or nothing" basis - if even one graphic is missing, NeoLemmix will fall back to default sprites. (The alternative without getting too difficult to implement, is that those sprites just result in a blank lemming, or a fallback to a different animation.)
My projects
2D Lemmings: NeoLemmix (engine) | Lemmings Plus Series (level packs) | Doomsday Lemmings (level pack)
3D Lemmings: Loap (engine) | L3DEdit (level / graphics editor) | L3DUtils (replay / etc utility) | Lemmings Plus 3D (level pack)
Non-Lemmings: Commander Keen: Galaxy Reimagined (a Commander Keen fangame)

ccexplore

Quote from: namida on August 17, 2019, 03:49:35 AMHonestly - I think it's best we rule out any per-sprite fallback, on complexity grounds.

That's fair.  Hardly worth the effort for the few styles out there that might benefit from it, if it also means higher potential risk of game-breaking bugs that may end up affecting everyone.

Plus, the experience would be weird anyway when player actually sees a lemming jarringly goes from a custom sprite to a default sprite in case of an action like skill assignment.  I think most player would rather stick with all default sprites if this could happen in a level.

Quote from: namida on August 17, 2019, 03:49:35 AMCustom sprites will remain on an "all or nothing" basis - if even one graphic is missing, NeoLemmix will fall back to default sprites. (The alternative without getting too difficult to implement, is that those sprites just result in a blank lemming, or a fallback to a different animation.)

There might be some merit to the "blank lemming" idea (or at least some kind of placeholder sprite, one that looks obviously wrong).  Specifically if we like to let people see custom sprites on levels that could never end up showing a missing sprite.  Basically, falling back to all defaults is likely the best option for levels where the missing sprites need to be displayed, while sticking with the custom sprites is likely the best option for levels where the missing sprites will never be displayed.

It almost feels like there may be merit to have a user option (ideally easily hot-key toggle-able) to pick one or other way for missing sprites handling.  Ideally maybe in most cases, you can reliably tell ahead of time whether missing sprites will be displayed based on available skills and objects in the level, and could then pick the right option for the player.  But admittedly that adds complexity again for what may be relatively corner cases.

Falling back to a different animation doesn't seem much better than to a blank/placeholder lemming, in fact might be worse if it can cause player confusion (even if only momentarily) due to looking too similar to some other skill or action than what is actually happening.  I think a player would be better off seeing the obviously wrong blank/placeholder lemming, and then can respond by changing setting for that level to use default sprites.

Then again, seems like for the missing sprite to happen at all, the level designer would have consciously chosen to use a combination of style and skill that is known to have that issue.  Why the heck would they want that for the player?  You'd think they'd make sure to limit their level to only support things that can actually be properly displayed by the custom sprites of the style, or else use a different style (or otherwise just setup the level to use the default sprites instead).  If we have faith in that, we can potentially just do blank/placeholder lemming as the only fallback option.

Strato Incendus

Great, thanks for going with the hybrid approach, namida! :thumbsup:

Regarding the "all-or-nothing" fallback on default sprites in case of missing sprites: I'm fine with this, because it's a mild form of "punishment" for people who forgot to update their sprites, serving as a gentle reminder to do it because they won't even get to see their own sprites while testing their levels. At the same time, it is automatically fixed once the sprites are updated.
My packs so far:
Lemmings World Tour (New & Old Formats), my music-themed flagship pack, 320 levels - Let's Played by Colorful Arty
Lemmings Open Air, my newest release and follow-up to World Tour, 120 levels
Paralems (Old Formats), a more flavour-driven one, 150 levels
Pit Lems (Old Formats), a more puzzly one, 100 levels - Let's Played by nin10doadict
Lemmicks, a pack for (very old) NeoLemmix 1.43 full of gimmicks, 170 levels

namida

QuoteRegarding the "all-or-nothing" fallback on default sprites in case of missing sprites: I'm fine with this, because it's a mild form of "punishment" for people who forgot to update their sprites, serving as a gentle reminder to do it because they won't even get to see their own sprites while testing their levels. At the same time, it is automatically fixed once the sprites are updated.

Yeah, this is another part of it. I agree now, that removing the support altogether is going too far - but I don't see much reason to go out of my way to implement far more complex fallback behaviour, just to account for people who don't update their sprites. Now on the other hand, Dullstar's point about it being useful for cases where a spriteset just wants to replace one or two specific animations, is a use case I'd be more interested in doing this for - but it's still a lot of work given the current implementation. It might be something for me to take into account if I ever feel the lemming animation system needs a complete rewrite anyway (and complete rewrites of parts of the code do happen from time to time).

QuoteThis fallback behavior should respect the proposed recoloring as well, which would add an advantage for the L2 sets given L2's exiting animations: for any set that is based off the defaults but contains a few custom animations, the set would only need to provide data for the animations it wishes to overwrite.

Regarding L2's exiting animations - are these unique for every style, or is there a single exiting animation that's different from the L1 one? If it's the latter, then this could even be done by having an "l2_general" style containing the lemmings, and using the recoloring features from there.
My projects
2D Lemmings: NeoLemmix (engine) | Lemmings Plus Series (level packs) | Doomsday Lemmings (level pack)
3D Lemmings: Loap (engine) | L3DEdit (level / graphics editor) | L3DUtils (replay / etc utility) | Lemmings Plus 3D (level pack)
Non-Lemmings: Commander Keen: Galaxy Reimagined (a Commander Keen fangame)

Pooty

Quote from: namida on August 17, 2019, 08:42:39 PM
Regarding L2's exiting animations - are these unique for every style, or is there a single exiting animation that's different from the L1 one? If it's the latter, then this could even be done by having an "l2_general" style containing the lemmings, and using the recoloring features from there.

Each tribe (and therefore each style) has unique exit animations from each other, although the Classic Tribe exit animation is pretty much the same as the one in L1.
SEGA Master System version
100% on 110/120 levels (92%). Other levels [Lemmings lost]:
Fun 03 [3], 06 [2], 18 [5]   
Taxing 19 [5], 27 [1], 28 [3]
Tricky 15 [5], 17 [2]
Mayhem 19 [7], 26 [10]

Strato Incendus

Yeah, I gave some examples above, but here's an overview of the exit animations of Lemmings 2, trying to describe them to the best of my ability:

Beach: you see the lemming from behind as he walks up a couple of steps of the front stair of the sand castle before vanishing into the interior
Egyptian: you see the lemming from behind, he walks slightly up and then downward into the pyramid
Outdoor: the lemmings sneak into the tent from the side
Medieval: the lemming raises his sword to "greet", then turns around and goes into the castle
Classic: very similar to Original Lemmings, maybe slightly more like simulating a curved trajectory, as the Pillar exit, which is used for all Classic levels, features a staircase - so they probably wanted to make it look more like the lemmings were walking up that staircase
Circus: the lemming takes a bow in front of the tent before turning around, you see him from behind, getting smaller as he vanishes into the tent
Highland: the lemmings walk into the telephone cell from the side (because the door of the exit always looks closed)
Polar: you see the lemming from behind, he swings his arms as he's walking down into the igloo, almost looking as if he were running (or maybe ice-skating?) - perhaps because he's cold? :D
Space: the lemmings do multiple backflips, rotating because of anti-gravity as they float off into space
Cavelem: the lemmings take a bow in front of the cave - very similar to Circus, it seems to me, but not exactly identical
Shadow: the lemmings approach the gap in the middle of the box and sneak in from the side, doing a slight jumping motion
Sports: the lemmings walk straight ahead towards the flag pole while you see them from behind, becoming smaller and smaller the farther away they're supposedly getting from the player
My packs so far:
Lemmings World Tour (New & Old Formats), my music-themed flagship pack, 320 levels - Let's Played by Colorful Arty
Lemmings Open Air, my newest release and follow-up to World Tour, 120 levels
Paralems (Old Formats), a more flavour-driven one, 150 levels
Pit Lems (Old Formats), a more puzzly one, 100 levels - Let's Played by nin10doadict
Lemmicks, a pack for (very old) NeoLemmix 1.43 full of gimmicks, 170 levels

grams88

The Highland one I think the lemmings are drunk and fall into the phone box, I think this was associated with Scotland in that we like to get drunk so they say.