Author Topic: Feature requests for next version of SuperLemmini  (Read 124 times)

0 Members and 1 Guest are viewing this topic.

Offline WillLem

  • Posts: 97
  • Professor of Lemmingology
    • View Profile
Feature requests for next version of SuperLemmini
« on: October 30, 2019, 06:51:19 pm »
Hi Tsyu,

I know I've already mentioned these in reply to a PM, but I thought it best to also post a topic on the main board as per forum etiquette.

Here's what I think would make SuperLemmini brill:

Backwards framestepping. A great feature which saves a lot of time replaying a level from the start each time you make a mistake.

User hotkeys/mouse button configuration. This would be a very welcome feature if possible.

A levelpack creator, right there in the levels menu. Since importing external levels is already possible, it would be even better if there were a way of compiling levels into a pack, complete with difficulty rankings, music selection, and other stuff generally associated with making a simple level pack. The current method for compiling levelpacks is way too difficult and frustrating if you don't know what you're doing (which I really don't!). The PackToolKit for NeoLemmix is kind of what I'm imagining, but integrated into the main GUI (I've attached a picture of what I mean - the creator itself could be a separate mini-application, but launched from within the level selector).

Compatibility with the latest NeoLemmix Editor, or - a SuperLemmini level editor capable of saving levels as .ini, .lvl and .nxlv. This might be a whole other project... I'm currently taking beginner lessons in Java so I might be able to get on this myself before too long. Maybe. :P

A "SuperLemmini" title graphic on the main menu screen, to distinguish it from the original Lemmini. I'd be more than happy to design one for you if you like.

That's it for now! Great to see you on the forum!

Best regards,

-WillLem 8-)

Offline Tsyu

  • Moderator
  • Posts: 316
    • View Profile
Re: Feature requests for next version of SuperLemmini
« Reply #1 on: November 06, 2019, 09:35:12 am »
Backwards framestepping. A great feature which saves a lot of time replaying a level from the start each time you make a mistake.
This is far from a trivial task, since it requires remembering the state of every frame, or at least the difference between each frame, which SuperLemmini does not do. Still, I will look into adding it, but don't expect it to be in the next version.

User hotkeys/mouse button configuration. This would be a very welcome feature if possible.
Yeah, I'll try to add this to the next version.

A levelpack creator, right there in the levels menu. Since importing external levels is already possible, it would be even better if there were a way of compiling levels into a pack, complete with difficulty rankings, music selection, and other stuff generally associated with making a simple level pack. The current method for compiling levelpacks is way too difficult and frustrating if you don't know what you're doing (which I really don't!). The PackToolKit for NeoLemmix is kind of what I'm imagining, but integrated into the main GUI (I've attached a picture of what I mean - the creator itself could be a separate mini-application, but launched from within the level selector).
I should be able add this.

Compatibility with the latest NeoLemmix Editor, or - a SuperLemmini level editor capable of saving levels as .ini, .lvl and .nxlv. This might be a whole other project... I'm currently taking beginner lessons in Java so I might be able to get on this myself before too long. Maybe. :P
NXLV level support is planned, but isn't guaranteed to be in the next version. I'm not quite up to speed on the format right now, but I'm pretty sure it references objects and tiles by name rather than number, so I would need to think about how to work with that.

A "SuperLemmini" title graphic on the main menu screen, to distinguish it from the original Lemmini. I'd be more than happy to design one for you if you like.
If you can make a new logo, I'd love to see it!

Offline WillLem

  • Posts: 97
  • Professor of Lemmingology
    • View Profile
Re: Feature requests for next version of SuperLemmini
« Reply #2 on: November 06, 2019, 02:13:23 pm »
Backwards framestepping. A great feature which saves a lot of time replaying a level from the start each time you make a mistake.
This is far from a trivial task, since it requires remembering the state of every frame, or at least the difference between each frame, which SuperLemmini does not do. Still, I will look into adding it, but don't expect it to be in the next version.

Fair enough, I'm very much a beginner (currently learning Java and Python) so I'd have no idea how to do this myself at the moment. How about, in the meantime, adding a restart button to the panel? Like in NeoLemmix, it could restart the level instantly into replay mode and save time having to nuke-then-view-replay when a mistake is made. I've attached graphics I made for this, including for the xmas mod, if it would be easy enough to implement (see attached PNGs).

User hotkeys/mouse button configuration. This would be a very welcome feature if possible.
Yeah, I'll try to add this to the next version.

A levelpack creator, right there in the levels menu. Since importing external levels is already possible, it would be even better if there were a way of compiling levels into a pack, complete with difficulty rankings, music selection, and other stuff generally associated with making a simple level pack. The current method for compiling levelpacks is way too difficult and frustrating if you don't know what you're doing (which I really don't!). The PackToolKit for NeoLemmix is kind of what I'm imagining, but integrated into the main GUI (I've attached a picture of what I mean - the creator itself could be a separate mini-application, but launched from within the level selector).
I should be able add this.

Great stuff! Looking forward to seeing these, particularly the levelpack creator. :thumbsup:

Compatibility with the latest NeoLemmix Editor, or - a SuperLemmini level editor capable of saving levels as .ini, .lvl and .nxlv. This might be a whole other project... I'm currently taking beginner lessons in Java so I might be able to get on this myself before too long. Maybe. :P
NXLV level support is planned, but isn't guaranteed to be in the next version. I'm not quite up to speed on the format right now, but I'm pretty sure it references objects and tiles by name rather than number, so I would need to think about how to work with that.

This would be great as it would be possible to effectively make NeoLemmix and SuperLemmini levels at the same time, plus the whole inventory of nxlv packs currently available in NeoLemmix would be available to play in SuperLemmini (well, those that use the standard graphics sets or that provide hi-res graphics, at least). Plus, Namida is planning a hi-res update for NeoLemmix which should mean that, in theory, more hi-res content will be produced.

I'm not really sure how any of it works at a coding level tbh, although I am willing to learn so that I can understand the magic a bit better and have a better idea of what it is I'm suggesting/requesting...

A "SuperLemmini" title graphic on the main menu screen, to distinguish it from the original Lemmini. I'd be more than happy to design one for you if you like.
If you can make a new logo, I'd love to see it!

See attached prototype! ;)

Thanks for considering my feedback and requests.

All best,

-WillLem 8-)

Online namida

  • Administrator
  • Posts: 9492
    • View Profile
    • NeoLemmix Website
Re: Feature requests for next version of SuperLemmini
« Reply #3 on: November 06, 2019, 05:31:02 pm »
Quote
This is far from a trivial task, since it requires remembering the state of every frame, or at least the difference between each frame, which SuperLemmini does not do. Still, I will look into adding it, but don't expect it to be in the next version.

Lemmix implemented this via the replay system. Let's say, for example, that a user is at frame #1000, and presses "back one frame". Internally, the game restarts from the beginning of the level, and (without rendering anything until it's done) executes the replay up to frame #999 then stops.

This does result in poor performance, so NeoLemmix improves on the above by using a combination of the "remember state" and "use the replay" system. Not every frame is remembered, but rather, the state is saved from time to time, and the replay method is used to cover the gap between the most recent save-state and the target frame. In the case of NeoLemmix, it saves every 10 seconds, and over time, discards some of the older states. The state at frame #0 is always kept; as is the state at every 1min interval. States at 30sec intervals are kept for about 3 minutes, while states at 10sec intervals are kept for about 1 minute. (All times here are in-game clock time, not wall clock time - no new states would get saved while the game is paused, for example. I might also be remembering the exact intervals / cutoffs wrong, but the general idea is right.)

Lix's system is similar, but with different timings, that were designed more with the multiplayer mode in mind. The basic idea is the same, though.

Quote
NXLV level support is planned, but isn't guaranteed to be in the next version. I'm not quite up to speed on the format right now, but I'm pretty sure it references objects and tiles by name rather than number, so I would need to think about how to work with that.

The best way would be to change SuperLemmini to also reference pieces by name. Such a system is a bit tricky to get backwards-compatibility with (though NeoLemmix has a way - will explain later in this post), but going forwards it makes things much tidier when pieces need to be added to or removed from a style.

However, if you're not willing to do that; NeoLemmix still supports older formats (for now - this is intended to be dropped in the near-ish future). These old formats, of course, reference pieces by index numbers still. In the "data/translation" folder of NeoLemmix, there's files that are usually called "translation tables", with an NXTT extension. These tell NeoLemmix how to translate the index-based scheme to the name-based one.

These tables are not designed to be used in reverse as-is (for example, modern NeoLemmix no longer has separate bodies and tops for exits, they're now one large object; so the translation table says "replace with this and move slightly" for the exit object, but "just delete this piece" for the exit top), but it could be done with slight modifications, or with some special logic on SuperLemmini's side. You're welcome to use the NXTT files, as-is or modified, if it helps.

You'll definitely want to read this: https://www.lemmingsforums.net/index.php?topic=4334.0

This explains the basics of how text-based NeoLemmix data files work. This is applicable to just about every text-based data file in NL, including both NXLVs and NXTTs. Pretty much the only exceptions are a few INI files used to save user configuration, which are just the basic "XXXX = YYYY" format you usually see in INIs.

This topic specifically explains the level format: https://www.lemmingsforums.net/index.php?topic=4336.0

There are a few tweaks to this format that are occuring with the next major update. The topic is already updated for this, and references to the old cases have been removed. Examine some existing level files or look at NL's source code (Delphi) or the editor's source code (C#) if you want to figure these out; I made an intentional choice not to keep them documented. Alternatively, you can simply tell people "NeoLemmix levels created for versions older than NL V12.7.0 need to first be run through V12.7.0's Cleanse Levels feature" (a feature that takes an existing level, and re-saves it in 100% up-to-date NL format; this can be used for just outdated NL levels, or for a few other formats including DOS, (Super)Lemmini and Lemmins).

If you're planning to make your own editor, you are more than welcome to use the NL editor's code as a starting point if it suits; it's under a CC-BY-NC licence (so is the engine's code). For the "BY" part, you'd need to credit both myself and Nepster, unless your starting point is commit 2a6218e or older (in which case only Nepster would need to be credited, as none of my code is in the editor prior to that).
« Last Edit: November 06, 2019, 05:47:43 pm by namida »

Online namida

  • Administrator
  • Posts: 9492
    • View Profile
    • NeoLemmix Website
Re: Feature requests for next version of SuperLemmini
« Reply #4 on: November 06, 2019, 05:41:03 pm »
Quote
This would be great as it would be possible to effectively make NeoLemmix and SuperLemmini levels at the same time, plus the whole inventory of nxlv packs currently available in NeoLemmix would be available to play in SuperLemmini (well, those that use the standard graphics sets or that provide hi-res graphics, at least).

To some extent, although there's still the matter of feature mismatches. Going from NL to SuperLemmini, there's a whole lot that's not supported - most new object types (though SuperLemmini does support the force left / force right fields), all of the new skills, zombies and neutrals, lemming count limits on entrances and exits, etc. The other way around isn't nearly as severe, but there's still a few things that SuperLemmini supports that NL doesn't, such as invisible / fake terrain and objects, or various choices of how exactly steel works in a level (NL used to support many of these, but support was dropped either due to them causing coding mess just for situations that are very rare anyway, or because they had little use outside of the creation of troll levels).

In general - once you step outside of features that are supported by the official games (or direct clones thereof), there are very few features that are supported in the same way by both engines - only the one-way force fields (which technically aren't new - DOS Lemmings can do them too, it's just never used in any official style), infinite time / skill counts, and resizable levels (in both directions) come to mind, though there's probably a couple more.

Even when you stick to features that are supported in both, there's no guarantee that the level will work as intended on both sides. There's the subtle physics differences, and the not-so-subtle differences to how the release rate works. RR1 in NeoLemmix would be roughly equal to RR negative 99 in SuperLemmini; while RR1 in SuperLemmini would be equal to about RR50 in NeoLemmix. The only RR that would be identical (after adjusting for resolution / framerate differences) in both is RR99.