Split from this topic: Can CE and NL 12.14 run from the same directory? (https://www.lemmingsforums.net/index.php?topic=7256.msg106864#msg106864)
Quote from: WillLem on November 11, 2025, 01:19:41 AMQuote from: Guigui on November 10, 2025, 11:41:44 AMBut the Play menu gives a single "Invalid pointer operation" error. Then the program closes by itself.
This is most likely due to the Sleeper sprite, which is present in CE but not in NL.
The easiest fix is to copy the default style from CE\styles to NL\styles. All other sprites are identical, only the Sleeper has been added. When prompted, choose Merge or Replace.
That should do the trick. Let me know if it doesn't.
NOTE: Simon's suggestion of making symlinks is usually done using a .bat file or similar. It's a decent idea for keeping the directories clean, and may come in handy later. We could also add an instruction to automatically copy the default style across as well.
@namida: If the above fix works, would you be happy to include the Sleeper sprite in the default NL style download? It shouldn't affect NL users at all, and would prevent CE users from running into this problem in the future. Please note that there are no plans to add any more sprites (and there are unlikely to ever be), so this should be the only update necessary.
My initial thought was yes, but then I realised: This would just move the issue from the default style, to any style with custom ones. I would also note that NL:CE should really remain compatible with any data files that work with 12.14; if the absence of a Sleeper sprite breaks compatibility, it isn't really meeting this standard.
I think the solution here needs to come from NL:CE's side. Some possible options:
1. NLCE gracefully handles the absence of a sleeper sprite. Perhaps another, non-custom sprite (or a non-sprite visual effect like recoloration or flickering) could be used as a fallback, or alternatively, the default sleeper sprite could be embedded in the EXE and used as a fallback in such a case.
2. Provide a "patch" download intended to convert (or "dual-boot") an existing NL install into an NL:CE install, that includes things like the Sleeper sprite.
Quote from: namida on November 11, 2025, 09:00:50 PMMy initial thought was yes, but then I realised: This would just move the issue from the default style, to any style with custom ones.
...
I think the solution here needs to come from NL:CE's side.
I agree that CE should provide an in-built solution and have added that to the to-do list.
It does seem though, that the styles could be managed separately to 12.14 (as long as they remain compatible with 12.14, of course).
To that end, could we encourage users who create sprite sets to include the Sleeper from now on? A simple way to do this would be to include it in the default style at this point as a template for future styles.
Regarding existing styles, a few of us have already created Sleeper sprites for most of the sets that include custom lemmings (and, there aren't that many). The only ones we didn't do are Mantha's, but I'd be happy to add those (or contact Mantha to see if she wants to do the work herself).
I probably won't push any further than this, but whilst there's a chance to sort this out style-side (as well as CE-side), it seems worth at least having the conversation.
Could you add some code so if the sleeper sprite is not present something else happens? (explode comes to mind) Maybe a weird unexplained splat?
Quote from: jkapp76 on November 16, 2025, 02:56:39 AMCould you add some code so if the sleeper sprite is not present something else happens? (explode comes to mind)
This is actually a great idea: have the lems explode rather than exit.
I'll have a go at embedding the Sleeper sprite (and default\lemmings\scheme.nxmi) into the .exe first, and fallback to default sprites if a custom set doesn't include the Sleeper (I think this happens anyway) just so that we have this as a potential option. Even so, explode might be the best way to handle this: it removes the lemming, updates the "available" count correctly, and it's more fun/novel than some awkward fallback behaviour.
OK, so after a failed attempt to embed the resources (which would only solve the default style anyway), I tried exploding lems to replace the missing Sleeper. This is fun, we get the fireworks, but it takes longer for the animation to play out, requires extra code for having the explosion not leave a crater, and fills the screen with particles which may obscure important level detail that the player may need to see.
So, let's try the Vaporizer (Burner) animation instead, effectively turning the exit into a fire trap when time runs out. This is shorter even than the Sleeper animation, less code, and less impact on the visuals (which, again, may be important).
That handles the missing sprite. We also need to handle missing animation data from scheme.nxmi. After a bit of unsuccessful tinkering with various bypassing methods, I've opted to simply add the missing data to the scheme.nxmi file at runtime. This is relatively low impact, and in fact helps any sprite set designers because they won't then have to manually add the data themselves should they wish for their style to support the Sleeper sprite.
This seems to be the best solution overall. It's highly unlikely that any other sprites will ever be added to CE, so the special handling in this case is acceptable. And, it only applies to users who opt to run CE from their original NeoLemmix directory. If doing things the other way around, the Sleeper sprite will be there anyway.
Implemented in commits 2651404 and 7c9de20.