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 ... 15
Lix Main / Handicap in Multiplayer
« on: May 16, 2022, 06:48:08 PM »

(This has github issue #391: Handicaps in Multiplayer.)

If you're a brand-new player at golf, go, or chess, it's already an achievement when you beat a strong opponent at queen odds, or at nine stones, or at three more strokes per hole. Next time, can you do it at rook odds? You can easily see your personal progress in how the handicap shrinks over time. I'd like to have this in Lix.

Per game: In Lix's networking lobby, I'd like to offer handicap options next to the color picker. Between games, you can adjust the handicap. The default is no handicap for either side.

Choosing a handicap puts you at a disadvantage. The stronger side should handicap itself and thus start with a weaker position. I'd like the new player to start with the level's normal, unhandicapped-but-also-unimproved position; this makes it easier for him to learn how the map usually plays. Also, as I wrote in 2017: A strong player with 50 lix can beat a novice with 500, but a strong player with 5 lix must play enourmously well to beat a novice with 50 on a map with batters.

In IRC, geoo and I have considered some types of handicap.

Divisor handicap: You pick a number ≥ 1. Your initial number of lix is divided by it, and every skill count in your panel is divided by it. Options for divisor handicap could be 1 (= no handicap), 1.2, 1.5, 2, 3.3, 5, 7, and 10.

We'll always round up non-integer results. If the map gives 2 builders, you'll start with 2 builders at handicap 1.2 or 1.5, and you'll start with 1 builder at any bigger handicap.

Previously, I've expressed this as a multiplier handicap, and values were 100% (= no handicap), 70%, 50%, ..., but this design has a downside: Lower numbers mean stronger handicaps. It's nice when higher numbers mean stronger handicaps, to avoid confusion when people say "high handicap" or "you can lower it".

If you're in a team, the team's total divisor handicap can be the average of the team's players. Should "average" be the arithmetic mean or the harmonic mean? I'll have to ponder, and Proxima will be happy. Harmonic makes sense because it's a divisor handicap.

Delay handicap. You pick a number of seconds ≥ 0. Your first lix spawns later than other players' first lix, at this delay. Afterwards, your remaining lix continue to spawn at the normal spawn interval after each previous lix. Options for delay handicap could be 0, 5, 10, 20, 30 seconds. Anything more than 30 seconds is probably too boring for the experienced player.

Again, if you're in a team, the team's total delay is the average of the individual player's delay.

Asymmetric levels. If you choose a divisor and/or delay handicap, you always start in the first seat, and other players are randomly distributed amongst the remaining seats. This doesn't matter in a symmetric level, but if the author wants to build an asymmetric map, the author can put the seat-to-be-disadvantaged always in the first position. As long as we have any kind of handicap option, or even just a checkbox, we can add this seating rule at little exta UI cost in the lobby dialog -- it needs an explanation, but no extra pickers.

Level-specific handicap. Instead of offering concrete values to pick, you merely have a checkbox: Do you want to be handicapped or not? Or you have a choice of handicap strengths; which handicap strength do you want? It's the task of the level author to define the handicap in terms of delays or divisors or seats.

The downside of such level-specific handicap is that most authors won't bother to define handicaps for their levels. The few levels that have author-defined handicaps won't be consistent, e.g., you can play at strength 1 on this map, but it's hard to win against strength 3 on that other map. If it's not consistent anyway, I feel it's better to just offer concrete values, and let the players pick.


-- Simon

Lix Main / High-level two-player replays
« on: April 02, 2022, 07:03:30 PM »

Rampoina asked on IRC: Are there replays of two-player Lix games between strong players? How can we learn more about multiplayer strategy?

I've attached two replays:
  • Stepping Stones 2v2. It shows a common principle in multiplayer: Higher and faster routes are better. Even though the purple team loses, pay attention to purple's initial relentless attacking of the orange bunch. The orange bunch is weakest while the top route is nearly prepared, but not completely done, and the bunch hasn't yet ascended to the top level.
  • A close and eventually drawn endgame at the bottom of the towers: Both geoo and I want to fight for a win in a drawn position. This shows micromanagement of single lixes that have to attack a bunched enemy crowd.
To watch replays:
  • Either put them into your replay directory, then navigate there from Lix's replay browser.
  • Or, on Windows, drag them on the Lix icon.
  • Or, on all OSes, run Lix with the replay filename as a command-line argument.
Ah, if you watch these replays: Lix versions since mid-2021 have a bug: Lix will re-save a watched multiplayer replay, even though you haven't changed it. This is a regression of the new end-of-game dialog. I'll fix this in the next version, 0.9.44.

-- Simon

Lix Main / Differences between D debug and release builds
« on: March 28, 2022, 06:02:06 PM »

things that I told Dullstar in voicechat about the March 27 sporadic client-side crash.

Debug buildRelease build
in/out contractcompilednot compiled
array bounds checkThrows Error if outsidememory-unsafe access
(I could enable bounds check)
enforce(x)Throws Exception if not xThrows Exception if not x
assert(x)Throws Error if not xnot compiled
assert(false)Throws Error if not xhalts the application, e.g., segfault

You're supposed to catch Exception but not Error. I still catch both in the main loop, log them, then re-throw them to terminate the application.

assert(x) with a value x only known at runtime: In D, this is deliberately different than assert(false) or assert(0) with a statically known false value. assert(false) marks code that you shouldn't reach. (I'm not sure if the compiler is also allowed to optimize on this assumption in release builds.)

-- Simon

Lix Multiplayer Dates / Lix Multiplayer Sun, April 3rd, 17:00 UTC
« on: March 28, 2022, 06:11:46 AM »

let's test and play more! April 3rd, starting 17:00 UTC, let's play more Lix. Any 0.9.x will do, 0.9.42 is the newest, but they're all good.

I'll run an experimental server again as the central server.

Dullstar and I will connect with debugging builds. Either the session will go fine without problems whatsoever, or we get a chance to catch the sporadic March 27 client-side crash.

(Outside these sessions where I can closely watch, I'll run the ancient 0.9.20 server as the central server. That 0.9.20 server hasn't made 0.9.x clients crash in many years; it should also be practically identical to a server built from the 0.9.42 codebase.)

-- Simon

Lix Multiplayer Dates / Lix Multiplayer Sun, March 27th, 17:00 UTC
« on: March 24, 2022, 10:19:27 PM »

who's up for Lix multiplayer this Sunday, March 27th, starting 17:00 UTC?

(Mind daylight savings. In Germany, 17:00 UTC will be 19:00 local time.)

I've been a busy mole, I've pushed lots of earth deep inside the server. The goal is to support both 0.9.x and the future 0.10.x on the same server, in different rooms. Let's test if I broke anything. For this Sunday's session, I'll run the reworked server as the central server. Ideally, you won't notice anything at all. :lix-grin:

For you, everything is as usual:
  • No need to update Lix. 0.9.42 is the most recent, but any 0.9.x works.
  • In Lix: "Network game" -> "Play on the central server" -> "Okay".
-- Simon

Site Discussion / One SuperLemmini board for all 3 forks is still OK
« on: March 14, 2022, 06:39:29 PM »
WillLem and Charles are now moderators of the SuperLemmini board.

I stickied the build instructions for SuperLemminiToo.

Reworded SuperLemmini board's flavor text to name Lemmini, SuperLemmini, SuperLemminiToo.

In early 2022, most discussion there is about SLToo. If two of those forks become active at the same time, we can still split the board.

The downside of the un-split board, even if only one fork is active, is that you're inclined to pre-/postfix all your topic titles with the particular fork name. Hmm. Tell me if you want something different.

-- Simon

Site Discussion / Wrong escape: &amp instead of &
« on: February 16, 2022, 08:10:05 PM »

Lix Levels topic title:
Maps & insights from February 2022 session

Renders correctly in topic view.
Renders correctly in the list of 30 recent topics.
Renders incorrectly in board list that shows recent topic per board.
Renders incorrectly in last-post display in forum stats.

The wrong rendering is:
Maps &amp insights from Fe... on 2022-02-15, 20:01 UTC

Ampersand is wrongly escaped. Here is the raw HTML of that link in the recent-post line in the board list:

Code: [Select]
<p><strong>Last post</strong> by
<a href=";u=4">Simon</a>
<br> in
<a href=""
title="Maps &amp; insights from February 2022 session">
Maps &amp;amp insights from Fe...</a>
<br> on 2022-02-15, 20:01 UTC</p>

Within this HTML, we see:
Maps &amp;amp insights from Fe...

Expected instead in the HTML:
Maps &amp; insights from Fe...

Probably bug in the forum software. Is custom fix worth it? Is upstream report worth it? >_>

-- Simon

Lix Levels / Maps & insights from February 2022 session
« on: February 15, 2022, 08:01:27 PM »

Flopsy and Lana created several maps for our recent session in early February 2022. Please post them here, then I can include them in the next release. :lix-grin:

Flopsy: My Eyelids for Holes (4 players): You found that it's much easier going left than going right. Consider to move the exit further left to incentivize going right?

Insights about spreading the love from that session.

BadBlocker said: He loves 2-player Lemmings, but multiplayer Lix brings the interaction too quickly, contemporary map culture doesn't nail the essence of 2-player Lemmings for him. He suggests more route building in isolation before confrontation. He considers not joining every single session, but still to occasionally join.

I replied ad hoc: Yes, either we should split into fewer players, or wait for handicap (physics change) later in 2022.

In hindsight, the large sessions are the main events, and we had 4-8 players every time. This is much different from L1 2-player. It's conceivable to play more 2-team maps, where new players can focus on route building.

Maybe new players like multiplayer solitaire? I.e., maps with no/very little interaction. This is unpopular with the strong players, but if it's a way of onboarding... hmm.

Or warmly suggest 1v1 with either another new(ish) player. Or 1v1 against a strong player who plays at a handicap (later in 2022). I don't know how much handicaps will really help with the situation, we'll have to see. Links: Handicap on LF, #391 on github

(Also mantha16 can't get to grips with Lix, I'll ask in more detail tomorrow.)

-- Simon

Lix Main / 2022 Roadmap
« on: December 30, 2021, 10:37:15 PM »
2017 -- 2018 -- 2020 -- 2022


before the happy new year 2022, here is the Lix development roadmap for 2022. Thank you for all of your input at Slow additions or experimental fork!
  • Make the game server accept different minor versions. In a room, everybody should still have the same minor version. Users of the current minor version, 0.9, should still be able to connect to this server and see other 0.9 users. I need a flexible server anyway to support physics experimentation with our community, thus it's not that far a stretch to also make it 0.9-compatible.
  • Stabilize the physics changes that have been on the backburner since 2017, and release a stable 0.10.x with singleplayer fully proof-covered. 0.10 will not have neutral lix yet.
  • Offer an experimental version with neutral lix in multiplayer. It's okay if it takes until 2023 or later to merge anything like this into stable. It's probably okay to have a strange level format for neutral lix before neutral lix stabilize, but that's a separate concern, I'll think about it when the time comes.
  • Add HTTPS to Some reasons, also I want to learn it and is the obvious learning project, and the knowledge is remotely related to my day job.
-- Simon

Lix Main / Slow additions or experimental fork
« on: November 30, 2021, 06:12:09 AM »

here is some very-high-level strategy for the future of Lix: It's not the high-level 2022 roadmap, but even higher level.

How will I introduce breaking changes? I've been really conservative, I haven't changed the physics at all since 2017. Why is that? And how will the next 5 years look like?

Debian problem: Every 2 years, Debian, the linux distro, allows major software updates. We have a package with Lix 0.9.x in Debian, thanks to tarzeau. :lix-cool: Debian shuns non-bugfix patches in-between the releases, therefore Lix's physics updates will only land in the Debian Lix package every 2 years. The Lix game server (running on a machine that I rented, has nothing to do with Debian) accepts players from all operating systems, including Debian, but requires that everybody has the same minor version of Lix (either all have 0.9.xx, or all have 0.10.xx, ...). Therefore: If we change the physics in stable Lix releases more often, Debian players will not be able to play on the server. But I want them to be able to play.

The Debian problem is paramount in my Lix project planning. I want the Debianists to play. I don't want to lock them out of the server for over a year.

Therefore, I see two possible paths forward:

Careful addition:
  • Rework the existing server to accept players from different minor versions (0.9.xx, 0.10.xx, ...) and ensure that you only join rooms with same-version players. If this takes weeks to be nice, so be it.
  • Work on the existing problems one-at-a-time.
  • Introduce physics changes only when well-tested in singleplayer, and move all culture to the new stable. Ideally, create some unittests for physics.
  • Only extend the level format, don't replace it entirely.
  • Introduce neutral lix only after careful assession how they fit best into the existing level format.
Massive feature bloat:
  • Immediately split an experimental from stable, and run two multiplayer servers.
  • Add neutral lix, add unstable features, add new skills
  • possibly cut/change/merge skills to make room in hotkey layout
  • Change level format in whatever incompatible way I want.
  • Expect the stable and the experimental to be split for years.
The 5-year-old child in me wants to bloat 7 features and then cut 3 of them. I haven't done this in software for years. It's refreshing to make features without spending 90 % of the time on how to make it agree with the rest of the software. We can bloat dumb features and ditch them if they suck!

The software architect in me isn't so sure, warns that those 90 % will be spent anyway in the future, and wants more caffeine now. Also, I don't know if I have the free time for enough features that warrant a fork.

The community priest in me wants everybody under the same nice comfortable stable version, and no arguments that feature X will be cut in any experimental version. Debianists will always enjoy the same perks as those who run the hottest new stuff, because only highest-quality hot stuff leaves the factory in the first place.

-- Simon

Lix Main / Backroute-judging feature when saving replay?
« on: September 08, 2021, 08:28:53 PM »

There are days/weeks between creating the replay (during a longer play session) and submitting the replay. By then, I've forgotten my feelings for the replay.

On saving a manual replay, I want buttons for quick annotations:

I suspect that this is the intended solution.
I suspect that this is an acceptable alternative.
I suspect that this is a slight backroute.
I suspect that this is an egregious backroute. :lix-evil:
Add/remove/reorder quick annotation.

How do the powerful solvers in NL handle the problem of remembering feedback for later submission? You submit many replays in one post/PM. When you were playing, did you put feelings in your filenames to remind yourself? Do you re-watch replays before submitting them for accurate feedback?

For a Lix feature: Should we put the feeling in the filename or should we put it into the replay format?

Even autoreplay can get these annotations, but they're optional, you don't have to provide one.

The same feature would be for level authors instead of level players. The authors will put a final judgement in the format/filename, whereas players will put suspicions of what the author's judgement would be.

-- Simon

Ste Woz Ere designs Tribes of Steel (L2 pack WIP).

geoo and I want to blind-race the Highland tribe on livestream. I propose Friday, July 9, starting 17:00 UTC. I expect these streams to take 2-4 hours for one tribe. geoo, does this suit you, Fri Jul 9 17:00 UTC?

Simon's twitch page
geoo's twitch page changes every year.

-- Simon

Fan Corner / Iconic Game Archaeology
« on: May 18, 2021, 06:15:45 AM »
In the university years, I would prowl the internet for culture late at night. With a job, I prefer to sleep at night, so I've moved my internet antics to early morning instead. Today, I've dug up:

:8(): Forum thread on iconic game archaeology: miscellaneous artifact pile :8():

Old Lemmings fan art, and unused stuff from other video games. Example:

...and more animations like this. I had known some before, but these signed CMU'95 were new to me. Enjoy the thread!

-- Simon

Lix Main / End-of-singleplayer screen
« on: May 02, 2021, 10:27:46 AM »
Progress report on the new feature, the end-of-singleplayer screen.

March 2021: Start implementing the end-of-level screen.
Discover small piece of duplicated logic in the overarching screen handling.
Get idea for huge refactor of the screen handling.
Weeks later, finish refactor.
Lix runs, main menu comes up.
Praise the type system, it catches all bugs at compile time instead of at runtime.
Lix crashes at runtime.
Hack to navigate; most screens don't crash, only the level browser crashes.
Become nearly insane analyzing the code and proving that it cannot crash.
Browse Bugzilla for related compiler bugs.
Find matching bug that I filed myself 6 months ago, during similar problem.
Download compiler source and study, getting ideas to sleep over.
Next morning, discover that somebody already has a pull request in the works.
May 2021: Be happy, continue with end-of-singleplayer screen.

What do we get from these first 6 weeks? The most boring screen in the world, see attachment. :lix-evil: All you can do is go back to the browser.

The plan is:
  • Add the stats for the solution from the finished/exited playthrough.
  • Add replay-saving button, and info about about auto-saving.
  • Add the personal record. I track lix saved and skills.
  • Contemplate about more stats to track. The screen's top half gives room for more.
  • In the bottom half, add preview of next level in the level tree.
  • In the bottom half, add preview of next unsolved level, if that is different.
For consistency, the screen will appear every time you exit singleplayer, even if you didn't win. We might want to save a non-solving replay. And we want to support hotkey habits, e.g. hitting the quitting hotkey twice during a singlepalyer game will then always go to the browser, regardless of winning or not.

After this screen is finished, I'll look at the networking server, allowing different versions to play on the central server, and look into physics changes and level format changes. 0.9.x has been good for nearly 4 years, but we have more things to come.

-- Simon

Lix Levels / Multiplayer Map-Making Contest
« on: February 19, 2021, 06:55:27 PM »

Let's build cool multiplayer maps for Lix!

How to participate

Build some maps in the Lix editor and post them here! All multiplayer maps built from January 2021 through April 2021 are eligible.

Schedule spontaneous playtesting sessions (e.g., in #lix, chat in your browser) or post on the multiplayer-planning board here on the forums. The more Lix sessions you schedule/join, the better you can test and improve your maps from the feedback.

Flopsy's Editor tutorial
Flopsy's Guide to Multiplayer


There are no hard rules, any multiplayer map is eligible. Here are some inspirational prompts:
  • An asymmetric map: Instead of copying/mirroring one player's terrain, everybody gets completely different terrain. It's good to playtest such a map several times in our sessions, so you can fix the balance.
  • A map with few skills, maybe at most 3 or 5 of each. Players must carefully decide whether to spend a builder, or whether to bat an attacker.
  • A map where you usually save either close to 100 % of your crowd, or nearly nothing. The player can't merely make a route for his continuous stream of lix, then defend the route.
  • A map that mixes racing (only 1 lix or only a few lixes, lots of jumping/running/turning) and route-building.
  • A map with a 5-player and a 7-player variant. We tend to have the fewest maps for these player counts.
  • Something really novel. 1-lix racing maps were groundbreaking when Rubix made his first one. Arty made a diplomatic map. What else is sleeping in design space?

Everybody will get a nice postcard in Summer 2021. If you're not happy giving me your reallife address, we can think of something else that is nice.

The point is to promote map-making and find unexplored places in design space. This contest is a lot more open-ended than the NeoLemmix level contests. We are not keeping the levels under wraps, there is no separate playing phase. Instead we are encouraging people to participate in our arranged Lix sessions (or arrange your own) and you bring the levels to be tested.

You are allowed to change the level as much as you like based on other players' feedback or your own findings. The deadline is 30th April 2021 at 23:59 UTC.

-- Simon

Pages: [1] 2 3 ... 15