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.

Topics - Simon

Pages: [1] 2 3 ... 17
Test Release 3 - 20/01/2022, Linux release (probably same for Windows)

The installation of L2Player tells us to extract it into the same directory where our L2 sits. This seems only necessary for the first successful run of L2Player because L2Player now extracts the L2 resources into its own tree that L2 cannot see.

The problem is that both L2Player and L2 contain several files in their root directories, and it's hard to separate the two programs later. E.g., if L2Player gets new files or drops files from its release, it's hard to wipe L2Player and cleanly reinstall. For now, I've duplicated the L2 files into L2Player's directory because I don't trust L2Player yet, it's a new program for me. :-)

I'd like a way to point L2Player to an L2 installation elsewhere for resource extraction. I expect L2Player to only read from that L2 path then, not modify any files in it. It's okay to continue to extract from the working directory if I don't explicitly point L2Player to an L2 installation.

The first idea that comes to mind is a command-line option, e.g.:
$ L2Player --extract-from=/path/to/l2/
or, if you need it more often than only during first run:

But anything is fine for now, e.g., you can ask me at runtime, or you let me edit a line in a config file. Or even declare it low priority. It's not so hard to duplicate L2 into L2Player.

If L2Player has already extracted the resources, I expect to run it later without pointing it to L2 again. In particular, if you don't give me a way to point L2Player elsewhere, I'd like to know how soon I can remove the duplicated L2 files in L2Player's root dir.

-- Simon

Test Release 3 - 20/01/2022, Linux version
  • Download and extract the Linux release to new directory.
  • $ chmod +x L2Player
  • Copy an entire L2 directory over the same directory, so that L2Player and L2.EXE now sit in the same directory.
  • Run L2Player. It extracts many files, then crashes with log below.
  • Look at ./data/music/: This directory contains only one file, Readme.txt.
Code: [Select]
PCMA: Load ./data/cache/sound/sound_77.pcma
PCMA: Load ./data/cache/sound/sound_78.pcma
PCMA: Load ./data/cache/sound/sound_79.pcma
Cached 80 sound(s)
SpriteSheet: Calculated 102 font widths for ./data/cache/font_0.spt
SpriteSheet: Calculated 59 font widths for ./data/cache/panel_2.spt
SpriteSheet: Calculated 102 font widths for ./data/cache/font_0.spt
SpriteSheet: Calculated 102 font widths for ./data/cache/font_0.spt
Starting OpenAL... 1.1 ALSOFT 1.23.0, OpenAL Community, OpenAL Soft
AudioStream: Unable to find file ./data/music/title.mod
PlayStream: Error - Object reference not set to an instance of an object.
Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.
   at SharpMik.Player.ModDriver.MikMod_Exit_internal() in C:\Dev\Retro\Lemmings2\SharpMik\SharpMikCore\Player\ModDriver.cs:line 535
   at SharpMik.Player.ModDriver.MikMod_Exit() in C:\Dev\Retro\Lemmings2\SharpMik\SharpMikCore\Player\ModDriver.cs:line 549
   at L2Player.AudioStreamMOD.CloseStream() in C:\Dev\Retro\Lemmings2\L2Player\L2Player\Audio\AudioStreamMOD.cs:line 73
   at L2Player.AudioPlaybackEngine.PlayStream(String fileName) in C:\Dev\Retro\Lemmings2\L2Player\L2Player\Audio\AudioPlaybackEngine.cs:line 118
   at L2Player.Game..ctor() in C:\Dev\Retro\Lemmings2\L2Player\L2Player\Game.cs:line 84
   at L2Player.Program.Main(String[] args) in C:\Dev\Retro\Lemmings2\L2Player\L2Player\Program.cs:line 91
Aborted (core dumped)

Expected instead: If I have no music, I can still play without music.

./data/music/Readme.txt says: "If you don't like the midi versions of the music, you can place .mod or .it (Amiga Tracker) versions here [...]" This sounds as if you want to ship midi music with your release. Do you want to ship midis?

-- Simon

Test Release 3 - 20/01/2022

The Linux release contains OpenAL32.dll and wrap_oal.dll. The Linux executable is a native 64-bit ELF, and it runs as expected even when I delete both DLLs:

Code: [Select]
SpriteSheet: Calculated 102 font widths for ./data/cache/font_0.spt
Starting OpenAL... 1.1 ALSOFT 1.23.0, OpenAL Community, OpenAL Soft

Thus, you can omit OpenAL32.dll and wrap_oal.dll from the Linux release. You already instruct to install OpenAL natively.

-- Simon

NeoLemmix Main / Environment to Build NL
« on: May 01, 2023, 05:13:49 PM »

git clone

The obvious entry point then is Readme.txt, which tells us that we need Delphi XE6, but namida wrote in 2021 that we need "10.3". I assume this is still accurate and it means Delphi 10.3 Rio. This is available as Delphi Community Edition, apparently under some proprietary gratis license, and they want me to make an account, and invent a fake address and fake phone number.

namida, do you recommend this community edition to build NL? Or are there more up-to-date build instructions that I haven't found yet?

Is there a way to compile NL with commonly available tools where we don't have to create accounts?

-- Simon

Lix Multiplayer Dates / Lix Campfire, Sunday, April 30th, 17:00 UTC
« on: April 26, 2023, 12:41:37 AM »

Let's meet in Mumble for loose discussion this Sunday, April 30th, starting 17:00 UTC. Flopsy has time to join this Sunday. Who else is up?

Haven't joined Mumble voicechat before for multiplayer? Ask me for Mumble server details. I'll PM you.

Possible topics:
  • What annoys you in Lix?
  • Singleplayer panel UI: What buttons to show? What buttons to hide in a secondary menu, or possibly a second bar?
  • The 2023 roadmap.
  • Level reorderings in lemforum. It's been a while and I'll have to piece together suggestions from last year's threads. Do you already have concrete ideas?
  • Anything you like. Please bring your own topics!
-- Simon

Lix Main / De-Cluttering the Panel: Fewer Non-Skill Buttons
« on: April 16, 2023, 06:46:00 PM »
Split from: Replay Insert Mode for Lix (like NeoLemmix's "blue R")

Look again at this panel screenshot above, where I removed the zoom button.

I'd like to also cut:
  • the restart button (circular arrow) and
  • the savestating buttons (flag, it splits into two buttons when a savestate exists).
I'll replace these with a button that opens a menu. The menu should implicitly halt play while it's open. It can then offer:
  • restart with replay,
  • restart without replay,
  • savestate, load savestate, possibly with multiple slots,
  • quit to ... end-of-level screen? Singleplayer browser?
The hotkeys of the cut buttons (restart, savestate) should certainly function within the menu, but, in particular, should also function outside the menu, during normal gameplay.

I don't want people to hit Esc three times to quit. It's already dumb to hit Esc twice to quit to singleplayer browser. To achieve better-than-three: Quit can gets a separate hotkey from the menu-opening button -- but that breaks UI conventions elsewhere in Lix, e.g., the universal quit key which we map in user options. Can we do something else, I'll have to ponder it.

Please shred this idea to pieces!

-- Simon

From level Armani_Natural-born_R2V4.nxlv (Contest 27 entry, can't usefully link because I backrouted it and Icho will delete older versions of contest levels):

TITLE Natural-born
MUSIC dropthebeat
ID x55D5AD0151E8EF4E
VERSION x000000000000001C

From replay of that Natural-born v4:

USER Simon
TITLE Natural-born
GAME Contest_27
GROUP Contest_27
ID x55D5AD0151E8EF4E

Compare the final quoted line of the level with the final quoted line of the replay: One is decimal, one is hex. To see that 0x1C = 28 isn't trivial, thus it's unnecessarily hard to see if the replay has really been played against that level version.

The ID is hex in both cases, that's fine. The version should also be identical in both cases, either both hex or both decimal, probably both decimal.

-- Simon

Lix Multiplayer Dates / Lix Campfire, Sunday, March 26th, 17:00 UTC
« on: March 23, 2023, 08:41:49 PM »

Let's meet in Mumble for loose discussion this Sunday, March 26th, starting 17:00 UTC. Who's up?

Mind possible local clock adjustments for daylight savings. Here in Germany, that Sunday (March 26th) is the first day of summer time, local time will be UTC+2 by then.

If you've never joined Mumble voicechat before for multiplayer, ask me for Mumble server details. I'll PM you.

Possible topics:
  • What annoys you in Lix?
  • The 2023 roadmap.
  • I'm working on insert-into-replay mode during play. What should be default, what should be an option?
  • Level reorderings in lemforum. It's been a while and I'll have to piece together suggestions from last year's threads. Do you already have concrete ideas?
  • Anything you like. Please bring your own topics!
-- Simon

Lix Main / 2023 Roadmap
« on: March 11, 2023, 06:11:47 AM »
2017 -- 2018 -- 2020 -- 2022 -- 2023

Development in 2023 will focus on:
Back in 2022 and January 2023, I've livestreamed lemforum on several evenings. I haven't livestreamed singleplayer Lix in February and March; instead, I've spent the free time on Lix development.

But I want to return to solving on livestream as soon as the cut button is functional. I'm inserting so much and hopping around in the solution timeline, I don't want to cut another replay by an accidental airclick.

I want to include Proxima's wood tiles and I'll have to fix Basher Walks into Terrain. I have ideas for that bug (and for miner❤blocker which is linked from that basher bug) that I still have to write down. Maybe that's already enough for a 0.11.0.

Thus, in the first half of 2023, these bugs and unfinished features have priority.

There are lemforum pack level movements/replacements waiting, and I want to merge some level movements. I forgot parts already, I'll have to plow through the level topics and stream feedback topics.

Development for neutral lix: I'll postpone this in light of the stuff above. I won't work on neutrals before summer/autumn of 2023. We'll see what comes back from the other stuff during summer. I have ideas and decisions with geoo, I'll still have to post those. With all the groundwork that we envision for Lix's internals and for the level format, it'll be too much to cram as stable into 2023.

-- Simon

Tech & Research / Arch Linux with Simon
« on: February 27, 2023, 12:18:36 AM »
Pulled from: Simon Blogs, Caffeine Withdrawal


I use the en_US.UTF-8 Linux locale for everything. I don't want my computer to know that I'm German; all software should be in English so that I can websearch the error messages. The decimal sign is the dot . and the thousands separator is the comma , and that should be adopted worldwide.

Nonetheless, some features of the US locale are horrendous, such as starting the week on Sunday. This affects GUI calendar tools in the desktop panel. Here is how to make Monday the first day of the week:

sudo vi /usr/share/i18n/locales/en_US
Directly after LC_TIME, insert the following two lines:
first_weekday 2
first_workday 2

Save and exit.
sudo localedef -f UTF-8 -i en_US en_US.UTF-8

(Month and week should still be abolished worldwide in favor of the heek, the hexadecimal chunk of days, even though Nepster didn't like it.)

-- Simon

General Discussion / geoo visits Simon, February 2023
« on: February 12, 2023, 06:04:06 PM »

geoo has visited me for a week.

For this visit, we happened to snatch exactly the weekend with the big publication of the Level Design Contest 27 entries. We had a lot of fun playing the levels together, often getting fresh ideas from each other.

But first: Do you remember how geoo visited me in September 2010, almost 13 years ago, and we took this photo?

Here's the up-to-date recreation:

I'm still the tall guy in the red shirt. geoo has the black shirt.

And it's the very same empty bag of Quavers! The quavers from inside are long gone, but they were curly. Here in Germany, this brand of potato chip isn't sold, so I've kept the empty bag as a souvenir to the old visit, and to the 1992/1993 DOS games Pushover and One Step Beyond.

We cooked meals, worked from home on our day jobs, played levels, raged about time limits, played card games and board games, and theorized improvements for both Lix and NeoLemmix. We'll have a few stories to tell.

Stay tuned for more posts, with more photos!

-- Simon

Go to Lemmings Forums main page. Scroll down. You'll see a list of recent topics, each with a link to its latest post. This list is 25 topics long.

The list ignores the list length that we set in the forum admin options:

Admin button (at top of page, only visible for forum admins)
→ Features and Options
→ Configuration
→ Current Theme
→ Number of recent posts to display on board index:

Expected instead: If the setting is 40, the list should contain 40 topics, not 25.

It's a regression, the forum heeded the setting some years ago.

More testing: I can set it to, e.g., 15, and then the list will show only 15 topics, okay. I can set it to 25 and it will show 25 topics. But 30 or 40 will still show only 25.

(We can argue if 40 is too much, we can find some other value that works for you. With 25 new topics, I see borderline over a week of history only, and I really have only ~20 different topics, not 25, in it because I see ~5 recycling posts in a separate line. But that's beside the point of the bug.)

-- Simon

Lix Main / Basher Walks into Terrain
« on: February 06, 2023, 06:00:41 AM »
A basher oddity found by Icho during multiplayer in Lix 0.10.5. Thanks! Here's a reduced example level.

Rule 1: Bashers walk forward during some frames in their cycle. This forward movement is allowed to enter terrain, i.e., the basher's foot is allowed to move into and through terrain.

Reasoning behind rule 1: Either the basher's swing removed all terrain here, therefore we won't walk into earth anyway. Or the basher hit steel, immediately stopped bashing, and won't walk forward.

Rule 2: During the walk forward, bashers lower themselves into holes. Bashers never gain height.

Reasoning behind rule 2: We removed all terrain onto which we might step upwards, or cancelled on steel in the way. Either way, there is no need for the basher to ever rise. But the basher may try to walk over holes, and the basher should certainly fall into such holes if they're deep enough. If the holes are shallow, it's okay for the basher to continue; shallow holes shouldn't break mental pathfinding.

As a result of rules 1 and 2 combined, the attached level Basher Walks into Terrain is solvable (saves 1 of 2, using 1 cuber, 1 basher, and a few jumpers to position the cuber and basher). The thin white line is steel.

The most noticeable effect here is that we can clip through a particular arrangement of steel.

The second effect is that a basher falls through an arrangement through which a following crowd would not fall. The non-falling crowd alerted Icho in the first place.

I don't have a good solution.
-- Simon

NL 12.12.5

The land are the physics pixels, i.e., the pixels where Lemmings physics apply. Zooming into the map will draw the land bigger, and we will see less of the land.

The canvas is the bitmap where we paint the land, then paint the lemmings, then paint the mouse cursor, ..., and finally paint the entire bitmap to the screen. After zooming in, we'll draw a land pixel as a square across several canvas pixels. The mouse position on the canvas stays the same throughout zooming in, that is good.

The mouse position on land will ideally remain the same before and after zooming in. When we're in small zoom levels and the land doesn't fill all of the canvas, preserving mouse-on-land won't always be possible. NL wants to fill the canvas with as much land as possible, and that's good.

The bug is now:
  • Zoom in until the land fills all of the canvas. Don't zoom in further yet, i.e., keep available at least one deeper zoom level for later.
  • Scroll to a position near the boundary of the land. Ideally, you're not at, but only near the boundary.
  • Put the mouse cursor anywhere except perfectly in the middle of the canvas.
  • Look at where the mouse points on the land.
  • Zoom in.
  • Look again at where the mouse points on the land. Now, it's a different pixel than where the mouse pointed on the land during step 4, before you zoomed in during step 5.
Expected instead: In step 6, mouse-on-land agrees with step 4's mouse-on-land.

Surprisingly, the bug doesn't happen when you're near the center of the map. There, NL computes and preserves mouse-on-land correctly when zooming in.

There are singular cases where the zooming preserves mouse-on-land even after back-and-forth zooming-in-and-out. Easiest example: Scroll to the perfect middle of the land. Put the mouse in the perfect middle of the canvas. Zoom in and out.

I haven't tested zooming out. That should ideally use the same code to preserve mouse-on-land, and fixing the bug for zooming in should ideally also apply to zooming out.

-- Simon

NL 12.5.5.

Have a lemming near the top of the level, almost at the ceiling. Have space in front of the lemming. Select jumper in the panel. Hover over the lemming.

Game draws an arc that goes out of bounds (where nothing is drawn, and this is correct), then returns downwards from the ceiling. But if we assign jumper, the jumper does not follow this arc. Instead, the jumper dies beyond the ceiling and never returns. The arc and the path do not match even though there is no interaction with other lemmings.

Expected: The arc comes back from the ceiling if and only if the jumper survives.

-- Simon

Pages: [1] 2 3 ... 17