Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - Simon

Pages: [1] 2 3 ... 279
Lix Levels / Re: Newbie feedback about early Lix singleplayer
« on: June 17, 2024, 08:25:30 PM »
Thanks to both of you for watching that part of my stream and giving your feedback. We now give 25 builders, 0 platformers, 25 bashers. We need 3 to pass. That current Pipe Dream on Github, I'll merge it into Lix 0.10.24.

We have tutorial puzzles, but I don't advertize those.

geoo is envisioning the mixed approach where a game teaches itself without calling it a tutorial outright, and without making it feel like a dedicated tutorial. Lovely has several facets of that, but isn't designed from the ground up as that. I can't tell how far off it is, I'll continue to let you know about the rough edges as I find them.

Other than sanding the rough edges, I'm open to redesigns, radical or minor. I merely won't spearhead such a modern tutorial rank (self-teaching puzzles, implicit tutorial) myself this year.

-- Simon

Lix Levels / Re: Simon streamed Lix puzzles, Sun, 2024-06-16
« on: June 16, 2024, 09:10:35 PM »
Stream is over! Recording will remain for 14 days at:

Played geoo's Crafty rank.

Full Circle: Not solved yet. Progress on all fronts, but no unifying theory of the universe.

Day Care Center: Funky idea, with some difficult-to-find timings. Solution feels intended, and I can't see how to improve the fickle execution. I like it, but one has to be in the mood for pixel pushing and for haggling over timings on the level of individual physics updates.

Undercut: Lovely! Feels completely intended. Armani found one of the core ingredients in chat.

Cellar Dwellers: Cute. I believe I solved this before, when it was in the Wrappy rank, and you re-sorted it.

Construction Site Conuntrum: Looked easier than it was. I had a precise solution that feels like a backroute, but it wasn't annoying to find.

Lix Levels / Re: Newbie feedback about early Lix singleplayer
« on: June 15, 2024, 06:14:04 PM »
Thanks for taking this seriously and choosing to fix it from the ground up. I'll look at your level in detail tonight.

Yes, I'll mass-change the author field in your levels to "Proxima" without quotes.

Also, I'll write some code in Lix itself such that, whenever Lix loads existing checkmarks from user/trophies.sdl, the checkmarks of your levels change their author to "Proxima", too. Reason: Lix saves the three following fields per checkmark, and later, to match a checkmark to a level, requires that all three of the following are identical:
  • The basename of the level file, i.e., the part of the level filename that comes after the directories and slashes,
  • the level title,
  • the level author.
When I auto-adapt the checkmarks according to this author change, we can rename the author in your levels and people still keep the checkmarks.

The directory isn't in the above list. You can always move levels between directories and the checkmarks will come with them.

-- Simon

Lemmings Main / Re: How to play Lemmings (1991) on a modern PC
« on: June 15, 2024, 02:35:23 PM »

I agree that it's good to keep everything on one page. If it's too long, we should shorten the entries instead of splitting the post.

How-to-install shouldn't be hidden behind spoiler tags. Instead, for every engine, how-to-install should become a numbered list. Reason: Picking the easiest-to-install is an excellent heuristic for the newbie. We're onboarding new people; getting the L1 levels to run ASAP is the goal.

The other nice things are secondary to ease of installation. All of the following are interesting and should appear unhidden, but should be succinct: Convenience tools, how close the physics are to DOS/Amiga L1, how popular the engine is, what custom culture it supports.

-- Simon

Thanks for the judgements!

I agree, there were no problems on the other maps. Only the double backroute to the two Predicaments was fidgety: The double backroute had to squeeze two pixels of height from the bottom half.

Next stream is tomorrow, Sunday, 16th.

I'm 50:50 on what I want to play tomorrow. Option 1: More of geoo's Crafty. Option 2: The NeoLemmix levels for the current Contest #30. (I already know geoo's Lix entries for Contest #30, I was the pre-release tester.) Edit: I played geoo's Crafty.

-- Simon

Where can we talk while we play

I've sent you am PM with all details. See you!

-- Simon

I'll play!

-- Simon

Lix Levels / Newbie feedback about early Lix singleplayer
« on: June 12, 2024, 12:50:54 PM »
In May, after work, I had a colleague try Lix on his notebook computer. I believe we had a mouse, not only the touchpad. He had played Lemmings ages ago.

Any Way You Want: No problem. A few died, but that's expected. You must save 1/10, he saved several.

Pipe Dream:
  • Unclear what to do. The exit isn't visible at the start of play.
  • Once, he bashed out of the left of the map and had to cancel or restart.
  • He assigned some bashers in the open, without a nearby wall. (This is OK, I expect this with new players.)
  • He repeatedly bashed facing away from the wall instead of facing towards the wall. I told him how to do it right, he said "yes", but his success rate didn't increase.
  • He ran out of basher! Pipe Dream gives you 20 bashers. You need at least 6 to pass. If you squander 15, you're stuck, but you don't know it yet.
For the next Lix release 0.10.24, I'll increase bashers from 20 to 50. Unsure if the other findings are a huge problem. Or, if they are: Unsure how to fix them.

In hindsight, even the L1 devs were wise and gave you 50 bashers in You Need Bashers This Time.

I'm reporting this like a usability test here, and while it produced usability findings, the session wasn't planned as a usability test. In a proper test, I should explain as little as possible. Here, I explained things along the way, which can steal attention.

-- Simon

Lemmings Main / Re: How to play Lemmings (1991) on a modern PC
« on: June 10, 2024, 05:31:20 PM »
Happy to add SuperLemmix, but WillLem, your section is too long. Can you cut it to half the size? E.g., to play L1 levels in a remake, we don't need to know about new skills. Or can you hide some parts behind spoilers? Why should a newbie pick SuperLemmix over SuperLemmini? Over NL? What do I have to install? Link directly to the download (or to the page with the download). Minimal extra steps, assume user wants to play L1 (or the remade L1 levels) and nothing else.

Thanks to both of you for the Amiga resources. Yes, if we point to DOS and SNES emulation, we should point to Amiga emulation, too.

I think all of this warrants splitting the OP into two new topics, (1) emulation and (2) remakes, and link from this OP into those two new topics. (Edit 2024-06-15: I don't think that the topic should be split anymore.) I'll get to all of these things over the next days.

-- Simon

Lix Main / Miner hovers, can cancel with blocker/batter assignment
« on: June 07, 2024, 06:15:33 PM »

I found this in the current Lix 0.10.23, but this bug must have been in the physics forever, at least since I've presented C++ Lix in 2009 to the Lemmings Forums.

Expected: When you assign blocker to a miner, the lix starts blocking.

Observed: Timed well, on the right terrain, the blocker assignment cancels the miner and makes the lix walk again.

This cancelling works with a batter assignment (instead of a blocker assignment), too.

Explanation: The floor must be shaped like a builder bridge. In the physics, the builder bricks are 2 hi-res pixels high, i.e., 2 units of distance. Naively, this is too high a drop for the miner to continue, therefore the miner has leeway in its code to continue mining along such a bridge. To trigger the bug, assign blocker while the miner is hovering over an air pixel, i.e., while the miner's foot is at Foot1 or Foot3 here:

                    Foot1|  |  |  |  |  |  |  |  |  |  |  |  |
              Foot2      |  |  |  |  |  |  |  |  |  |  |  |  |
        Foot3|  |  |  |  |  |  |  |  |  |  |  |  |
  Foot4      |  |  |  |  |  |  |  |  |  |  |  |  |
 |  |  |  |  |  |  |  |  |  |  |  |  |
 |  |  |  |  |  |  |  |  |  |  |  |  |

Bug! Bug! Bug!

-- Simon

Right, I wouldn't worry much about running out of allowed filename length. As you correctly describe, the chance of having even 2 or 3 extra loop iterations is tiny.

It's a good PR now that fixes the original data loss in the vast majority of cases.

-- Simon

NewName := ChangeFileExt(NewName, '') + '_' + UniqueTag + '.nxrp';

Assuming we loop 4 times out of the maximum 1,000, this generates names such as:

Do you want this? Appending more and more random chars indeed has a higher chance of finding a free filename.

Probably, we'll stop before we run into Windows's limit of 255 wchars per filename without path. In particular, to run into OP's data loss and thereby into the loop here, you have to give a short prefix that didn't depend on replay names/level names/...

it shouldn't overwrite, because it will see the existing file and generate a new name, will it not?

Not if the OS takes processor time away from NL exactly after you've tested that X doesn't exist, exactly before you save to X.

I agree, skip it for this PR. The old code didn't even test for existence at all, you haven't made anything worse.

-- Simon


The workaround is: Move the topic, then move it back. The move menu offers to change every title.

Better is: Fix title only in OP and in last post. People will usually reply to one of the two, and generate correct titles. This produces correct titles for the big list of recent activity on the homepage.

It's a misfeature anyway that the forum supports individual post titles when the discussion is linear and not a tree.

-- Simon

Swap lines 309 and 310, and you'll be able to remove the duplicated line 306.

Theoretically, your loop can be infinite. In practice, I doubt anybody will run into problems because nobody has found the original (serious) data loss behavior in years. It's up to you how much work you want to invest here.

It's good that the code (both yours and the original) first saves the replay, only then removes the replay. Reason: If the computer hangs in between the two, you haven't lost data.

It's surprisingly hard to make this 100 % robust. Here are some concerns and you probably don't want to fix them all these days. They're rabbit holes (compared to your fix candidate) and running into these bugs will be rare.
  • Avoid the infinite loop.
  • You can't expect to find a free filename for certain, regardless of how you generate the filenames. Keep the source replay file (instead of deleting it) after you couldn't find a free filename for renaming.
  • Saving the replay can fail: Disk is full, you're renaming to a write-only media, you're renaming to a removed physical drive, you're renaming to a network drive and the connection dies, ... Keep the source replay file if the saving fails.
  • You have a time-to-check-to-time-of-use bug: You test in NL that filename X is free, then another
    program creates file X, then NL saves the file to X, overwriting the other program's file. Or NL fails to save because the file is still open in the other program.
The time-to-check-to-time-of-use bug is unlikely (NL is not a security attack target) and I'm noting this mainly for completeness. I don't even know a good way to fix time-to-check-to-time-of-use in Delphi. In C, there is fopen("name.txt", "wx"), where the "wx" means that you want the file-opening call to succeed iff the file is nonexistant and writeable. The idea is that you both test and open in a single library call that relies on the operating system to ensure that nobody can do anything to the file in between.

-- Simon

Lix Levels / Re: Scripts for level maintainers
« on: June 05, 2024, 08:55:52 PM »
Minimize PNG file size

Lix likes PNG images best. And Git repositories prefer small binary files over large binary files! Let's minimize our file sizes whenever we edit sprites or tiles. My workflow to minimize PNG files is:
  • In Gimp, select File -> Export ... to export as PNG.
  • In the PNG-specific dialog:
    • Uncheck all boxes. In particular, uncheck Exif metadata.
    • Choose compression level 9, the maximum.
    • Choose the automatic pixel format.
  • Exit Gimp.
  • optipng -o 7 myfile.png
  • exiftool -all= myfile.png
Somehow, it's both good to first re-save with Gimp and to then run optipng -o 7 on the same file. I conjecture that optipng compresses better than Gimp, but doesn't change some of the settings that Gimp offered you. If this conjecture is right, you can choose a lower compression level in Gimp to save time because you'll recompress anyway optipng -o 7.

In the above workflow, exiftool -all= should report that it didn't change your file because you had no strippable optional metadata. But if some optional metadata remained, it's now discarded, as you want. The optional metadata can easily be 4 KB, which is a lot when you version many images.

Small PNGs, happy Simon!

Further reading: Limitations of ExifTool when we ask it to discard all optional metadata.

-- Simon

Pages: [1] 2 3 ... 279