Menu

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.

Show posts Menu

Topics - Simon

#201
Lix Main / Keys <--n:m--> game functions
May 07, 2016, 03:18:49 PM
Hi,



I've implemented this today in D Lix. It's a hack: You can map two buttons to pause. The game has hackish two-key support for exactly this function. Nothing else allows for multiple keys.

▱▰▱ means middle mouse button. Right mouse button, wheel-up, and wheel-down are all bindable as hotkeys. I felt fancy and I have unicode support. Probably ▱▰▱ is too hard to recognize as middle mouse button, but I don't think "MMB" is better. "Middle mouse button" is too long for the UI widget.

Main problem now:

For each game function, I want to allow many keybindings.
For each key or mouse button, I want to allow many game functions.

I don't know whether "many" shall mean up to 2, or up to 3, or arbitrarily many.

My first ideas -- I would like to avoid the dialog
namida's ideas -- button divides into several buttons on mouseover

Would you like to bind 3 or more keys or mouse buttons to a function?

-- Simon
#202
Lix Main / D Lix 0.6.19, the big picture
May 01, 2016, 01:17:31 AM
Hi folks,

Lix 0.6 is obsolete -- instead, get the most recent Lix version. It has singleplayer and multiplayer!




You're encouraged to play around with the D Lix browsers and the editor. Keep D Lix separate from C++ Lix, the stable release. C++ Lix has working multiplayer, D Lix doesn't have multiplayer yet. Download C++ Lix.

Where are we?
  • Singleplayer is physics-complete. I lack eye candy: flying pickaxes and explosion debris.
  • Menu structure is more fun already than in C++: Scroll the level list by mouse wheel. :lix-cool:
  • The editor works as good as the C++ level editor. You can group tiles!
  • No multiplayer.
Where is the ship sailing?

I would like to finish the editor and fix bugs.
In 2 months,
Now, in late June 2016, I'd like to migrate all singleplayer activity from C++ Lix to D Lix.
Now, in November 2016, singleplayer levels are fit for D Lix.

Multiplayer is set aside for later. After the singleplayer migration, until D Lix multiplayer becomes usable, we will fall back to C++ Lix for multiplayer. Since late September 2016, I've been working on the networking.

I will keep optional manual screen starting position, even though I recommend to rely on automatic screen start positioning.

I would like to cull variable spawn interval, time limits, and trampolines. I am hesitant to decide for good here, but I want to be honest with level designers about the probable decision. I could imagine a big, fat warning for time limits. But I love the simplicity of no time limits whatsoever.

I want to replace no-overwrite with tile-grouping. Grouped tiles become a new tile. I expect higher performance and versatility from tile-grouping than from no-overwrite. I'd love to convert no-overwrite-using levels on the fly. geoo is pondering smart algorithms for that conversion.

Triggered traps shall have two rows of animation: One that loops while idle, and one cycle of killing animation, during which the trap is harmless. I have to decide on the image format. I'd like to have the idling animation in the first row, because frame (0, 0) is the best preview frame for all other gadget types. This idling animation format needs a separate thread.

-- Simon
#203
Lix Main / Body parts in trigger areas
April 27, 2016, 06:27:50 AM
Hi,



We have a fat buzzsaw buzzing. Zzzzzssss. And a lix.
Should the lix die if she touches the saw with her foot?
Should the lix die if she touches the saw with her head?
Should the lix die if she touches the saw with her body? She would pass through small terrain gaps.
What happens when she's a climber? The climber's head has a different x-coordinate than the foot.
What happens when she's a platformer? A platformer's head is lower than a walker's.

If we check at the head at all, should mechanics depend on the spritesheet? C++ Lix examines the spritesheet for the eye, then checks there. The examination happens at program start, not at compile time. You affect physics when you alter the spritesheet. In total, C++ Lix checks for traps at (foot), (4 hi-res pixels above the foot), and (eye).

I'm considering to check at (n hi-res pixels above the foot) for n = 0, 4, 8, 12, or even for n = 0, 2, 4, 6, 8, 10, 12. The check would be independent of the lix's job. Both ideas catch the thin laser beams, these beams have a thickness of 4 hi-res pixels.

12 hi-res pixels over the foot is slightly lower than a walker's eye. Walker's eyes are bopping up and down at 13 and 14 hi-res pixels above the foot. The lix in the image would still burn. 12 pixels is considerably higher than a platformer's eye at 7 to 10 pixels. In a minority of platformer frames, even the hair is below 12 pixels.

Earlier discussion with geoo, beginning right after the colorful github pushes.
<geoo> I'm not sure what's best here, really. Maybe make a thread.

-- Simon
#204
BitBucket: https://bitbucket.org/namida42/neolemmixplayer/issues/23/less-variation-in-skill-counts

When you have 0 of a skill, the skill bar shows empty field, 0, or 00.
When you have n of a skill, 0 < n < 10,  the skill bar shows n or 0n.

Pack designer chooses leading zeroes in the Flexi toolkit. Player cannot change the display in the game. Yet leading zeroes distract the player from important information.

Expected instead: Game doesn't display leading zeroes by default. On 0 skills, game shows empty field. The game may allow to opt into leading zeroes, I don't care if some people want them.

-- Simon
#205
BitBucket: https://bitbucket.org/namida42/neolemmixplayer/issues/21/pickup-skill-trigger-areas-too-small

Brain dump on pickup skills from when Nepster was here in 2016-03. From Icho, Nepster, and me.

Coloring: In the L1 crystal and ONML rock set, the pickup skills have a white bg. This clashes with the lemming skin. Maybe there are other sets with the same problem, Nepster doesn't remember them.

Trigger area (TA): The TA is too far down within the pickup skill gadget. We all agreed how this is problematic. Lemmings don't collect the pickup, even though the pickup overlaps more than 50 % of the lemming body.

Icho: Move the image, not the TA! Moving the TA breaks replays for almost no benefit.

Simon: The TA's lower border is okay, but it doesn't extend far enough upwards. Increase the TA's vertical size. When the new TA contains the old TA as a subset, you can't break replays.

Nepster: There should be less TA near the bottom, and there should be more towards the top, but add more area than you remove. (= Move the image as Icho has suggested, then make the new TA a superset of the implemented TA, as Simon has suggested.)

-- Simon
#206
I had a longer discussion with Icho in Mumble yesterday. Topics: Culling variable spawn interval (VSI) from Lix, culling time limits from Lix, culling fake & invisible gadget flags from NL.

Selected parts look like I'm making a fool of Icho. I want to write down my thoughts as raw as possible, for reference. This was late at night, Icho was desperate for sleep. I'll be happy if Icho comes in and clarifies.

I: I want Lix to become good, otherwise I wouldn't spend all this time.

I: By culling VSI and time limits, you'll shoot yourself in the foot.

I: My favorite level of all time is Nick of Time by Pieuw. That relies both on VSI and a time limit. All action comes together beautifully.

S: I want to cull singleplayer time limits.
I: People will play Lix, realize there are no time limits, and leave.
S: There are no time limits in most NL levels. People have stayed.
I: They realize that the feature is nonetheless in NL.
S: How do they realize that?
I: I don't know.
S: People play levels before building their own levels in the editor.
I: They would leave in Lix when they can't set time limits in the editor.

I: VSI is a tool for the player.
S: It's a new game rule that is unlike everything else.
I: New tricks are good, I love learning new tricks and their interactions.
S: This is not a trick, but a rule.
I: Yes, even extra rules are good. There's a limit to how many are bearable, but you're way below that.

S: What enables more levels, VSI or time limits?
I: Hard to estimate. About equal.

S: Fake and invisible should be culled from NL.
I: Only-on-terrain is important, that makes for good decoration.
S: I'm not concerned with only-on-terrain.
I: You need fake and only-on-terrain to make Pieuw's lamp.
S: Why fake? Do you want to put the animated deco right in the solution path?
I: You're confusing.

S: What levels would be affected by fake and invisible?
I: namida has posted a list. Even if they're only a few levels, they should be preserved.
S: Most of that is spurious design or can be fixed after culling the flags. The minesweeper level is probably the strongest level that needs invisible.
S: What happens when we only cull fake? That's the more problematic flag anyway.
I: I don't know. Look at namida's list.
S: That list is for fake or invisible, not merely for fake.

I: Every time I hear the word 'cull', I have to jump in and prevent that.
S: By never culling any features, you'll end up like C++. A ton of supposedly simpler languages have spawned, aiming to replace C++. The point of culling is to prevent simpler replacements from overtaking.

-- Simon
#207
Lix Main / Rant: We're too used to crappy UI
April 19, 2016, 12:49:38 PM
Climbers and floaters should be painted differently from non-permanents on the game board. They must immediately jump to eye in a crowd. Even with good cursor priority that prefers climbable walkers over non-permanented walkers, it's a pain to locate climbers. L2 did it well, L2 inverted hair and body color on permanent-skillers. Everybody should roar and demand this in any IRS.

No, that should not be an option. Nobody in their right mind will ever switch off good, nonintrusive marking.

There should be a word for (rodent that has at least one permanent ability). Athlete is already taken for (climber and floater), but NL has overriden the meaning already. There should be a word, like plain, for (rodent that has no permanent abilities).

L2 had horrible assignment priority. L2 prefers young stunners over old workers. WTF. If Dullstar were correct asserting the L2 assignment have an RNG, the resulting algo would blow L2's assignment out of the water.

Screens should never fade in and out. Precious time wasted at critical moments. Fading is for music: Anything that runs along without gobbling 100 % of your attention. Screens should pop in, ready to go.

Leading zeroes contain no information and should be culled from most UI. When the quantity is zero, printing 0 is a leading zero. When you have 0 of something, and that something is not 0 over 90 % of the time, fine, print the single-digit zero. Otherwise, leave the gap, but don't print in-your-face-attention-whoring digits. L2 did it horribly wrong, L2 presented 00 on empty skills. Two leading zeroes! In the glaring orange font!

People will not read manuals. Present on screen what they can do. When that would clutter the screen too much, you can hide rare options in a menu. Cut blah-blah text and put options on the screen instead.

Some level designers clamor for level titles spanning two rows. Go write a novel instead. Names must be short. Naming is hard.

The simple text file is the best way to store information. Surprisingly, all text-based formats suck. We're in a dark age where XML is crap, and it's simultaneously replaced by Json, Sdlang, Yaml, Toml, Wurstml, Longacronyml. CSV is for rectangular tables, not for writing the contents of a class to file. Ini lacks standardization, lacks nesting, and "thing001 = this, thing002 = that, thing003 = ..." is idiotic to represent collection of thing.

Lix, both C++ and D, has the I-don't-care-just-die hotkey [Shift] + [Esc] that cannot be remapped. This is nowhere documented. Everybody should learn it and pester me to document it, and make it remappable.

Hotkey-binding dialogs are hard:
  • You can map keys to functions, that's bad, you must now list all keys where 70 % of them do nothing. And cohesion is horrible: When mapping a key, I don't get a feeling where related game functions are mapped. I see nearby keys only.
  • You can map functions to keys, that's bad, you want to map pause to two keys. Pause goes to [Space] for normal two-handed play, and pause goes to MMB, or at least [Numpad-Enter] near the mouse, so you can hit it comfortably while you're scratching your butt.
  • You can map functions to a set of keys. That's ugly, now you must have a UI to maintain the set. This UI will take awful wide loads of space. Otherwise: I want this function mapped to [A], and now I want it mapped to [E] instead. Should the UI add that, or replace [A]? Ah no, before pressing [E], I changed my mind altogether, so I hit [Esc] or RMB to cancel the assignment. The oh-so-helpful UI will now either clear [A] too, which we wanted to keep, or bind the function to [A] and [Esc].
-- Simon
#208
C++/A4 stable 2016-01-09.

I cannot repro this:

1. If you use backwards frameksip one frame at a time, it erases any actions you've made once you go past them. On the other hand, if you were to go back one second, any actions that happen during that second are not erased.

I've attempted this repro that doesn't work:

  • Linux, map back-one-frame to [2], map ahead-one-frame to [3]
  • Assign stuff in frame B
  • Go back from frame C > B to frame A < B by pressing [2] several times. This activates pause.
  • Go back from frame A < B to frame C' > B by pressing [3] several times. The assignment is replayed as I expect.
If I hold [2], [3] instead of tapping them repeatedly, or LMB on the panel buttons instead of tapping [2] and [3], I get the same expected result.

namida: How do you trigger the bug?

-- Simon
#209
Hi,

see issue 57 on github: Builder -> miner at wall depends on parity.

I've proposed a solution there. Comments?

The code for that proposal isn't pushed to github yet. I'll make a test release later this week, so you get to try this. Then you can destroy the idea yet again.

-- Simon
#210
Hi folks,

3-player rodent meeting in Göttingen: Nepster from Munich is going to visit IchoTolot and me in Göttingen.



(The 4th porcupine is in spirit of geoo or Ramond, who would have liked to join, had this been closer to Vienna.)

We'll meet at the train station at 10 a.m. local time on Friday, then head over to my place. IchoTolot is taking a programming course in C at our university, but Friday is a free day for him. So we'll do Icho's homework together. Will too many rodents spoil the broth, or are we going to write excellent code?

Come online in IRC (irc.quakenet.org #lix) tomorrow to find out!

-- Simon
#211
Edit: This post has a confusing description. I have a better test case in answer #2.

NL 1.43-D on Nepsterlems 1.1.

The attached Replays are for Nepsterlems, 3rd rank, level 4, The Block-Store. *-06-54.lrb is a manual save of a solution, and *-07-00.lrb is an automatic save. The manual replay (06-54) plays back the solution as I want it.

I use the option that supresses skill selections.

Expected: The autosaved replay plays back the same solution.

Observed: The autosaved replay (07-00) seems to be empty. No red R, no replayed assignments in that one. See next post.

-- Simon
#212
NeoLemmix Main / Default keys
March 07, 2016, 07:46:33 AM
Brain dump from IRC yesterday.

Specific to NL and Icho:
  • Icho doesn't use all the functionality.
  • Icho uses the default layout.
  • Icho uses the mouse to select skills, RR, nuke.
  • Icho uses the keyboard to pause, and for everything that lacks a button.
  • Icho likes how his common keys are memorable: [P] is pause, [Num-Minus] goes back 1 second, [B] goes back, [N] is next frame.
  • Icho has played several other games that, like NL, pause on [P].
  • Icho doesn't care if he has to reach over half of the keyboard for [Num-Minus].
Specific to NL:
  • NL lacks buttons for core functionality, thus demands key memorization.
  • Some defaults match L1's hardcoded bindings.
  • Some defaults match a convention from L2/L3/L3D: [P] is pause.
  • Some defaults violate a convention from L2/L3/L3D: [Enter] is fast-forward in all of these games. Yet fast-forward in NL is [F].
  • Some defaults are on associable symbols.
  • Some defaults are on whatever symbol happens to lie next on Qwerty to related functions: Savestate is [Enter], and load-state is [Backspace].
  • There is a reason for every default binding in NL. But there is no overarching reason that governs all defaults.
Specific to Lemmings:
Random usability finding:
-- Simon
#213
Lix Main / Steel decoration: steel or earth?
March 05, 2016, 11:14:14 AM
See also: 2021 NL thread: Moss-on-steel decoration for L1 conversions




Hi folks,

Here's a violent scene from Steel Works.



The implosion clears the destructible moss.

Lix recognizes earth tiles and steel tiles. Whatever tile gets to draw the topmost pixel determines whether a pixel is steel or earth. Neolemmix calls this behavior "regular autosteel".



The leftmost image displays two purple tiles. The top part is steel, the bottom part is destructible earth.

The purple tiles are meant as steel decoration. The top tile should be laid over a steel block, as we see in the rightmost image. That produces a cleanly-shaven steel block on explosion. To get this behavior in Lix, it's necessary to make the top purple tile steel.

The purple steel tile should not decorate earth, or appear out in the open like on the leftmost image. These uses lead to the irritating middle image.

Opinions please!

I will post my own opinion later, along with design questions.

-- Simon
#214
Icho and I have have looked into the joystick crash on Windows. This bug is very hard to trigger, we've hit it only once. Key ingredients, as Clam and Nepster have suggested, are turbo-fast-forward, then framestepping back.

Theory: I don't run the D garbage collection (GC) during the game, only after each level. Automatic GC would kick in when RAM is scarce, which doesn't happen during play. But maybe VRAM gets scarce? This doesn't trigger the automatic GC, because RAM is not yet full. Yet somehow, we might get bad VRAM bitmaps, even though A5 always returns meaningful pointers on bitmap creation.

Therefore: From 0.2.33 on, I'm forcing the GC to run during play, whenever old savestates aren't needed anymore. GC'ing frees the savestates' RAM and VRAM. Let's see whether you can repro the crash still. When you framestep back in large jumps, holding down the button, this can make the GC run every frame. Let's see how much of a performance hit you take.

Get 0.2.33. You don't have to test immediately. But please report the crash again, should it occur from now on.

-- Simon
#215
Site Discussion / Concise topic titles!
February 26, 2016, 05:55:40 AM
Good topic titles

Topic titles are extremely important. Cut all fluff! Or replace it with meaningful information. Here are some worrisome topic titles, along with suggestions for improvement.

The X topic
X

My X topic
X
username tries X

X doesn't work
X fails to Y

X on my computer
X on Windows 10

The NEW X!
X
X version 2.3.45
X revamped for 2016
X is now hosted by Y

Observe how it's always correct to start the topic title with the most important word.

That's how we arrive at this suggestion:

[BUG] [PLAYER] X does Y, expected Z
X does Y, expected Z [bug] [player]

But I don't feel as strongly about changes in such a standard.

Don't name stuff "new"

The example The NEW X! is particularly bad, because it outdates quicker than you think. Your postings are visible for the years to come. When has it been new? If you feel it's so important that it's new, add a date. The year alone is enough!

Files should never have "new" in their name.  When you have mystuff.xyz and you begin producing backup/mystuff-new-backup-2.xyz -- immediately download git. Use dates or version control.

Backing up is to ensure access to a recent version, protecting against unwanted data loss.
Version control is to ensure access to an old version, protecting against wanted changes.

-- Simon
#216
Non-Lemmings Gaming / Start-to-Crate
February 18, 2016, 08:40:46 PM
"All games contain crates, therefore all games can be judged empirically on those crates.

Games can be rated and compared based on the shortest amount of time it takes a player to reach the first crate, which represents the point where the developers ran out of ideas."


Exact rules to determine start-to-crate, including penalties.

How well does Lix do on the test? Here's a screenshot from the very first level, without scrolling:



0 seconds until the first crate is visible
-2 seconds due to penalty #1: crate is on fire
= -2

This sucks pretty bad, I consider it a design bug. :>

-- Simon
#217
Lix Main / __ bot relays only Lix to #lix
February 16, 2016, 06:46:22 PM
Hi,

we have separated the IRC channels #lix and #neolemmix. There is interesting discussion about both games, and some of us already sit in both channels. namida is happy with this separation, which is very important to me.

Current solution:

We're relaying this subset of all boards to #lix. We're relaying posts as notifications, not as messages.

Old first post:

Mindless's bot __ is relaying Lemmingsforums posts as follows: The Lix board is relayed to #lix, and everything else is relayed to #neolemmix.

Proxima wasn't happy about this change, because he relies on #lix for seeing new LF posts. On the other hand, I like the reduced bloat in the #lix channel logs, and Ramond is annoyed by any bot activity. What's your stance?

Furthermore, __ is now sending notifications, not messages. Messages are what people send when they type text and send it. IRC clients treat messages as more important than notifications. Notifications are about as important as joins/leaves of other users. Notifications aren't logged in the Nordicbots logs -- very good.

Alternatives for automatic notification about the Lix-unrelated content:

  • Use the forum's news feed (RSS, Atom).
  • Sit in both IRC channels, #lix and #neolemmix.
  • Ask Mindless to go back to relaying all posts to #lix, as notifications.
  • Ask Mindless to relay the Lix board, and all engine-independent boards, as notifications.
The forum's news feed needs a standalone program. [A modern browser is enough. >_>] If you don't use feeds for any other website, it's strange to install an extra tool to run in the background.

Since we have many posts per day, I've configured my feed reader to download the recent 60 posts every 20 minutes. You can configure the time in the program, and the number of posts in the feed URL:
http://www.lemmingsforums.net/index.php?type=rss;action=.xml;limit=60

-- Simon
#218
v1.42.

How to reproduce & what we observe:

  • I use these options: Ignore replay skill selection = on, one-click highlighting = off. Haven't tested other options.
  • Assign digger to lem 0 for update n.
  • Framestep back.
  • Highlight lem 1.
  • Highlight-assign builder for update m < n.
    • Observe: Lem 1 begins building in update m.
    • Observe: Replay marker (red R) is still in the panel.
    • Observe: Lem 0 begins digging in update n.
  • Restart level.
    • Observe: No builder assignment in frame m.
    • Observe: Digger assignment in frame n.
Expected instead: Highlight-assignment cancels the replay. Highlight-assignment is then written into the replay. The red R is not visible after the highlight-assignment anymore. After restarting, the highlight-assignment is replayed. The digger assignment is not replayed, because it got erased upon the highlight-assignment.

-- Simon
#219
BitBucket: https://bitbucket.org/namida42/neolemmixplayer/issues/40/left-click-advances-frame-before-updating

Status: This appears to be two different things being reported together:

1. Left-click cancels replay *and* advances a frame. This is very unlikely to be changed; as there are keys for both functions alone (C to cancel replay without frame advance; N to advance frame without replay cancel; assuming the user hasn't re-customized them).

2. When using said left-click, a skill assignment in the replay is prioritized over one the user tried to assign with the given left-click. This is more likely to be changed.




Steps to reproduce:

  • Have assignment to lemming Y coming up in the replay that are assigned at the beginning of update n+1.
  • Be in update n.
  • Hover over a lemming X different from Y.
  • Click to assign to X.
Computer does:

  • Physics advance from n to n+1.
  • Queued assignment to Y is replayed.
  • Queued actions in n+2, n+3, ..., are deleted from the replay.
  • No assignment to X.
Expected instead:

  • Queued actions in n+1, n+2, ..., are deleted from the replay.
  • Physics advance from n to n+1.
  • Assignment to X takes place.
  • No assignment to Y.
Reason: When I click a lemming, it should receive an assignment. This should not depend on whether there's an assignment queued for the very next update. During frame n, I don't see yet whether anything is queued for n+1.

-- Simon
#220
Lix Main / Better singleplayer browser
February 12, 2016, 08:17:27 PM
Hi,

we had a little discussion on IRC about how the singleplayer browser should behave. I'm not content with the small preview, and Proxima is not content with the small area for level authors' names.



Here's a first sketch. Criticize, and dump more ideas here.

-- Simon