SuperLemminiToo v1.51

Started by Charles, October 08, 2021, 05:32:45 AM

Previous topic - Next topic

0 Members and 2 Guests are viewing this topic.

Charles

EDIT2:
I've pushed bugfix release v1.51. This fixes the infinite skills decreasing during replays.

EDIT:
I've pushed a new version v1.50. This is primarily a bugfix for loading/saving level stats when levels are skipped (or when the group name has a comma).

I also tweaked the title screen to add a yellow scrolling marquee ticker-tape, reminiscent of the original Amiga title screen.
END EDIT

I've been working on my own fork of SuperLemmini to address some of the changes I personally wanted to see. Mostly the return of Timed Bombers, and some graphics enhancements.

I'm not intending this to replace SuperLemmini by any means. I understand Tysu is still working on SuperLemmini as he is able, and I eagerly await his next release. This was more to tide me over in the meantime, and I know a few select other users felt the same as me about Timed Bombers, so I wanted to share.

I cannot thank Tysu enough for all his thousands of hours of work on SuperLemmini -- all I've done by comparison is hack up a couple lines of code.

I've posted my code in github: https://github.com/Blazingstix/SuperLemminiToo for anybody else who wants, but I've more or less scratched that itch so I've no immediate desire to add/remove any more features.

I'll just copy the rest of my README here:

SuperLemminiToo v1.51 2022-Dec-14

This is SuperLemminiToo: a fork of SuperLemmini, which is itself a fork of Lemmini.
I made this because there were some minor features I wanted to see in SuperLemmini, which didn't appear to be in the original author's immediate timeline.
I'm not really taking requests, but I'm releasing because I figure some other users may want the same features I did.

==USAGE===========

SuperLemminiToo uses the same ini file as SuperLemmini. You can extract this program to its own folder and it will read in all your existing settings from SuperLemmini.

Java 15 or higher is recommended, but the game is compiled against Java 1.8.
Install Instructions: https://docs.oracle.com/en/java/javase/17/install/overview-jdk-installation.html

==FEATURES========

Timed Bombers!

The main feature I wanted to restore was Timed Bombers. Not everybody shares this desire (which is why the feature is selectable, under Options), but I feel strongly that in *ORIGINAL* lemmings levels, it is 100% intentional that you need to use a blocker then a bomber if you want to have precise placement of your bombers. Look no further than "Fun 6: A task for blockers and bombers" for proof.
I felt so strongly about it, in fact, that I created this fork.  Everything else changed was just extras once I started looking under the hood.

Visual SFX!

The oft-forgotten feature added *only* in the "Lemmings for Windows 95" release (AFAIK). Graphics cues are displayed on screen to match the sound effects being played. Most important for when builders have hit their last 3 bricks, but also neat all-around.  I even added some graphics that weren't present in Lemmings95. I may have gone overboard.

Enhanced Status Bar!

Removed clunky full text saying In, Out, Time and replaced with with slick icons. This feature was 1st seen in the SNES and followed about a year later by the SEGA Genesis. Interesting fact, both versions used different icons!  I modeled these after the SNES versions.
And because of the space gained by using icons, I added a 4th icon for number of lemmings needed.
Also, as an extra visual indicator, I made the "In" number Red until you've saved enough Lemmings to pass the level.

Enhanced Icon Bar!

The icon bar has been resized to give a less cramped look. Also the skill counters have been lowered ot be part of the icon buttons now, instead of hovering above them in the black space. The order of icons has changed too, to match the Lemmings for Windows 95 release (which was the last official release for PC, I believe). Now it's Minus, Plus, all 8 skills, then Pause, Fast-Forward, Nuke, Restart, ScrollLock. This pairs like-minded icons together (game speed icons: pause/fast-forward; level restart icons: nuke/restart; and then the scroll lock icon nearest to the map (also farthest away from the others, because it's only applicable for vertical levels... which are specialty levels, and don't even exist in any of the original official Lemmings levels.

Animated Icons!

The icons on the icon bar are now animated!  These are straight from the Lemmings for Windows 95 release (with minimal changes to more easily blend in with different themes)!  Never before seen on modern releases (probably... I dunno)!!  If you have a mod enabled (such as Xmas theme), then the engine will check for animated icons in that mod, then static icons in that mod. Failing to find any mod-specific icons, it will then use animated standard icons, and lastly for the few icons that are not animated (i.e. plus, minus, restart, and vertical scroll lock) it will fall back to the standard static icons.

Icon Labels!

A little bonus feature to go with the new Enhanced Icon Bar. You can toggle on or off text labels to go with all the icons.

All levels unlocked. (Also a toggable option.)

In SuperLemmini this was considered a "cheat" that was enabled with a secret level code.  The "cheat" code also enabled a bunch of special debug features, which I didn't want.  I figure the game's about having fun, so why shouldn't people be able to skip a level they're having difficulty with. Who's to tell them no?
The game still keeps track of levels you've completed or not, so it's still up to you if you want to complete every level.

Minor UI/Gameplay Tweaks.

  Added "Disable Scroll Wheel" option.
  I found it annoying how my scroll wheel would accidentally change my selected skill when I was trying to middle click.

  Added "Disable Frame Stepping" option.
  Here's where I really started to get a bit nit-picky.
  When paused, if you click anywhere, the game will advance by one frame. Didn't like that feature, so I made it togglable.

  Minor feature, I added some ToolTips to the checkboxes in the Options dialog. I wasn't exactly sure what some options meant at first glance.

==THANKS==========

I want to stress that this program was truly written by Volker Oth (Lemmini) and Ryan Sakowski (SuperLemmini), over a combined total of more than twenty years. All I've done is hack a couple lines of code. None of this could be possible without the literally thousands of hours of work done by those two individuals, and their making the source code freely available. Thansk you both for letting me re-live some joy from my childhood in a new way, and for letting me share it with my kids.

Also special thanks to WillLem from the LemmingsForums.net for providing the updated title graphic, and being all around supportive of this endeavour and SuperLemmini in particular.

Special thanks as well to jkapp76 from the LemmingsForums.net for making title icons. I modified them slightly to incorporate them into Icon Labels toggle in SuperLemminiToo.

==KNOWN ISSUES====

I've read (but not tested) that Java 15 produces different png files than Java 1.8, so if you've never used SuperLemmini before and need to extract the resources from Lemmings 95 (aka WinLemm), you'll need to do that through the original SuperLemmini.  Then once that's done, you can continue with SuperLemminiToo.  Good news though, you don't need to extract the resources manually anymore -- SuperLemminiToo includes the full root.lzp right in the zip file.

I didn't test anything related to Replays and External levels, as those didn't personally interest me.

WillLem

Excellent work, Charles. Good to see this happening in the meantime.

I get the following error message when I try to run the .jar:



I'm guessing it might be to do with the Java version; I'm using Java SE 8 (the latest runtime edition):



Do you absolutely have to have JDK installed for your version to work? I find that (original) SuperLemmini doesn't behave well with JDK (as opposed to Java SE), so I'd rather not install the JDK if I can help it.

Charles

I'm not sure if it's JDK or Java SE honestly -- I don't know what the difference is between all the Java versions. But yes, I compiled against the newer Java rather than Version 8 (or 1.8... I can never tell). The older version had some problems with high res displays, that I couldn't live with.

I just installed the version at: https://docs.oracle.com/en/java/javase/17/install/overview-jdk-installation.html

My testing wasn't overly extensive -- just open up any old level, click around on a few lemmings -- so I don't know how well it behaves on edge-cases versus version 8.

Simon

#3
WillLem should need JRE for Java 15 or newer. JDK shouldn't be necessary.

Reason: You can get a more informative error when you run SuperLemminiToo on outdated Java from the command line:

$ java -jar SuperLemminiToo.jar
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: lemmini/LemminiFrame has been compiled by a more recent version of the Java Runtime (class file version 59.0), this version of the Java Runtime only recognizes class file versions up to 52.0


... and class file version 59.0 is Java 15, exactly as Charles wrote in the readme in OP. It even tells us that we need JRE. It doesn't mention JDK.

On Windows, yeah, it's probably best to sell your soul to Oracle and install their JRE or JDK. Arch Linux's officially packaged OpenJDK goes only to Java 8 (class version 52.0), newer stuff needs either AUR packages or manual cobbling of binary packages. More complicated than what I was able to sort out during lunch break. >_>;;

-- Simon

jkapp76

Nice work, Charles!
I keep hoping for a better full-screen mode for super lemmini. Not that I'm requesting.

I love when people make forks...
...Jeremy Kapp

Charles

I hear ya. I'd love proper full-screen support too. But that would require replacing all the Window dialogs first: Options, Replay saving/loading, Level Select (that's a biggie), Player Manager, etc. Feels like a pretty huge undertaking. Beyond my skillset unfortunately.

Charles

Quote from: WillLem on October 08, 2021, 11:53:13 AM
Do you absolutely have to have JDK installed for your version to work? I find that (original) SuperLemmini doesn't behave well with JDK (as opposed to Java SE), so I'd rather not install the JDK if I can help it.

Try the attached. I recompiled it with Java 1.8 in mind. It seems to run fine in Java 17 for me, so I get my HiDPI. I'm happy. Does it work for you?

Ron_Stard

Hey, great work! I am one of the old style players! Welcome back, timed bombers! :thumbsup:

I will try and give feedback to this new engine as soon as possible. :D

WillLem

Quote from: Simon on October 08, 2021, 01:10:03 PM
WillLem should need JRE for Java 15 or newer

Thanks for this, and for your explanation. I can only seem to find either Java 8 JRE or Java 15 JDK... there doesn't seem to be a "JRE version 15" ???

In fairness, Java is becoming a fairly elusive thing to get hold of, Oracle's website is a pain to navigate.

Quote from: Charles on October 08, 2021, 11:03:20 PM
Try the attached. I recompiled it with Java 1.8 in mind. It seems to run fine in Java 17 for me, so I get my HiDPI. I'm happy. Does it work for you?

Perfect! This one works.

You can uncheck the timed bomber option during a level as well, effectively toggling between the two on the fly, which is excellent. Nice work!

Until Tsyu performs an official update, this will be my go-to engine for SuperLemmini levels! :thumbsup:

I've attached a version of the logo which uses the font I used in my original version of the logo for the "too" part of the graphic. If you like this, feel free to swap them over and re-release.

Charles

Quote from: WillLem on October 10, 2021, 11:35:15 PM
I've attached a version of the logo which uses the font I used in my original version of the logo for the "too" part of the graphic. If you like this, feel free to swap them over and re-release.

I would like to use that one, thank you. I liked the square-ish font you used for "Super."  I don't see the attachment though...

WillLem

Oops, my bad! :forehead:

Here it is :lemcat:

Charles

Updated to v1.10.

This is a big one. If I keep going, this is the start of me really drifting from Tsyu's SuperLemmini.

There are two big changes in this one:

  • Visual SFX
  • root.lzp included in release

So the newest addition that I'm really proud of is Visual SFX. Anybody remember these from Lemmings 95? (I think that's the only time they've made an appearance).  I really loved that feature way back when (1995, I guess?), and was disappointed it wasn't originally a part of Lemmini.  If you've never seen it, basically every time a sound effect is played, a cutesy graphic with the sfx in words appears for a second onscreen. "Let's Go" at the start, "Yippie" at end. Splat, Tink, etc.  Before you dismiss it out of hand, it did have a practical purpose too, namely a visual indicator for when the builder's getting to the end of his staircase.  I might have gone a bit overboard -- I added graphics for *all* the sfx, when Lemmings95 only had a half-dozen. Anyway, I wanted it, even if I'm the only one, so I added it.

And because of the new graphics needed for the VSFX, it just made sense to start including root.lzp right in the release files. I didn't want to have to mess around with updating the Extract code to grab the VSFX I needed, then patch out the manual changes I added to them.  Then this freed me up to tweaking some of the other graphics, so I changed up the plus/minus, scroll-lock, and restart icons to fit in better visually (IMHO). WillLem, I used your scroll-lock replacement as a base (with a few adjustments myself), so thank you for that. And jkapp76 I loved your Icon Sets -- I'd love to find a way to incorporate your icons with the titles on top. Thank you for those.

Those are the 2 big changes. WillLem, you'll be happy to know I'm compiling against Java 1.8, so you should have no problem running it, although I'm still doing all my testing against Java 15+.

Full changelog is as follows:
SuperLemminiToo v1.10 2021-Oct-17
- big changes in this version. If things
  continue, here is where it starts to
  really diverge from SuperLemmini.
- added VisualSFX (as seen in Lemmings95)
- added root.lzp to the main distributable
  - as a consequence, root.lzp must now be located
    in the same folder as your SuperLemminiToo.jar
- changed some skill icons
  (notably the increase/decrease, scroll-lock, restart)
  (thanks WillLem and jkapp76 for the ideas,
   although I did modify your originals)
- reorganized the levels included in root.lzp
  - combined all xmas levels into 1 levelpack
  - combined COVOX and Companion into 1 levelpack
  - changed exit SFX to "Yippie"
    ala Lemmings95 and Lemmings 2
    (thanks ericderkovits for the idea)
- added CTRL-ALT-SHIFT-D debug mode shortcut
  (while in a level)
- downgraded to Java 1.8 baseline.
  Java 15+ is still recommended.

WillLem

Thanks for the update, Charles :thumbsup:

Unfortunately, I get the following error message when I try to run it in Java 8 (I updated this to the latest 1.8 build, to no avail):



I have also tried installing JDK 17. The good news is that the previous update of SuperLemmini Too works (as does SuperLemmini v0.104a), so I will keep running this version from now on. However, SuperLemmini Too version 1.10 now generates the following error:



Not sure what's up ???

Simon

#13
Check if root.lzp exists in your data tree. Ensure that you have full rights in that directory.

Reason: SLT source at the given module and line number. Looks like the exception isn't the LemmException, but it's already flying out of the formatting, which is a (separate) bug that obscures the better error message that you should have gotten.

Reason for obscured error
The code dumps the pathname, which perhaps contains '%', directly as formatstring argument into String.format. If this were C, we would have lovely security bug, but even in languages that typecheck the remaining arguments, we shouldn't put the pathname in the formatstring argument. You can remove the call to String.format since you already generate the finished string with +.

It makes sense that this kind of bug slept in the code for decades. People in the early 2000s wouldn't put loose games in %somedir%; they would make their own directories for games anywhere outside the userdir, and run with admin rights to have access rights everywhere. Thus they never ran into the bug where '%' landed in the formatstring.

-- Simon

WillLem

Quote from: Simon on October 17, 2021, 04:36:42 PM
Check if root.lzp exists in your data tree. Ensure that you have full rights in that directory.

I do have root.lzp, it's in both the SuperLemmini directory (in a folder titled "Resources") and in the SuperLemmini Too directory (in the "data" folder, as supplied by Charles).

What exactly is meant by "full rights"? When I go to Properties>Security, there are green ticks for all Permissions. Is this correct?