NeoLemmix (Player: V1.26n-C | Editor: V1.26n-B)

Started by namida, January 15, 2014, 09:26:16 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

ccexplore

The other advantage to this is that the portion of the LVL file used for steel areas could then be repurposed for something else, perhaps extra objects.

Perhaps, although you can always just extend the LVL format to more than 2048 bytes to help accommodate extra stuff.

==================================

Overall I think it's definitely a nice idea, though I think you might still want to keep the steel area section, to be used for any steel areas that cannot be derived purely from the terrain.

For handling of overlapping terrain, I'll propose the following:
  - if the steel terrain is used with eraser flag set, then it is clearly being used for erase purposes rather than placing actual terrain pixels into the level, and therefore should not be applied as steel area in the level
  - later non-steel terrain that overlaps with the steel terrain does not affect steel status (the idea being that if you want to for example overlay some moss onto a steel block for decoration purposes, it shouldn't undo the steelness of the overlaid pixels as a result).  The one exception being if the later terrain has eraser flag set, in which case in addition to erasing pixels of steel terrain it overlaps with, it also erases the steel status associated with those pixels of steel terrain that got erased (basically the idea is to support creating steel areas of irregular shapes that matches directly the terrain pixels you see).

In other words, the steel piece is always assume whole even if parts of it are visually obscured, the exception being if the pixels were explicitly erased rather than merely obscured via overlap.

This should cover most cases, and then having the reserved steel area section can be used to handle any exception cases not handled by the automatic steel area algorithm.

Nepster

May I suggest to add another option to the ongoing poll: Extend the Readme that comes with CustLemmixNeo.
It would help (at least me) to have the following informations present there:
- version number
- explanations of the newly added features (and perhaps a summary of the changes in the game mechanics as you did in the very first post in this thread)
- explanations, how to use single .lvl-files, new terrain styles, ...
Unfortunately I couldn't yet get CustLemmixNeo to load your level. It always wants to load some levelpak.dat (which works fine btw), but how can I play single levels? I am sure, you explained this somewhere, but I am too dumb to find it right now.
But (as far as I can tell right now): Great work http://www.lemmingsforums.com/Smileys/lemmings/thumbsup.gif" alt=":thumbsup:" title="Thumbs Up" class="smiley" />!

namida

Turn LookForLVLFiles on, as with any Lemmix player. CustLemmix should probably have it enabled by default to be honest, but I haven't got around to doing that. As for custom graphic sets, just put them in the same folder and it'll load them automatically (it will automatically load external LEVELPAK.DAT, GROUNDxO.DAT, VGAGRx.DAT and VGASPECx.DAT with priority over its internal ones). This is true for all versions of CustLemmix, by the way, not just the Neo one.

However, I think you're right about the readme; unlike any of the things in the poll, that's a very simple and quick job, so I'll do that at some point today.

You can find out the version by (not that this is very convenient, so yes, I'll add it to the readme) just watching the scroller at the bottom of the main menu screen. The 4th or 5th thing that comes up will tell you the version number. The testing versions I released during development used a date/time based version number with four sequential letters, while versions since most of the bugs have been dealt with and it's now mostly adding new features are numbered "V1n", "V1.01n" (current latest), next will be "V1.02n", etc. The "n" is just to signify that it's a NeoLemmix version.

ccexplore: I agree with what you're saying, although personally I would've considered that overlapping terrain negates the effect (however, it would be MUCH easier to implement it as you've described, definitely). There again, if I can manage to get that implemented at all, I see little reason why I can't allow for *both* options. The difficulty is in how I should go about implementing this - as you might've noticed, Lemmix has no direct connection between the game engine and the terrain piece data (the game engine simply calls a function of the renderer that renders the entire terrain layout and returns it as one large image). Therefore, I either need to make such a connection, or implement this in another way; my current thought is adding an extra option to this render thing that renders everything other than steel blocks as erasers (although still paying attention to the No Overwrite tag) and then using the bitmap generated from such to build the steel map. (My terminology here is probably horrible, but I'm hoping you get what I'm trying to say?)
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 think NeoLemmix would work well with the Original Lemmings set as well as the two main clones: OhNo and Holiday (My intention was to vote for three options, one for each). We now know that NeoLemmix was designed to remove glitches. It would be interesting to see how many challenges we will be able to copy without glitching.

Edit: I only just discovered this thread after posting. ccxplore has made a very valid point about the lack of interest in finding glitch-free solutions. I think it would take someone who's very patient and has a lot of free time to go through each and every level to check if glitches are involved in them.
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

namida

And that still leaves some arbitrariness about what exactly constitutes a glitch. Direct drop is the most debated one - some consider it a glitch, whereas in my case, not only do I consider it acceptable (just off the top of my head, Medi 7, Danger 1, PSYCHO 6 and Genius 20 are some levels I've designed where a direct drop is required, or at least used in the intended solution; and you may notice that I usually don't bother fixing backroutes that require glitches, but Medi 30 and Genius 4 are both designed to prevent direct drops (although the former is very subtle about it)) but in NeoLemmix I've even removed the need for there to be terrain below the exit for it to work, so NeoLemmix behaves like Cheapo in this regard.

Anyway, I'm gonna put this steel thing on hold for a while (by my definition, this means "a day or two" at the most xD) to give me time to think of a good way to implement it (I'm meaning as in how to actually code it here, not "should it count this, should it count that" kind of thing or what to do about file formats). Probably not a great idea to start converting any other packs just yet since if I can implement steel like that, it'll render a lot of the work I do redundant... so I guess, well an improved readme for Neo CustLemmix of course, but aside from that, now would be an excellent time to throw me any suggestions you have for objects and/or gimmicks. And if not, I have another Lemmings-related project I'm working on which I won't reveal what it is just yet...
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)

namida

Another small change I just made... it now supports having ranks with different numbers of levels. So, when doing the Xmas 91/92 player on this, I can easily make it so there's two levels under 91 and four under 92; or I could put LPII and the bonus pack in a single player (though I would first have to add support for more than 5 difficulty ranks), etc.
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)

Nepster

Thanks for the explanations, namida! Everythig works now.
Today I spend some more time, exploring the new game mechanics (for version 1.01n). I still found one behaviour that I would consider a glitch (besides the direct drop to the exit, where our opinions differ). The test level with replay is attached.
Apart from that: I don't know yet, whether I like the new basher mechanics. It allows for a bunch of new tricks, though most are rather hard to execute. This may make backroute-proofing custom levels rather hard in some cases.

ccexplore

The difficulty is in how I should go about implementing this - as you might've noticed, Lemmix has no direct connection between the game engine and the terrain piece data (the game engine simply calls a function of the renderer that renders the entire terrain layout and returns it as one large image). Therefore, I either need to make such a connection, or implement this in another way; my current thought is adding an extra option to this render thing that renders everything other than steel blocks as erasers (although still paying attention to the No Overwrite tag) and then using the bitmap generated from such to build the steel map. (My terminology here is probably horrible, but I'm hoping you get what I'm trying to say?)

So basically it's just a matter of rendering both the terrain and steel maps either at the same time, vs basically calling the renderer two times, once for each.  I'm not really seeing how one option is particularly more difficult or better than the other. http://www.lemmingsforums.com/Smileys/lemmings/huh.gif" alt="???" title="Huh?" class="smiley" /> Then again it's been ages since I looked at Lemmix code so maybe there's some subtlety I'm not getting.

===========

Apart from that: I don't know yet, whether I like the new basher mechanics. It allows for a bunch of new tricks, though most are rather hard to execute. This may make backroute-proofing custom levels rather hard in some cases.

Do you have specific examples you are worried about?  Assuming you are talking about the basher's new ability to walk up terrain instead of through it, it seems like it would be just as difficult to exploit the original behavior as it would be to exploit the new behavior.  Mainly because in most normal cases, bashing typically causes the terrain immediately ahead to become perfectly horizontal, so there would usually be no opportunity for the lemming to either walk up (ie. new behavior) nor through (ie. old behavior) that terrain.

namida

Thanks for the explanations, namida! Everythig works now.
Today I spend some more time, exploring the new game mechanics (for version 1.01n). I still found one behaviour that I would consider a glitch (besides the direct drop to the exit, where our opinions differ). The test level with replay is attached.
Apart from that: I don't know yet, whether I like the new basher mechanics. It allows for a bunch of new tricks, though most are rather hard to execute. This may make backroute-proofing custom levels rather hard in some cases.

There's a lot of cases where lemmings transition to walker as an intermediate step. I shot down a few of these cases manually, but I think it's time to shoot down the lot by adding a check upon switching to a walker that (unless No Gravity gimmick is in effect) immediately changes it to a faller instead. I should have thought to do it this way sooner. EDIT: Done. Also did the reverse; when transitioning to a faller, a check is performed to see if there *is* terrain and immediately change it to a walker (this happens before the change is even processed visually; not in the next frame, so there's no opportunity to assign a quick skill now).


ccexplore: Well, what I was getting at is that while running the actual gameplay, there's no variable referring to the terrain pieces of the level data as such. It calls a "RenderWorld" function that creates one image of the entire level's terrain, and uses that. What I'm thinking was creating a variant (or a switch) of this function that only renders pieces marked as steel properly, and renders everything else as an eraser (or ignores it altogether if no overwrite is set). Then, a for loop and HasPixel is used on the resulting map to build the SteelMap (basically, just ObjectMap, the 4x4 trigger area grid; except it's no longer 4x4 and steel has its own one seperate from the main object one). This isn't something I've already coded, just my thought on how I might implement it.

As for basher tricks, one such example of what I'm guessing he might be referring to can be seen in the replay for PSYCHO 5 from NeoLemmix version of LPDOS? Though this trick already existed in previous versions, it's just a bit differently performed and not as effective now.


I've also made a few changes to the replay system for the next version:
- The text file now lists what rank and level it's for.
- The text file no longer contains mechanics information, but now contains info on which version of NeoLemmix was used to create it.
- Replays store information on which game, rank and level they're for. All NeoLemmix players (if they're V1.03n or above) save this information, but it can be set on a per-player basis whether or not correct info is required to load the replay. (At present, I have the check disabled in CustLemmix but enabled in everything else.)
- Replays created in V1.03n onwards will not load in older versions (replays created in earlier versions will load in V1.03n, but will not be able to verify that the level is correct, and thus can be loaded on an incorrect level).
- TODO: Add an option (which would be enabled for CustLemmix, and probably backported to the non-NeoLemmix version of CustLemmix) to make the filename the level name, rather than the level rank and position.
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)

namida

I've started work on implementing the auto-steel. This will be the last thing added before V1.03n is released, and once this is done, I should be able to pump out NeoLemmix-adapted versions of all players *very* quickly, since all I'll have to do is adjust objects and test for solvability of levels under the new conditions. (I probably won't do any upfront testing on the official games' levels, but I will test LPII and LPII Bonus.)

So far, I've successfully gotten the game to draw *only* the steel pieces. Still need to take into account other pieces overwriting/erasing it though. (This could in a roundabout way solve the issue of whether something drawn over steel cancels the area or not - if you want it to cancel it, place the steel block first then place the other piece over it; if you don't, place the other piece first then place the steel block with No Overwrite. Making it pay attention to the steel's own No Overwrite, it appears, would require some VERY heavy modifications, and I think in this case, due to both being far simpler and allowing more choice, it's easier to leave the burden on the level design.)


EDIT: Got it all working, pretty much exactly via the methods I described. There are three new level options. All of them are set in the high byte of the extended graphic set number; I chose to use this one as it's probably the least frequently used, I doubt many people will be too bothered by only being able to have 254 VGASPECs instead of 65534 of them (especially between DOS only having supported up to 10 of them and custom standard graphic sets being possible nowdays - as well as that NeoLemmix supports 24 custom colors plus the 8 fixed ones in custom graphic sets, while VGASPECs are still limited to 8 colors and I don't really plan on trying to extend this), and the DOS versions in fact ignore this byte altogether rather than treating the two bytes as a 16-bit number.

The settings are:

1 - Enable steel erasing. When this is set, the first 16 steel areas function as normal, while the last 16 negate steel instead of adding it. (They do not negate ANYTHING else, only steel; but they can negate the automatic steel as well as manually-placed steel.)
2 - Enable autosteel. Requires support in the graphic set. (It's a very simple change to add this to a graphic set.)
4 - Ignore steel data in level. Use this if you don't want the level's steel data to be read (because, perhaps, you're testing the level with autosteel), but still want to keep the data in the level file.
EDIT: 8 - When applying autosteel, ignore overlapping terrain, just make all solid parts of the steel block into steel areas. (Currently it ignores erasers too, I plam to change this.)

I just want to test this a bit further (EDIT: and make the 4th bit *not* cause ignoring erasers), and then I'll upload V1.03n CustLemmix; with V1.03n LPDOS probably not far behind. This will GREATLY simplify porting existing packs (and designing new ones); since now I only have to adjust objects.

I've found that both the "overwriting terrain cancels steel" and "overwriting terrain doesn't cancel steel" options to be useful. Just have a look at which one works better for Taxing 2, then which one works better for Mayhem 1, and you'll soon see my logic in deciding to go with giving the option after all (even if it potentially sacrifices consistency). I would also say though, while the pay-attention-to-other-terrain seems more logical; given how steel areas are laid out by default, I would say it goes against the intentions of the designers, so the paying attention to overlapping (non-erasing) terrain would probably be an option left more for custom levels than conversions of the official packs.

I've also added an option so that a player can be compiled with any of those options globally activated (except bit 1; I see no need to add that functionality for that). This'll speed up the official pack conversions even more.

For anyone making custom styles; this does indeed mean you're no longer restricted to rectangular terrain; you can make it any shape you want and the auto-steel will use the exact shape of it.

I'm mostly just happy that this means I don't have to align the steel areas manually for the official and LPII levels (except "The COVOX Level", since it uses a VGASPEC).
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)

namida

Haven't adjusted the ONML, Xmas and LPII styles to accomodate autosteel yet, so until I do that, no new version of CustLemmix or LPDOS (I'd rather have the updated styles built into CustLemmix than simply support them but the included ones don't have the info for it). So here's something I *can* give you.

http://www.mediafire.com/download/uym3m09fo3fhrlh/LemmixPlayerNeo.zip" class="bbc_link" target="_blank">http://www.mediafire.com/download/uym3m09fo3fhrlh/LemmixPlayerNeo.zip

Original Lemmings running on NeoLemmix V1.03n. Please note that it's marked as "beta" as the levels have not been adjusted in any way; it's simply the default versions of the levels with some of the steel-related options set globally (as described in the post above). The styles are, of course, adjusted so that autosteel will work. Full support for all NeoLemmix features that aren't style-dependant (such as new object types), so you can pop in a LVL file and play the level with gimmicks, for example - I mean technically, of course it even supports the style-dependant ones, it just doesn't contain any styles that make use of them.


LemSet has also been updated to support marking terrain pieces as steel.
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)

Nepster

Sorry, that I was so unprecise about basher mechanics in my previous post. Attached are now four levels (with replays, but still for V1.01n), showing some new phenomena (and clam, ccx, ... will likely find many more). I am rather unconcerned about the first two. The third may have some applications in usual levels and the fourth is the most worrisome.

namida

1st one: A bit weird, but if you notice, this also happens in the replay I gave for PSYCHO 5 in NeoLemmix. It can actually be done (although with much better timing needed, but you also gain much more height rapidly from it) under the original mechanics too; not sure about Cheapo or Lemmini.
2nd one: That's no different from how it would behave if instead of a brick being placed there perfectly timed, those pixels couldn't be destroyed due to steel / oneways. This is fine IMO.
3rd one: I have no idea what I'm supposed to be looking for here? Unless V1.02n or V1.03n has fixed it...
4th one: Hmm... I'm not sure about this one. Once again, although it appears glitchy, it's once again just intended things interacting in unusual ways... I'm not entirely sure that fixing this would be very easy either. Although maybe extending how far ahead bashers check for terrain could do it (that way the one down the bottom won't stop).
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)

namida

Anyway, here's *EVERYTHING* on V1.03n. Please keep in mind that aside from LPDOS (which still may have steel errors due to switching over to autosteel; LPDOS wasn't exactly built with it in mind - I know at the very least, Medi 1 / PSYCHO 13 has some steel areas where there shouldn't be any, due to barely-visible steel blocks being used as part of the terrain), none of these have modified levels; the only difference is that the normal steel is ignored and autosteel is applied instead.

https://www.mediafire.com/folder/pcf5ybw5vfs70/V1.03n" class="bbc_link" target="_blank">https://www.mediafire.com/folder/pcf5ybw5vfs70/V1.03n
You can get all V1.03n versions (including CustLemmix) there.

You can of course enable the cheat codes in the INI file, but if you want to do it through the level code menu, the code is NOT "cheatcodes", but rather, whatever it was in the original version of the game, or in other words:
Orig, Covox, Prima: BILLANDTED
OhNo: SLAMRACING
X91/92, H94: SNOWFLAKES
LPDOS: NIGERFAGOT
LPII: NGGYUNGLYD
LPIIB: BARRELROLL
Cust: SKIPLEVELS



V1.03n changes (Note: May be incomplete. I'm trying to keep accurate logs of this now, though I started half way between V1.02n and V1.03n so not sure if I got everything.)
Code: [Select]
* Replays now verify they are being loaded for the correct
  level. This is simply based on the game, rank and position,
  not the title or hash of the level or anything like that.
  This check is not performed when loading replays created in
  older NeoLemmix versions, or when using CustLemmix.
* V1.03n+ replays cannot be loaded in V1.02n or earlier. Replays
  created in V1.02n or earlier can be loaded in V1.03n.
* Replay text files no longer list the mechanics settings,
  but do now list the rank and level number.
* Many skills are set statically whether the lemming transitions
  to a walker or a faller. Rather than hunt down all these cases
  individually, it is now set so that when changing to either of
  these, it checks whether the other would be more appropriate,
  and automatically adjusts.
* Different ranks within a single game are no longer required to
  all have the same number of levels.
* Fake Objects are now marked by the first drawing flags byte (the
  one used for No Overwrite / Upside Down) having the 5th bit set
  (adding 0x10).
* If using a graphic set that supports it, and the level enables it
  (or the player globally enables it), steel areas can be applied
  automatically to steel pieces instead of needing to make them
  manually.

CustLemmix does *not* automatically enable autosteel or any other of the new steel-related settings; you need to adjust the setting in the individual level file. I'll update QuikEdit sometime soon to handle this. However, as long as the level is set to use autosteel, CustLemmix supports it, including on official and LPII styles, not just new custom ones.

Also: I am aware that there is no steel on Fun 1 of Covox. That's because it uses a VGASPEC file, so autosteel obviously won't detect the steel blocks in it. I'll have to do that level manually at some point.
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)

Nepster

namida, I didn't say there was anything in these replays that I consider a glitch - just some new behaviour, which I am not sure I like (but that's only my opinion). For the third replay: It's just there to show that builder-walls now need only two builders under certain circumstances.