Simon blogs

Started by Simon, October 18, 2015, 06:05:44 AM

Previous topic - Next topic

0 Members and 4 Guests are viewing this topic.

grams88

Mancala is a really good game. I first came across this game in hoyle board games but it got removed from the hoyle games in future series. There's a game called rummy squares in hoyle games which is probably technically rummikub an interesting little game. You have to get rid of all your tiles to win this one.

Rummikub itself actually brings up a certain debate, now the debate is how long can you have for your turn. Only reason it brings up this is because the longer you have for your turn you have a better chance of clearing your tiles I feel.

Have you tried Rummikub yourself Simon? It's a great game I feel.

Simon

#211
Quote from: mobiusPit. Which is a turnless game that sort of resembles stock market transactions. THere are different types of cards; "wheat, gold, oil, sugar, etc." The goal is to trade cards until you're entire hand is composed of just one type.

Again vastly different from Mombasa in design, the only common feature seems to be that both games have cards.

But yes, Pit is excellent. Near-perfect simplicity, and it takes cunning to track dangerous trades. I lack a dedicated Pit deck, but I've played Pit several times with two bridge decks: Use all 8 tens, all 8 nines, all 8 eights, ..., until you have one octet per player. No wild cards. The winner scores as many points as printed on his octet.

Quote from: grams88Have you tried Rummikub yourself Simon? It's a great game I feel.

I remember reading the rules of Rummikub, it's a rummy variant where everybody can rearrange any meld.

I enjoy Japanese Mahjong, it's the closest rummy-like that I play. Sadly, rules are so fiddly that it makes no sense to learn Japanese Mahjong unless one will play semi-frequently. Some interesting decisions, most importantly in the balance of offense and defense: You must discard one tile at end of turn, and if your discard completes somebody's hand, you pay the hand with your own points. Each player's discards remain open information. Still considerable luck.




Some hard problems in game design.

Starting positions/order. Lix has no randomness except for the shuffling of player positions at the beginning of a match. The server shuffles and transmits the shuffle in the start-game packet.

Chess colors are distributed at random, too, but at least tournament organizers will balance the number of times you get white or black throughout the tournament. Same for Go tournaments, and, in addition, the second player gets a compensation score bonus. Even Caylus, a boardgame for 2-5 players, shuffles the player order, pays compensation money to the later-positioned players, and has no other randomness.

In Bowling, every player plays 10 frames, and players alternate between frames. First player is typically random. You cannot affect the ball or pins of other players. Nonetheless, it is advantageous to go last: In the final frame, the last player may choose to throw straight to guarantee hitting some pins, or he may choose a more techniqueful, but riskier curveball to strike and get bonus throws.

Hmm, I said that you cannot affect other players in Bowling. Well. We were bowling recently with IchoTolot. Simon's ball knocks a pin backwards on the lane. On Forestidia's turn, this stray pin deflects her good ball into the gutter, then flies itself into the opposite gutter. On Simon's next turn, the stray pin in the gutter kicks his gutterball back on the lane, leading to some pins getting knocked over.

Some games have simultaneous play, starting position doesn't matter then. Those games quickly become physical and have other cans of worms that require de-worming.

Resigning with ≥ 3 players. With many players, if you leave mid-game, it will affect the other players' relative positional values and winning chances. Few games handle this gracefully. If allowed at all -- and computer games must allow for ragequits and network failure -- it's usually implemented as if the resigner defaulted on every decision. E.g., resigner's units sit around in real-time strategy games, resigner always discards the recently drawn tile in Mahjong.

Two-player games are not affected, the opponent wins immediately (Chess, Go, two-player Magic). Two-team games are also not affected: If all information is open anyway, the teammates may control the resigner's pieces (Axis & Allies, Scotland Yard); if some information is hidden, the resigner's opponents win immediately.

-- Simon

Simon

Backwards for scrutiny

If you want to copy a drawing, there is the upside-down method: Turn the source image upside down, then copy it, then turn both source and copy right side up.

The idea is that the upside-down source prevents your brain from interpreting what it sees. Thus you will copy all lines and details verbatim. You don't want to interpret, e.g., parts of a face in the source as a nose, then draw a nose guided by your reallife experience about noses, then realize that source nose and copied nose differ considerably in the details.

The same idea works for proofreading text. Read your paragraphs in reverse order. (Within each paragraph, read the words in normal order.) No earlier paragraphs will ever be in your short-term memory, therefore you aren't biased or expecting certain content, thus will stumble over even the subtle mistakes.

-- Simon

Simon

#213


Scotland Yard

A board game for 2 teams from 1983, I have the re-release from 1988. I've played it last week several times: 1v1 with Forestidia, and 2v1 with her and IchoTolot.

One player is Mister X and moves invisibly. Only every 5 turns, he must reveal himself.

All other players form a team of detectives and must catch Mister X by moving one of their 5 pawns on the node where Mister X is currently hidden. You can travel by taxi to the next node, by bus between green nodes, or quickly by underground between red nodes.

Rule clarifications. The rules aren't 100 % clear and differ from edition to edition, thus here are our
rule clarifications.
  • The team of detectives always plays with all 5 detectives. (This probably gives an edge to the detectives, hmm, I'm okay with that, we'll have to see. Split detectives among the players on the detectives' team. In 1v1, one player gets all 5 detectives.)
  • Each detective has a limit of 10 taxi, 8 bus, 4 underground.
  • Mister X starts with 2 double move tokens, as many black tickets as there are detectives, and unlimited taxi, bus, underground. (The physical supply does not limit Mister X's taxi, bus, or underground.)
  • Victory condition for detectives: A detective sits on the same node where Mister X is hidden. This victory condition is checked after every move by Mister X, and after every move by a detective. During a double move, the condition is also checked between the first and second move.
  • Victory condition for Mister X: The detectives have moved after his 24th turn and still haven't won.
  • Detectives get a final turn after Mister X's 24th move.
  • Between double moves, detectives must get a turn. (= You can't spend both double move tokens to perform a triple move.)
  • On their turn, detectives must move to a different node if able. Detectives must move in order. Detectives may move to nodes that were just vacated by earlier-moving detectives. Detectives may not move to a node where another detective is sitting, even if that second detective would move away immediately afterwards.
  • Detectives who cannot move, e.g., by lack of tickets or because all goal nodes are blocked by other detectives, must sit on their current node and will not spend a ticket this turn. Such detectives can still collide with Mister X.
  • On his turn, Mister X must move to a different node. (He is always able to move due to his unlimited ticket supply.) He might be forced to move onto a detective and thus lose.
  • There is no taxi connection directly from node 126 to node 132. (This is not 100 % clear from the map photo above.)
  • The following optional rule is not allowed: Mister X may choose to reveal himself after a non-revealing move and, in return, take from each detective a ticket of his choice.

House rule. Mr. X draws 3 starting locations, not 1. He secretly picks one of the 3 and returns the remaining 2. Then he plays his first move. Reason: To have a reasonable chance against 5 detectives, Mr. X needs a good starting location.

We had quality fun. We denoted by "wühlen" (burrowing, digging around, uprooting the ground with your nose to find food) Mister X's tendency to hide in a nest of yellow taxi-only nodes (away from green/red bus/underground nodes). Wühlen forces the detectives to either get stuck here, too, or loosely surround the nest, delaying capture attempts.

Some detectives would deliberately "counter-wühl", even speculatively, when they had no good nodes.

When IchoTolot deduced that I, as Mister X, would eventually have to come by a certain path, he quoted Schiller's William Tell: Durch diese hohle Gasse muss er kommen...

Detectives' strategy seems to be to force Mister X to use a double move. Then, detectives can retreat to fast-moving nodes (underground nodes, good bus nodes) and wait for Mister X's next revealing. Your chance to capture Mister X increases dramatically after he runs out of double moves.

Lucki, our Lix package maintainer for Arch Linux, likes Scotland Yard too. :lix-cool:

<Lucki> great game
<SimonN> Hnn
<Lucki> londonlaw is the game in python, sadly abandoned: https://github.com/anyc/londonlaw
<SimonN> Hah. The screenshot even shows no taxi connection between 132 and 126. The out-of-box map is not perfectly clear and we ruled that there is no connection here, glad that the app agrees. And 5 detectives.


-- Simon

607

I'm pretty sure we've got Scotland Yard, but haven't actually ever played it since we got it. I should remember to try in Summer, using your rule clarifications.

607

We played it yesterday, following our edition's rules (from 1996, Ravensburger). We did a 2v1, and yeah, it would have probably been more fun with 5 detectives, although it might have been very hard for me in the beginning. What I don't like is that as the game progresses, the chance of Mr. X being caught decreases instead of increasing, which would seem more fun. At some point we decided that I would drop the 2x cards, as if I'd use them the detectives would have no chance to win. Without those, it eventually boiled down to a turn with a 50% chance of being caught, and of winning (because the detectives were running out of tickets).

Simon

#216
Quote from: 607 on May 26, 2019, 09:42:45 AM
We played it yesterday, following our edition's rules (from 1996, Ravensburger). We did a 2v1, and yeah, it would have probably been more fun with 5 detectives, although it might have been very hard for me in the beginning.

Yeah, 5 detectives feels best. Then you can cast a loose net and tighten it slowly, and this feels most rewarding.

With 5 detectives, there is a small chance that Mister X draws a terrible starting position that forces him to double-move before even the first reveal. It's okay to scrap such a game and reshuffle with the same player as Mister X. Or maybe let Mister X choose from 2 or 3 starting tiles after he sees where the detectives start?

QuoteI would drop the 2x cards, as if I'd use them the detectives would have no chance to win. Without those, it eventually boiled down to a turn with a 50% chance of being caught, and of winning (because the detectives were running out of tickets).

With 4 detectives, I felt the same: The detectives will prefer 50:50 gambles to capture instead of netting Mister X.

QuoteWhat I don't like is that as the game progresses, the chance of Mr. X being caught decreases instead of increasing, which would seem more fun.

Right, this is a problem. Especially with 4 detectives, breaking through the net mid-game is an instant winning position, and detectives should then resign. Games really should start with tight, interesting options (Scotland Yard has this at least), and become even more interesting during play, not less interesting.

It's less prevalent with 5 detectives, where Mister X needs the double moves merely to stay even.

Glad to see your insights!

-- Simon

Simon

#217
Icho's dice tray

In April, I introduced IchoTolot to the Axis & Allies boardgames. The spark lit immediately, and Icho bought Axis & Allies Anniversary for himself. Excellent choice.

Game tl;dr: Exactly two teams. No hidden information. Strategic piece movement on a map, combat resolution by dice. Lasts from 4 hours to over 12 hours. Heavy compared to most board games, light compared to wargames.



IchoTolot is about to punch cardboard counters from his freshly purchased game



Setup finished, happy Simon (right) looking forward to play



Uwe (reallife friend) and IchoTolot rolling a naval battle

The round wooden dice tray in the pictures is my own acquisition, it doesn't ship with any A&A. But it's a great accessory. You can roll over 10 dice at the same time, and they won't spill on the map or the floor.

Icho wanted a nice tray for himself, too, but there were no good ones at our local game store, and Icho didn't want to pay 30 euros for a nice tray online. I suggested: "A dice tray might be a good do-it-yourself project.", but Icho said: "Sorry, I've got two left hands."

Well, Icho's birthday is coming up in the next months, and occasionally I get an itch for woodworking. In secret, I drove to the hardware store, retracted into my creative cave, and gave him this at yesterday's game night:



Icho's early birthday gift in action



Happy Icho (right) showing the tray's back

The tray is the green area. The black area is a holding pit for unused dice that aren't thrown in the current battle. Reason: It's standard in A&A to provide players with many extra dice, then, even in large battles, you can roll for all firing units at the same time and needn't track hits in your head.

In my round dice tray (see photo with Uwe), we would shove unused dice to the walls of the tray. But that's far from perfect, rolled dice would still get confused with unused dice in the round tray.

As a bonus, Icho's tray fits exactly into a hollow area in his game box. From our first game night, I remembered that his box had some spare capacity, and looked up the exact dimensions of the box online before making the tray.

Icho really liked his new tray, that was highly satisfying to see.

Quote Icho: It's late at night and game may be decided already, but continuing is too much fun...

-- Simon

Simon

#218
Before teaching boardgames

Situation: You schedule a game night, and decide in advance which boardgame to play. Some invitees already know how to play. Other invitees don't know any rules, but would like to learn and participate.

The problem: How to teach rules to the newcomers, such that
a) any lecturing is short enough so newbs remember everything important,
b) any lecturing is short enough so that regulars will not be bored
c) newbs with a thirst for knowing every corner-case resolution are nonetheless satisfied.

Current approach. In the invitational email,
  • I announce that I will explain most of the rules at the start,
  • I announce that I will explain corner cases during play before they become strategically relevant,
  • I link to the full rulebook (many publishers offer rulebooks as PDF for free) and tutorial videos on Youtube (even tolerable videos may have minor issues), but make clear that studying these materials is optional.
When I'm invited to play other people's games that I don't know, I like very much to study the rules in advance. I like to get a detailed feel for the mechanics. It's only courteous to give everybody else the same chance.

Most players won't read anything ahead of time, it's still normal to introduce comprehensively at game night. Teaching rules live to the interested complete newbie is thus very important, and a separate problem.

-- Simon

Simon

#219
g++ warnings in C++ Lix

(Long and technical, feel free to pass on this one, future posts will be about games again.)

C++ Lix is obsolete since 2015 or 2016. I dug out and built C++ Lix with g++ 9.1: Install Allegro 4 and enet 1.3, run make, everything will still build smoothly without errors, like 2015 when I obsoleted C++ Lix in favor of D Lix 0.2.

Between 2015 and 2019, the g++ compiler found many new places for warnings though. I like warnings, it's good to compile with most warnings enabled. Example warnings:





std::ostream& operator << (std::ostream& o, const Date& d)
{
    if (d.year == 0) o << "000";
                                 o << d.year   << '-';
    if (d.month  < 10) o << '0'; o << d.month  << '-';
    if (d.day    < 10) o << '0'; o << d.day    << ' ';
    if (d.hour   < 10) o << '0'; o << d.hour   << ':';
    if (d.minute < 10) o << '0'; o << d.minute << ':';
    if (d.second < 10) o << '0'; o << d.second;
    return o;
}


Compiler complains about bad coding style, each rightmost statement looks like it's dependant on the if, even though it's unconditional. Only the middle statement is dependant on the if. There is no bug here, but the compiler is right, this is problematic code.

As a kid Five years ago, I liked these nice horizontal alignments with lots of space characters. But horizontal alignment is rubbish, it's bad for version control because of christmas-light-style dependencies, one line goes out, everything goes out and has to be re-spaced. Don't do it.

The function should be rewritten anyway, this is typical newbie code when one doesn't understand formatted output of the language. I accept though that there is a decision of taste/coding convention left behind because it's C++: The ostream formatting flags affect global state and some shun that. Thus we reach for good old printf:


std::ostream& operator << (std::ostream& o, const Date& d)
{
    char buf[20];
    snprintf(buf, sizeof(buf), "%04d-%02d-%02d %02d:%02d:%02d",
        d.year, d.month, d.day, d.hour, d.minute, d.second);
    o << buf;
    return o;
}


Shorter, and no branching. I'm merely unhappy about hardcoding the length of the buffer somewhere. This should really be left to metaprogramming: Figure out how long the buffer buf must be from the format string, but I don't know how one would do that.




In C++03, you had the rule of three: When you have a custom copy constructor, a nontrivial destructor, or a custom assignment operator, you probably need all three.

Sometimes, I have assignment operators that immediately exit in case of self-assignment a = a, and perform the default member-wise assignment when &a != &b in a = b;. Since copy construction can't happen as a self-assignment (you can't write A a(a);), I thought that I wouldn't need a copy constructor.

g++ 9.1 now warns that, when I define an assignment operator, the lack of a copy constructor is deprecated. Not even a courtesy compiler warning, but deprecated in the language.

The warning points us to a design mistake elsewhere in C++ Lix: If my fear of self-assignment is really justified, it must be because one member field needs the guarding. That class needs to be examined for rule of three then.

-- Simon

Simon

#220
Video examination

I need a precise video viewer: Must allow frame-by-frame jumps. Must always display at least (speed of video in frames per second, and the number of the current frame) or (position in milliseconds). Would be nice if it always shows the previous/next frame too.

Use case is speedrun video analysis and exact retiming of recordings.

I know these tools exist, but I haven't found one yet. All you ever find is extravagant video editing suites that crash, consume RAM, or aren't free-and-open-source. I don't want to edit the video; if I ever want to cut video, then ffmpeg on the command line suffices and won't crash.

Amazing how such a seemingly-simple tool (the only hard requirement: it gives me precise numbers) is so hard to find.




Instructions, easier, simpler, ...

We have this topic: How to run Lemmings 3 in Dosbox. Post 1 is the instructions. Post 2 is "Here are easier instructions".

That's terrible. If stuff is introduced with "this is easier", then it's not easy, but it's complicated. If it were easy, the matter would speak for its own easiness, you wouldn't have to say that it's easy.

The topic should explain only one of the two approaches, either L3 CD and L3 hdd directory merged, or separate. With example paths instead of the-full-path-of-your-dosgamesdir. The instructions are for newbs, newbs fear mentally substituting variables in instructions. "Or" is the enemy of simplicity. Examples examples examples!

Another example of complexity that is described as simple: The Murmur (Mumble server) guide to set ACLs (access control lists). This is a massive section for a single, clear task: Make a channel that only certain people can get in. There are two long itemized lists, with several explanations of the non-self-explaining Mumble ACL UI. This long list must be this long (it's is a walkthrough and must be complete because the UI on its own won't help you), but it's riddled with these quotes:
  • "you must have Advanced config checked at Configure -> Settings in order to see the ACL tab for a channel."
  • "Many people have complained about the complexity of ACLs - that they are complicated, hard, and cumbersome. They are none of these if used correctly."
  • "But now you want to make a channel that only certain people can get in. Very simple."
  • "Here is where it appears to become complicated, when in fact it is not at all."
  • "Just click "Add [...]"
No, if it were simple and easy, the instructions would be shorter. Beautiful cognitive dissonance of the writer.

Apart from this writing style, these instructions are very good, complete, and get the task done.

-- Simon

ccexplore

Quote from: Simon on June 27, 2019, 09:28:51 AMI need a precise video viewer: <snip>

All you ever find is extravagant video editing suites that crash, consume RAM, or aren't free-and-open-source. I don't want to edit the video; if I ever want to cut video, then ffmpeg on the command line suffices and won't crash.

Amazing how such a seemingly-simple tool (the only hard requirement: it gives me precise numbers) is so hard to find.

Hmm, wonder if VLC has this kind of feature.  Have you asked around speedrunning communities to see what kind of tools they've been using for this?

I can imagine this being a little hard to search for actually, it's not really the kind of feature you'd typically highlight on a product description page, more like a buried setting in options maybe.

I actually wonder if maybe you can just slap together something quick(ish) using HTML5 video element and JavaScript, and end up being able to achieve what you need inside a web browser.  I'm pretty sure you can get at least millisecond-precision playback position with HTML5 video?  Along that line of thinking, you could also try modifying an open-source media player that you are able to compile yourself as-is.

Simon

#222
Quote from: ccexplore on June 30, 2019, 10:10:28 AM
wonder if VLC has this kind of feature.

VLC shows only seconds, and can only framestep forward. With the plugin "Jump to Time Previous Frame", you get better control and milliseconds, but still no hotkey to framestep backwards, and the plugin often fails after VLC updates.

I'll try Avidemux next. I got this idea after searching in particular for methods to retime speedrunning videos (thus, thanks to ccexplore for the hint), not merely for precise video tools. Haven't tried Avidemux yet, but it's free software, and readily buildable from the Arch user repository.




Heat

It's too hot again, it's too hot all the way, oh what fun it is to rant in a one-man oven sleigh.

Buy a plastic tub, roughly 40 x 40 x 60 cm. I got mine at the hardware store for 8 euros. Fill tub with cold water, place under desk, then rest both feet in the tub. Ideally, your ankles are sunken for optimal circulation of the water's cooling through your entire body. If the tub is too shallow, lay your feet at an angle to sink your ankles.

The tub should have solid plastic walls, no air holes. The tub's handle holes are a necessary evil, but that's okay, the tub will hold a reasonable amount of water still.



-- Simon

namida

Heat really bugs me. It's winter now here, so not a problem at the moment, but I'll definitely try that out come summer.
My projects
2D Lemmings: NeoLemmix (engine) | Lemmings Plus Series (level packs) | Doomsday Lemmings (level pack)
3D Lemmings: Loap (engine) | L3DEdit (level / graphics editor) | L3DUtils (replay / etc utility) | Lemmings Plus 3D (level pack)
Non-Lemmings: Commander Keen: Galaxy Reimagined (a Commander Keen fangame)

ccexplore

Quote from: Simon on June 30, 2019, 09:48:34 PMVLC shows only seconds, and can only framestep forward.

Well as you can imagine, framestepping for most lossy video compression algorithms is a lot like managing game physics in Lemmings or Lix.  Advancing from current frame forward to next frame is of course totally supported because that's the normal flow of things anyway.  Whereas stepping backwards actually implies first stepping back a larger amount of time backwards, then advance forward one-by-one until reaching the target time; it's not otherwise possible to get back the previous frame from the current frame.  In Lemmings/Lix the backward jump would be to a previous internal checkpoint; the equivalent in video is called a "key frame", a frame which can be decompressed on its own without relying on data from previous frames.  Similarly, a seek to any position requires similar handling, first going to a key frame, then advance forward to the actual desired point.

With that in mind, it's not surprising that oftentimes seek is implemented in a less precise fashion, that merely jumps to the nearest key frame (even though it's technically not the right time you want to seek to), then just stalls (no display of new frames) until the playback time reaches the next key frame (so now what's displayed is finally back in sync with the playback time), at which point normal flow resumes thereafter.  For the kind of uses "your grandma" needs (eg. seek forward past some commercials, or seek backward to get back to something missed due to distractions), such an imprecise seek is nonetheless usually good enough.  So yeah, it might be harder to find support for backward framestepping.