[SUG] Swimmer skill upgrades

Started by WillLem, July 10, 2023, 10:10:50 AM

Previous topic - Next topic

0 Members and 3 Guests are viewing this topic.

WillLem

From this topic:

Quote from: Strato Incendus
Diver: Basically just a fancy Jumper, if implemented as in L2. What would be a lot more interesting, though, is if it could be assigned to a Swimmer to make him go down in a water pond, without requiring a ceiling of terrain to do so.

WillLem

Rather than adding a new "Diver" skill, which would be mostly redundant for non-water use what with Jumpers & Gliders existing, perhaps we could achieve the same thing by making Swimmers dive when assigned a Jumper?

I also think assigning Walkers to Swimmers should turn them around. As far as the Swimmer's versatility and movement is concerned, it's worth seeing what the possibilities are with what we already have.

Thoughts? Other suggestions/ideas?

Proxima

Relevant discussion from NL's introduce-the-jumper topic

QuoteSwimmer->Jumper: again, I'm thinking that the Jumper skill in water could make the Lemming perform a twist in the water which would turn them around, or maybe accelerate them forward. It could have some function, I guess is what I'm saying.

QuoteI'm ruling out both of these proposals right now. The walker has two functions: "Cancel a skill; or turn around a lemming that's already just walking". It is not going to do anything other than those to a Jumper (and the Jumper isn't "just walking", so it won't turn him around either - it'll either cancel the jump, or not be an accepted assignment). Likewise, there's no reason whatsoever to expect such a case from a Swimmer->Jumper combo; it comes down to either "assigning a Jumper to a Swimmer makes him jump as normal", or else "you can't assign a Jumper to a Swimmer".

Yes, I know SLX is a separate game and doesn't have to stand by decisions made in NL. But the principle is the same: "one skill, one function" is the ideal, and deviations from it (such as the walker being either a turner or a canceller) need to have a really good reason to justify their existence. This is especially true as SLX has more skills than NL and you are considering adding even more; weird and fiddly exceptions add even more to the mental load you are imposing on players.

Strato Incendus

Intuitively, my first expectation when assigning a Jumper or Shimmier to a Swimmer would be for it to jump out of the water.
Back when we discussed this for NeoLemmix, somebody rightly asked what the lemming would be jumping off of.
But who knows, perhaps lemmings are more like penguins in this regard. 8-)

To name but one game where jumping out of the water is possible — and from which we've already taken two tilesets for NeoLemmix:
Speedy Eggbert. ;)
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

WillLem

Quote from: Proxima on July 10, 2023, 12:00:32 PM
"one skill, one function" is the ideal, and deviations from it (such as the walker being either a turner or a canceller) need to have a really good reason to justify their existence

The Walker is a turner, is it not? And, it actually doesn't "cancel" skills any more than Bashing "cancels" the action of Walking - it's an action, like anything else. Splitting hairs aside, though, I'd say we've come to expect certain things from the Walker now, and enabling these things in as many states as possible seems like the more intuitive thing to do at this point.

With that said, it's more than noted that we don't want to add too much unnecessary complication to SLX. If any of the current proposals turn into actual features, it's likely we'll aim to make them as simple and intuitive as possible.

Meanwhile, I would expect a Walker to turn a Swimmer, and I'm surprised that it doesn't - maybe that's just me, but I'm not so unique that I'm the only player who'd think that.

I'd also expect the Jumper to have some interaction with the Swimmer (again, probably not alone in this). Diving seems like the most useful thing to do (but perhaps not the most intuitive), since there is currently no way to send a Swimmer downwards.

Quote from: Strato Incendus on July 10, 2023, 06:04:13 PM
To name but one game where jumping out of the water is possible — and from which we've already taken two tilesets for NeoLemmix:
Speedy Eggbert. ;)

New Super Mario Bros U's penguin suit allows Mario to "jump" out of the water as well ;P

Proxima

Quote from: WillLem on July 10, 2023, 10:52:43 PMThe Walker is a turner, is it not?

Not in general -- it turns the lemming if the lemming is currently walking, otherwise it cancels their current action.

This is not splitting hairs; it is a fundamental part of the skill's design that, unlike every other skill in the game, it does two completely different things in these different scenarios. And this is important to notice, because it's weird, and we only accept it because the skill works well enough within the context of the overall game that the weirdness is at a level we can tolerate.

Lix discussion -- Simon brought up this weirdness and considered making the walker an always-turner; this was rejected.

WillLem

Quote from: Proxima on July 10, 2023, 11:03:52 PM
This is not splitting hairs

I didn't mean you were splitting hairs, I meant it felt like I was being a bit pedantic in my response... ;P

Quote from: Proxima on July 10, 2023, 11:03:52 PM
Lix discussion -- Simon brought up this weirdness and considered making the walker an always-turner; this was rejected.

Ah, OK. This loops back to the Runner discussion, in which I wondered whether the Walker should, in fact, be a "Turner".

Strato Incendus

Quote from: WillLemI'd also expect the Jumper to have some interaction with the Swimmer (again, probably not alone in this). Diving seems like the most useful thing to do (but perhaps not the most intuitive), since there is currently no way to send a Swimmer downwards.

On the contrary; I'd say jumping out of the water is far more useful than diving. ;)

Lots of water ponds have walls that are too high for Swimmers to just walk out of them, and not all of them are straight enough for Climbers. Diving, meanwhile, is rather useless, as long as the lemming can't do anything else while under water. It can do passive things, like collecting pickups and hitting exit buttons, but it can't perform any non-lethal skills.

For diving to be really useful, it would have to become possible to dig, bash, mine, fence, or laser blast under water, to create tunnels for other Swimmers. The Laserer can at least shoot through water, but only if the lemming is standing outside of it. ^^
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

WillLem

#8
Whilst we're on the subject of upgrades to the Swimmer skill, in 2.4.2 the Freezer now explodes a further added extra pixel lower when assigned to a Swimmer. This makes it much easier and less annoying to create a multi-Freezer "nudge down" blockade, whilst also looking and feeling much more deliberate - it's amazing how much difference a single pixel can make!

With regards to Swimmer-assignability, I can only think that adding more interaction possibilities makes it a more useful, versatile, and valuable skill, rather than - what it currently is - essentially a non-assignable Walker!

Let's consider the possibilities:

Walker - currently cancels the Shimmier, so having some effect on the Swimmer feels right. They could turn, or dive (the latter is obviously much less intuitive)
Shimmier - this could simply be assignable as a way to get the lem out of water if there's shimmy-able terrain in overhead range
Jumper - I prefer dive, but can absolutely see the case for keeping it as an upwards-jump to allow lems to exit high-sided water areas without having to be assigned a Climber. I'll probably poll this one if we decide to do anything
Blocker - in theory, Swimmers could be made to "tread water" and be Blockers - it currently takes 2 vertically-oriented Freezers to "block-and-turn" other Swimmers in water. I'm riffing, here, but it is a possibility
Spearer/Grenader - I see no reason a Swimming lem couldn't launch a Spear or Grenade; their arms are already cycling, they could simply fling the projectile without even changing the animation

That's pretty much it. Maybe the Freezer does provide enough in-water options in terms of blocking/diving, so that could mitigate (if not totally eliminate) the need for Walker, Blocker and dive-Jumper interactions, whilst adding weight to the upwards-Jumper option.

I realise it's a controversial thing (like 'Steel-is-always-steel' and 'Shimmiers turn when they bump into a wall' - neither of which have been implemented due to Forum consensus being generally not-in-favour), so please note that I am prepared to take others' views into account even if they contradict my own. The "more Swimmer interactions" is one I really do feel could work, though, so we might need at least a trial period to see if we like it.

Thoughts on this?

Strato Incendus

I like the idea of being able to shimmy out of water. Especially since placing low ceilings above water ponds is a common way to prevent the player from easily building over them. :thumbsup:

Naturally, if a Swimmer can "jump" out of water to shimmy, it should be able to perform a Jumper action out of the water, too.
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

WillLem

#10
Made some progress on this today.

Jumpers, Shimmiers and Blockers can now be assigned to Swimmers. The Blocker code is identical, but checks for water and Swimmer ability have been added, along with a sprite swap.

All behave exactly as expected. Along with the updates to Zombies-in-Poison, the Swimmer is shaping up to be a much more interesting and versatile skill!

Here's a video demo showing all three interactions:


WillLem

#11
Regretfully, we won't be getting the Swimmer-Blocker after all.

I've run into far too many problems with it and have got to the point where the difficulty in implementation is outweighing the potential benefit of the feature.

In case I ever decide to revisit it in the future, the two main problems are these:

a) It doesn't seem possible to check for water at the actual rendering stage - this can only be done in LemGame (post-rendering). So, any Swimmer that's assigned a Blocker anywhere in the level (not just in water) is given the replacement "SwimBlocker" sprite. Since it's necessary to do the sprite-swap at the rendering stage, I currently can't see any way around this.

b) Pre-assigned Swimmer-Blockers transition immediately to Faller, and then Swimmer, no matter what I try. I've looked at every thread I can find that directly affects Swimmers and Blockers, and I've tried changing the order of priority for pre-assigned skills. No luck, sadly.
Note to self: LemGame's AddPreplacedLemmings and LemRendering's RenderWorld might be the key to unlocking this one - they may need to be mutually co-ordinated

It is still technically possible to assign Blockers in water, but it doesn't seem worth having this behaviour without the sprite to go with it. I even tried giving the SwimBlocker its own method independent of a regular Blocker, but since both states need to be tied to all the same various points-of-assignment (i.e. Skill Panel button, Replay event, Pre-placed lem, etc), it starts to get very wonky very quickly, and is extremely bug-prone.

So, for now, we'll have to let this idea go.

We can still use double-stacked Freezers to Block lems in water, with the added bonus that these are also Zombie-proof!




Meanwhile, we will still be getting Jumper and Shimmier assignability as of SuperLemmix 2.5 :lemcat:

I'm excited about this change because I believe it will make the Swimmer skill a bit more versatile and a bit more valuable. I look forward to seeing these interactions in people's levels!

Strato Incendus

Thanks a lot for your effort, WillLem! :thumbsup: And now that you've explained the problem with the Swimmer-Blocker sprites, I'm actually somewhat glad we're not getting that interaction: :evil:

Of course, I don't know if it merely looked a little silly — having Blockers who are also Swimmers bop up and down while as if floating in water, while they're actually standing on terrain — or if it actually led to game-mechanical problems, too.
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

Check if LemAction = baSwimming, rather than checking LemIsSwimmer. The former variable is what action the lemming is performing; the latter, whether it has the Swimmer permanent skill.
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)

WillLem

Quote from: namida on July 21, 2023, 10:36:46 PM
Check if LemAction = baSwimming, rather than checking LemIsSwimmer. The former variable is what action the lemming is performing; the latter, whether it has the Swimmer permanent skill.

Due to the way I was implementing the sprite-swap (which could probably be done a different way), the action check needs to be for baBlocking.

So, it's necessary to check for LemAction = baBlocking and HasTriggerAt(...trWater) - the latter of which isn't possible from LemRendering, from what I can see.