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 ... 13
Split off from Simon should report these 3 NL bugs properly:

How to repro:

1. Assign something, B, for physics update ("phyu") n, to lemming L.
2. Framestep back to between physics updates n-1 and n.
3. Assign something, A, for phyu n to lemming L.

What happens: B is replayed and your new assignment A is eaten without effect. B's effect is visible on the screen.

Expected instead: B is erased from the replay and A becomes part of the replay, and A's effect is visible on the screen.

1. If you framestep back to between physics updates ("phyus") n-1 and n, and then assign A for phyu n to lemming L, but the replay already contains an assignment B at phyu n (forgot whether it has to be to L or not), then B is replayed and your assignment A is eaten. Expected instead: B is erased from the replay and A gets through.

namida wrote: This has been a known issue for so long - since Lemmix even, I think - that it doesn't even register to me anymore - it's just "I have to step back two frames to cancel that assignment". But you're right, this absolutely should be fixed.

-- Simon

(Moved: Bug #1: On assignment for frame n, first erase old assignment for n)

Bug #2. Zoom such that the right-most column of terrain pixels is only partially visible in your NL game window. Toggle pause several times. The right-most column of pixels sometimes is black, sometimes it shows the terrain properly. Expected instead: Always shows the terrain properly. Speculation: You have code duplication in the camera.

Bug #3. Have a gigantic screen, and zoom out to 1x. Have a large grey dead area at top/bottom of map. The mouse is trapped in the playable area, mouse cannot go to the dead area. Open the load-replay dialog. Your mouse cursor is still trapped within the map, the mouse cursor cannot move everywhere in the dialog, I can't click some files in the dialog. Expected instead: Trap mouse only if the game isn't the focused window.

-- Simon

NeoLemmix Main / How to play .nxp files
« on: January 27, 2019, 08:33:45 pm »
If you have a .nxp level pack file, how to play it with NeoLemmix? This was asked in #neolemmix twice within few weeks.

Answer: Get version 10.13.18 from the NeoLemmix download archives. This version is outdated, the NL authors don't support it anymore, and level authors should not make packs for it. But many authors still have packs only for this version.

Somebody more knowledgeable than me should explain in detail how to run these outdated versions. namida explains in the next post how to play the .nxp pack with that version.

Should this thread be pinned? Should this be moved to the board with outdated packs? This question appears often enough that the NL authors should think about a solution. Maybe even let NL v12 detect .nxp files and tell the user what to do?

-- Simon

Site Discussion / Summary of 2018
« on: January 11, 2019, 05:34:56 am »
I (Simon) have been the head admin. I haven't done as much as I could have: At least, I've deleted spambot accounts and their posts within a few hours. 1-2 spambots per month successfully bypass registration.

namida has done the most on the technical side: He has moved the site from NearlyFreeSpeech to a VPS (virtual private server) with full shell access, we can install anything we want. After some trouble with IPv6 routing, everything was on track soon, and the site has run extremely well on his VPS ever since. namida still funds the site himself, plus any donations that go 100 % into hosting costs site costs, excluding transaction fees.

The code of Lemmings Forums (Simple Machines Forums and some custom changes) is on Nessy's github repository as a backup.

Gigalem requested very sensible changes, e.g., change the ICQ personal field to a Discord account field in forum user profiles. But we haven't implemented any of these changes, sadly. I think we haven't changed the code in 2017 or 2018 at all. We merely put the change requests on the github issues page and let them sit.

The database (accounts, topics, posts, private messages, attachments) has no automation: We still have to back it up manually. We aren't diligent with this, occasionally I push Nessy to back it up, maybe once every 3 months. This is not smart; if the server dies, we lose around 3 months of culture. Bad. We have to look into automation.

Around November 2018, we had a massive traffic spike: For about an hour per day, we had 600 currently active guests, nearly everything from a few IP addresses in China. This didn't look like an attack, and it's well over now.

Our level designers still create and test each other's levels, the culture continues. That's what counts the most.

-- Simon

Lix Main / Autosave replays: Run to end?
« on: January 09, 2019, 10:50:12 pm »
Split off Level solving contest #2:

I thought the F3 button was a "save replay" button. That icon that looks like a save button has deceived me. :-[

I apologize for the lousy UI and how it caused you to lose the solution. :lix-trouble:

Harvester runs replay to end: There's a nasty related question: What is a solution? In our culture on the forum, it's a replay that will save enough lixes. Autosave promises to save all solutions, but it will only save those solutions that have run to a solved state during gameplay. It's possible to beef up the "replay harvester" (the internal part of the game that sits between the exited attempt and the level browser, and decides whether the replay is autosaved or offered for manual saving) to always run the replay to completion, to never miss solutions even when they haven't been run to completion during play. It's expensive and feels weird, maybe it's worth it, I don't know.

-- Simon

NL 12.04

This seems hard to reproduce, and I speculate that it's a race condition in NL's keyboard/mouse input polling.
  • Have a machine that endures a framerate drop during continuously held framestep-back. I repro this on my laptop (can't test on desktop today): 2018 laptop, Intel integrated graphics chip, Arch Linux, NL runs in Wine 4.0-rc3.
  • Map hold-to-scroll to RMB (right mouse button) and framestep-back-by-1-frame to 2 (the number 2 = the key above W).
  • Play a large level, e.g., Minim level-solving contest 1.
  • Zoom into the level far enough such that the game allows you to scroll around the map, i.e., do not have all of the map visible at the same time.
  • Fast-forward to maybe 5 minutes in the level. No need to assign anything.
  • Press and hold 2 (the number key) to framestep-back continuously. Never let go of the key until you're done reproducing this bug.
  • Press RMB (right mose button) and hold it for about a second, move the mosue frantically while holding as if you were scrolling with hold-to-scroll. Repeat this step several times.
Expected: Every press-and-hold of RMB in the last step allowed you to scroll via the hold-to-scroll function.

Observed instead: Only some of the press-and-holds allowed you to scroll.

-- Simon

NL 12.04

On first start, player offers two key mappings, functional and traditional. In functional, RMB (right mouse button) selects walker.

RMB should be hold-to-scroll instead.

Ideally, RMB is also select-walker, but that is far less interesting. With the questionable design where function-to-key bindings must be injective, anything else can be select-walker, I don't care much, I've bound Left Control for select walker but never use it.

-- Simon

Challenges / DOS L1 thread
« on: December 19, 2018, 02:54:13 pm »
TASVideos is a community for tool-assisted speedrunning. They have a thread about DOS Lemmings 1 with some action from 2014, but it slept for 4 years.

Now, in December 2018, there is new action:

Nobody has concrete plans to TAS L1, but a few prolific TASers are discussing first ideas. I'll happily share information there about the L1 physics. I'm not the most knowledgeable of all Lemmings Forumers, but I hope it's still worth it.

-- Simon

Non-Lemmings Gaming / Zendo: Realizations
« on: December 16, 2018, 07:01:37 pm »
Realizations about Zendo
Part 1: Different piece sets

I will write several posts about the tabletop game Zendo.

Background knowledge: Rules of Zendo, a game of inductive logic.

In Zendo, you build structures of pieces. Any source of pieces is eligible, but ideally you have many copies of each piece and can compose pieces in many different ways. The structures should be easy to grasp by looking.

Example piece sets

The 2017 Zendo release ("Zendo 2.0") has 3 shapes in 3 colors each. Everything is the same size, there are no pips on any piece.

Icehouse pieces. Everything is a pyramid. The 2001 Zendo boxed set has 4 colors of pyramids in 3 sizes each. Large pyramids had 3 pips, medium pyramids had 2 pips, small pyramids had 1 pip.

Digis, and structures are then natural numbers.

Letters from the alphabet. We played Zendo on Lemmings Forums where structures were finite-length strings over A-Z.

Good piece sets

Above, I've already sorted the piece sets according to how good the resulting game feels. The Zendo 2.0 pieces are the best. Geometric shapes and colors seem to fit the game much better than letters or numbers. Visual pattern recognition is a deep part of Zendo.

I have an irrational soft spot for the Icehouse pieces over the 2.0 pieces. The Icehouse pyramids come in green, the table looks more colorful with red/yellow/green/blue pieces, and still the number of colors is small enough.

I've always thought our Lemmings Forums A-Z game produced insidious problems with harder rules. That will warrant an extra post these days. Until then!

-- Simon

Lix Main / Design history of Lix
« on: December 04, 2018, 12:49:04 am »

Double resolution

Lemmings 1 and Lemmings 2 were written for 320x200 VGA mode. The playing characters are 8 or 9 pixels high, walk ahead by 1 per frame, and builder bricks are 1 pixel high.

Lix is double-resolution: Characters are about 17 pixels high, walk ahead by 2 hi-res pixels, and builder bricks are 2 pixels high. More precisely, physics work with 2x1-pixel-chunks. All lix' x-coordinate is always divisible by 2. Only the y-coordinate may be any integer. A 2x1-chunk of land counts as solid as long as at least one of its two pixels is solid.

Where does this concocted rule come from?

In early 2003, I scripted levels for the freeware game Gravity Strike, this ran with hardcoded 640x480 fullscreen. In the early 2000s, CRT monitors were widespread and could display any resolution sharply -- up to a point. But every monitor could display 640x480, thus Gravity Strike's author decided to hardcode this size.

I wrote GS Lemmings, a Lua script that ran in Gravity Strike, removed everything that the game normally provides (spaceship, terrain, enemies, status panel) and instead loaded my own graphics and ran my own logic. This is the birth of double resolution: It was easiest to work with what I had.

In Lua, apart from numbers, everything is a reference type, everything is garbage collected. I had no idea what was happening under the hood. Would arguments be passed by value or by reference? What is the difference between calling functions object.func() or object:func()? No idea. Programming was magic. If it failed, I would guess and re-try. I would never search the web for help because I found the technical explanations hard to understand. (Solution: object:func() is equivalent to object.func(object)).

In 2006, I finished my civil service -- back then, it was mandatory for every male German to either serve in the military or work civil service for 9 months. I had some time before university started in fall 2006. What to do?

I learned C++ and began the work on L++, a Lemmings variant with hardcoded 640x480 fullscreen resolution. Why would I do that? It worked in Gravity Strike, and I still had a CRT monitor that could display any resolution well. I kept my rule that the tiles could be anything and need not stick to 2x2-blocks. I would not upscale. I would load the tiles as they came from disk. That was easiest.

The 2x1 physics instead of 1x1 come from the desired walker speed. It was simpler to move always by 2 horizontal pixels than to write a basic walk action for 1 pixel, then call that twice per frame. The walk cycle would look at two pixels and deduce from them together whether the 2x1 chunk was air or solid. I didn't expect any odd cases from the rule.
Of course, there are odd cases (I should link the example gifs).

L++ became Lix in 2010 and got ported to D in 2015. Like Theseus's ship, all code, graphics, etc., got replaced over the years, but really, 2006 L++ was the first version of Lix.

With my own game project at 640x480 fullscreen hardcoded, I spent considerable time on choosing my first laptop in 2007. I wanted 4:3 aspect ratio for my laptop screen, but that was getting unpopular. Laptop computers were booming, and widescreen displays had gotton common. I loved 4:3, why would anybody want 16:10? Documents, websites, code, etc., everything is vertical, but most importantly, 16:10 TFT displays would blur at 640x480 hardware fullscreen.

Lix/L++ is now 12.5 years old and programming been my longest-standing hobby. Now, Lix supports any screen resolution, windowed or fullscreen. The user interface scales smoothly, a major design goal during the 2015 rewrite.

Even with the user interface resolution decoupled from the physics resolution, Lix still has 2x1-hi-res-physics. I don't like how confusing the 2x1-block rule can be. But it has been so deeply ingrained since the beginning. It allows for more graphical details on tiles. On the other hand, it forces tiles to have more details to look good.

tl;dr: It was easiest because of the hardcoded 640x480 resolution in the early versions. And now too much depends on it to get rid of double resolution.

Passage of time

More rambling, because I'm in the mood.

I feel like time is passing much quicker now. In 2003, GS Lemmings was released with 20 levels after maybe 2 months of work, with some bugs of course, some crashes, some reliance on 60 FPS -- Yes, the game would skip some physics logic, but not all physics logic, when the machine was slow! Horrendous bug! -- but it worked well enough to play. The 2-3 regulars on the Gravity Strike forums loved it.

Where GS Lemmings took 2 months, L++ required 3 years before I felt ready to post it on Lemmings Forums including networking mode. A more complicated feature, sure, and I wrote the game engine from scratch instead of relying on a host game.

It's been nearly 4 years since I started the rewrite to D in early Feburary 2015. I'm very very happy with the rewrite, I've pushed the game further, and I'm supporting different operating systems better than ever before. But are there killer features in D Lix that weren't already there in C++ Lix? Did the fundamental game take 2-3 years to implement in 2006 to 2008, and the 10 years after it has been only polishing?

Sometimes, I miss the days where I would implement buggy crap with trial-and-error, but have something cool to show after minimal development time. The 15-year-old kid inside me wants to feature-bloat on some side project. And the 5-year-old inside me wants to play that and get even more wild ideas.

When time passes linearly, memories increase only logarithmically. You remember so much from when you start a new activity. But then you get proficient, and you don't remember as much when you're performing by routine.

Consider the time after my civil service. I learned a good chunk of C++ and wrote a prototype-ish game, L++ with some singleplayer, in half a year. Then, I had nearly no other hobbies, obligations, or girlfriends, and could focus fulltime on L++. Now, 12 years after, I had comparable time after finishing the PhD, but I haven't started a new hobby in that time. But I already have so many hobbies -- games, Lemmings Forums, speedruns, tech projects -- that I've enjoyed in that time. They merely generated less impactful memories than starting a new hobby typically generates. That's why time seems to fly quicker.

At least I've finished xmas2018 on time. :lix-grin:

-- Simon

Lix Levels / xmas2018: Holiday-themed pack with 24 levels
« on: November 30, 2018, 12:32:21 am »

just in time for the festive season, Forestidia and I present xmas2018! This is a holiday-themed singleplayer pack for Lix with 24 levels, including one by Raymanni.

Get it: Download newest version of Lix, xmas2018 has been included since Lix version 0.9.22. Look in the folder levels/single/misc/.

Ideas behind the pack: This season is about love and caring. You don't have to implode, cube, or kill lix: In these levels, all lix must be saved. The 24 levels stand for the 24 days until Christmas. You can play one level per day, or try to solve them all in a single sitting. It's your choice.

Have some hot chocoloate and enjoy the pack!

-- Simon

Advent Calendar
The first level of the pack. 24 little doors with 24 little surprises.

Decorate the Tree
Join us in the homely living room. The holiday porcupine can't wait to see your newest tree stylings.

Home Time for Santa
Santa has delivered all the presents. The cookies were tasty. Let's help him leave the house through the chimney.

Docked at the North Pole
Join the expedition to Santa's home in the icy north.

Three Wise Visitors
Earlier, you've guided the Three Wise (Wo)Men through the desert. Now they must agree where to meet in the shed.

Lix Multiplayer Dates / Lix Multiplayer Saturday 2018-12-01
« on: November 21, 2018, 09:56:39 pm »

Let's play Lix Multiplayer on Sunday, December 2 Saturday, December 1 at 19:00 UTC. Who's in?

New and exciting! At latest 3 hours before the session on December 1, I will release Lix 0.9.22 with:
  • Bugfix against the crashes on huge maps: I'll provide a 64-bit executable that shouldn't crash anymore, and will encourage you to play the multiplayer session with that. Let's test some huge maps that night!
  • Xmas2018: a Holiday-themed Lix singleplayer pack with 24 levels by Forestidia and me. Dedicated topic and preview images will appear next week!
-- Simon


airwalk happens in Lemmings 1 and in Lix. I consider it a physics bug. Here are pictures taken in successive frames:

  • Many clustered walkers are immediately in front of the wall.
  • Assign imploder to one of the walkers. (It doesn't matter if you implode the first, last, or one in the middle.)
  • Physics update begins.
  • The imploder removes therrain. (Physics update terrain removers first, then skills that don't affect the terrain. This is why choice of walker to implode didn't matter.)
  • All walkers see the hole before they update.
  • (No check whether they have ground.)
  • All walkers notice open space ahead, thus walk one step ahead in the air.
  • All walkers notice the lack of ground, thus begin falling.
  • Physics update is finished, and the result is drawn to screen.
  • The fallers will eventually land on the ledge created by the imploder.
Problem: These walkers land on a ledge, but shouldn't be in the space over the ledge in the first place. It's weird that walkers react to the lack of wall immediately (thus can walk forward), but fall due to lack of ground only after airwaking once. It's also inconsistent with the general philosophy that terrain removers should immediately affect everybody in the same frame, in every way.

Proposal: Walkers should check for ground both before and after possibly walking forward. If they hover before the move, they immediately fall and don't move forward anymore.

Downsides of change: Walking is the most ubiquitous activity. If you have walkers in a digger hole, this change affects them as the digger breaks through. I haven't implemented any fix yet, thus haven't run the replay checker on this. Also, other activities might have similar bugs -- fixing only the walker in isolation might be inconsistent.

-- Simon

Lix Levels / Slipping Again: alternative solution?
« on: October 01, 2018, 05:52:20 pm »
Flopsy found:

Has some similarities to the intended route. Looks hard to prevent, merely finnicky.

-- Simon

Lix Multiplayer Dates / Lix multiplayer 2018-09-15
« on: September 06, 2018, 12:27:25 pm »

let's play multiplayer Lix again, and schedule a time nicely in advance. I propose Sunday, September 16th We changed it to Saturday, 15th at 18:00 UTC .

Any game version 0.9.x can join, which is everything released since summer 2017. Current is 0.9.19. Select Multiplayer from the main menu and connect to the central server.

-- Simon

Pages: [1] 2 3 ... 13