Christmas mission 2025

It's time for the obligatory annual Christmas Mission post!

This year it was a grimdark Christmas, because the mission theme was Warhammer 40,000.  Well, sort of - the mission was another Murdle, but this time set at a Warhammer tournament.  The best player has been found dead and it was my son's job to figure out who did it, how, and why.  The suspects included the game store owner, a delusional player, an overly serious cosplayer, and someone who is totally not a Tyranid in a human suit.

The format was the same as usual.  I printed out an introduction to put in the Christmas tree and hid the clues in various places around the house, each with an encoded message leading to the next.  I toned the codes down a little bit this year.  Last year, he got a little frustrated with some of them, which makes the whole thing less fun than it should be.

For some of them, I stayed with what we did last year and used the revolutionary-era style decoder disk that we got when we went to Gettysburg a few years ago.  It's just a little disk with a rotating center and the alphabet written on both parts, so you just turn it to two corresponding values to get a simple substitution cypher.  Nothing fancy.

For some of the other clues, I got a little creative-ish and introduced him to the concept of typing things out on a non-smart phone.  You know, the good old "code" of typing out numbers on your 12-key phone to spell words.  Thus we got codes like "7 777 444 66 8 33 777".  I did have to add the spaces between letters because otherwise it's ambiguous whether, for example, "7777" is supposed to be "S", "PR", "QQ" (unlikely), or "RP".  I suppose I could have made him figure it out, but again, I didn't want to turn it into an ordeal and suck all the fun out of it.

To go with the "phone" theme, I formatted some of the clues in the for of a text conversation.  Again, nothing fancy - just a couple of back-and-forth messages each.  Just enough to add a little flavor.  

As we did last year, my wife and I teamed up on it.  We came up with the plot together.  She wrote the puzzle and came up with the clues for it.  I did the codes and distributed the clues.  All in all, it worked out pretty well and our son was happy enough with it.

Here's a PDF of the full mission, if you're interested.  I always break it up into multiple pages so he can switch back and forth, and cut up the clues into partial sheets.  So while it might be weird in digital form, it works in analog.

And while I'm at it, here's the little Python script I wrote to encode the clues for me.  And by "wrote", I mean I let the Copilot plugin for Vim write it.  Or at least it wrote the functions that do all the actual work.  And I didn't really even need to prompt it - the autocomplete feature pretty much just generated it all automatically.  Nice!

Legends Ultimate Arcade Review

As promised in my last post, this is my review of the AtGames Legends Ultimate (ALU) cabinet.  This is based on my setup experience plus about two and a half months of actually using the cabinet.

Assembly and setup

Setting up the cabinet was a relatively painless experience.  The assembly in particular was fairly easy.  The cabinet comes in one box and the only tools required are screwdrivers.  All you really need to do is assemble the base, which is essentially an empty box.  The top of the cabinet, which contains the monitor and all the electronics,  comes pre-assembled, as does the control panel.  So the assembly process is essentially:

  1. Put together the box for the base.
  2. Put the monitor box on top of that.
  3. Put the control panel on top of the base as well.
  4. Plug everything in.
  5. Screw everything down.

That's it.  There really wasn't much to it.  This was simpler than most pieces of furniture I've assembled.

The more annoying part was the software setup.  This wasn't difficult, but it involved connecting the cabinet to my WiFi and creating an account with AtGames, both of which are awkward without having an actual keyboard to work with.  The account signup was also a little weird in that I initially wasn't sure that it actually worked.  It did, so I think it was just a UI issue, but it was still a bit strange.  But for the most part, it was no big deal - just going through the setup wizard.

One thing that's worth noting is that the Legends Ultimate doesn't actually take up as much room as you might think.  I can stand at the controls, stick my arm out, and reach the back of the cabinet.  Since it's using a modern LCD display, rather than a vintage CRT, it's fairly compact.  That means it can be tucked into a nook or corner with relative ease and not end up dominating an entire room.  

Navigation and UI

The alphabetical carousel browser

The ALU has a...quirky UI.  I assume that the reason for this is so that they can re-use it across products.  While the ALU has a trackball and spinners in addition to the joystick and buttons, the ALU Mini (a smaller, single-player version of the ALU) does not.  So the UI is designed to be used with just the joystick and buttons.

The UI itself looks nice enough, and has configurable background colors and music.  The navigation is odd, though.  It uses a two-level carousel model.  The main display area has a carousel of games/options that you move through to the left or right using the joystick.  You can "zoom out" (with the Z button) to a text-based carousel that lets you scroll horizontally through the alphabet and then vertically between the available options for each letter.  This part is not super intuitive, but it's reasonable and it works.

Below the main carousel is a menu bar that lets you navigate the various sections of the UI.  This includes things like the built-in games section, the ArcadeNet section, the settings section, etc.  You use up and down to switch between the main carousel and menu bar.  The menu bar also has sub-menus that are accessed by pressing the Y button on the appropriate item.  To get back, you have to go back to that same item in the sub-menu and press Y again.  It's not that bad once you get used to it, but it's definitely a weird and unintuitive user experience.

Personally, I would have loved to see AtGames leverage the trackball to allow a more traditional point-and-click type of interface.  Maybe you could even facilitate scrolling with the spinners, who knows?  It's just kind of tedious to have to scroll through all the options every time.

Built-in games

AtGames advertises the Legends Ultimate as coming with 300 games.  However, as with any collection of 300 games, not all of them are good.  In fact, in this case there are some that you would just never want to play, like most of the Atari 2600 games.  (If you're too young to remember it, the Atari 2600 wasn't exactly great the first time around.  It was better than nothing, but it couldn't hold a candle to the arcade games of the time.)  And of course there are also plenty of arcade games in the mix that are stinkers.

And I should also mention that the built-in game selection contains a few duplicates.  By that, I mean it has both the arcade version and the Atari 2600 version of some games.  Which, of course, is pointless, because if you have the arcade version, why in God's name would you ever want to play the Atari 2600 version?  So the "300 games" claim is true, but a little misleading.

It's also worth noting that the game selection seems to vary.  It's not clear to me if that's due to release date or if the Sam's Club version just has different games.  But I've seen several variations of game lists, and I know that my unit did not include some of the games listed in some of them.  It did include all of the games that were shown on the cabinet, though.  It's just not clear how much you can count on any specific list.

The game selection - actually not bad

The favorites screen showing Burger Time

That said, it's not a bad selection.  There are a handful of "big name" classics that I was familiar with, including Centipede, Asteroids, Missile Command, Elevator Action, and Burger Time (one of my favorites).  But I've also discovered a number of games in the mix that I'd never heard of, but which are actually pretty decent (Boogie Wings springs to mind).  It takes a while to explore them, and I haven't even gotten to all of them, but it's a decent variety and there are definitely some fun games in there.  I'd guesstimate that most people can probably find at least a dozen games they like, probably more if you're adventurous.

I also found several games games for platforms other than the Atari 2600 collection.  For instance, there were a handful of NES games including R.C. Pro-Am and Battletoads.  There were also a few that appeared to be for the NeoGeo or possibly Sega Genesis  There doesn't appear to be any pattern to the choices, at least that I could see.  I assume it's just "what was affordable to license".  

Incidentally, the "extra" controls are a nice addition for some games.  It's very cool to be able to play Missile Command with an actual trackball.  Likewise, playing Tempest with the spinner is a nice touch.  And, of course, I mentioned the pinball buttons in the last post.

Speaking of which, my version of the ALU came with four built-in pinball games.  They're all from the "Natural History" series, which is apparently an AtGames original.  I'll have more to say about pinball below, but these are actually quite good.  The only problem is that they don't always run.  Sometimes the work fine, and sometimes they crash, trigger a "no input" screen, and eventually restart the unit.  Apparently that is a known issue, or was at one point - I seem to recall mention of it in some firmware release notes, but it still happens.  I find this very disappointing.

ArcadeNet service

In addition to the built-in games, AtGames has their ArcadeNet service, which allows you to download additional games.  Their website claims that there is both a free and paid tier for this service.  I got a 2-month free trial with the ALU, which recently expired, so I've now seen both.

That said, I'm not really sure what they meant by a "free" tier as described on their webpage.  From what I can tell, that just means you can browse the available titles.  It doesn't seem like you can actually play anything with it.  So maybe that page is just out of date.  (Note: Out-of-date web pages seems to be a pattern for AtGames.)

It's worth noting that the 300 games that come with the Legends Ultimate seems to account for nearly all the games in their library.  When I browse the ArcadeNet games from my ALU, nearly everything is pinball.  There's only a handful of other games available, none of which looked interesting.  And while the ArcadeNet page does have a list of games on it, not all of them seem to be available.  I browsed through some of them and found several (e.g. Metal Slug) that were not preinstalled on my ALU and were not listed for download in the ArcadeNet UI.  So apparently that list is out of date.  (See what I mean about a pattern?)

One of the Zaccaria pinball tables

That said, I actually have downloaded a number of pinball tables from ArcadeNet.  They appear to have most of the tables from their "pinball packs" on there, and I've found them all to be very good.  As I mentioned in the last post, my unit came with the side-mounted pinball buttons (which you wouldn't think makes much difference, but it really does) and I've really been enjoying them.  I particularly like the Zaccaria tables, as they have a nice background ambiance and have some "updated" versions of classic tables with some more modern features.  Some of the tables are a little slow to load, and slow to get back to the menu when you exit, but the play experience is very good.  (Note: if you have the pinball buttons, you'll want to change the "pro mode" setting to "side" to make them work as expected.)  I've occasionally had some slowdowns or stuttering on some tables, but that's pretty rare.  For the most part, they seem to run very smoothly once they're loaded.

However, I did not resubscribe to ArcadeNet when my free trial expired.  While I like the pinball tables, and having the leaderboard integration is cool, the price of $20/month seems high to me given what you get.  And while this page advertises "6 months for $60", which seems more reasonable, the actual purchase page says it's $100 for 6 months or $180 for a year.  (There's that out-of-date info again.)  That comes to $15/month, which is better, but it still seems high.  When you consider that they offer "pinball packs" for $30 or $50 that include between about 4 and 25 tables, the math just doesn't work.  So instead of resubscribing, I just spent $50 on the first Zaccaria pinball pack, which included 26 tables, which should hold me for a while.

Bring Your Own Games

One of the really nice things about the Legends Ultimate is that you're not limited to the AtGames offerings.  They have a "BYOG" feature to "Bring Your Own Games".  There are actually three variations on this, of varying usefulness.  Let's start with the best first.

BYOG - Loading UCE files

This is a fantastic feature.  As mentioned in the last post, the ALU has a couple of USB ports.  You can use these to access external games.  Turns out it's really easy.  All you have to do is get some games packaged in UCE format, load them on a FAT32 formatted flash drive, and stick it in the ALU.  It will pick up the drive and add a "BYOG" item to the system menu where you can access them.  (You might have to run their AddonX utility on it first, I'm not actually sure.)  They don't get all of the bells and whistles that are supported for the built-in games, but they support enough and work just fine.

I don't really know much about what the "UCE format" actually is.  From what I can gather, it seems to be a folder containing various metadata such as images for the UI, the game ROM, and possibly a the MAME core needed to play it.

Much of the documentation I found around this was focused on installing CoinOpsX on the ALU.  CoinOpsX is another MAME front-end for managing and playing your games.  Apparently it used to be available for installation on the ALU from AtGames online store, but at some point they removed it and broke compatibility.  However, it turns out that you don't actually need CoinOpsX to run external games.  It may offer a better UI - I haven't used it, so I can't say - but it is not required, so no need to worry if you can't figure out how to install it.

On-the-go (OTG) mode

The next best option for playing your own games on the ALU is the "on-the-go" mode.  This is essentially just plugging a PC into the ALU.  You just need an HDMI cable for A/V and a USB cable for the controls.  Your PC will detect the control panel as a joystick of some type and the screen as another monitor.

The nice part about this is that it's easy to use and extremely flexible.  Since the ALU effectively becomes a monitor and a controller, you can play pretty much any game your PC can run.  You may have to go into the menu to switch to OTG mode, but it's a pretty simple process.

The less nice part is the controller setup, which I still have not figured out.  To be fair, I haven't put much time into it, but the point is that Windows didn't configure the control deck as transparently as I would have liked.  The nice part is that it picked up the spinners and trackball.  However, the button and joystick mapping didn't work as I'd have hoped.  It turns out that Windows detected the joystick not as the main joystick, but as a POV hat, which is...less than helpful.

You can apparently fix this with a tool called X360CE, which stands for Xbox 360 Controller Emulator.  This allows you to make your joystick mimic an Xbox 360 controller, which nearly any modern game can handle.  However, I have not yet managed to make this work.

Legends Link streaming

The last option is their streaming solution, which was apparently called Legends Link.  I say "was" because this option apparently no longer exists.  However, they have not removed it from their website.  (Again with not keeping things updated.)  Instead, they've left the page with a broken link to the installer and this blatantly broken info box:

2025-07-12T19-15-14-145Z.png

That's right, for the low, low price of "$ monthly", you too can have zero hours of streaming and zero persistent storage!  What a deal!

For what it's worth, I was able to find a version of the Legends Link installer on archive.org.  I tried it out and, as you'd expect, it just flat-out doesn't work.  I put in my info, clicked the "connect", button, and waited forever while it tried in vain to connect to the server.  After a few tried, I gave up.  It's a joke that they still have this on their website and in their marketing material.

Bottom line

Pros

  • Cool cabinet with relatively low profile that's very easy to assemble
  • Good controls, including specialty controls (trackball, spinner, pinball buttons)
  • Reasonable price point (especially from Sam's Club)
  • Decent built-in game selection
  • Easy to expand with additional games
  • Really good selection of pinball games available at reasonable prices

Cons

  • The AtGames website is an unholy mess of bad information
  • Boot-up is slow
  • Game loading/unloading is sometimes slow - usually for pinball (most arcade games are fine)
  • The subscription service is a bit overpriced for what it offers
  • The main navigation UI is serviceable, but a little clunky

Recommendation

Overall, I'm quite happy with my ALU.  It's not perfect, but it offers a good gaming experience, a decent game selection, and enough expandability to fill in the holes.  I would definitely recommend it.  If you have the time, money, and inclination, I'm sure you could easily build a custom MAME cabinet that offers a superior experience.  But if you're looking for a "product" rather than a "project", I think the Legends Ultimate is a good solution.

New toy - AtGames Legends Ultimate Arcade

This year, I got my wife a bigger-than-usual gift for Mother's Day.  It was a vintage topaz ring that matched some earrings I'd gotten her in Mexico several years ago.  It's in a similar style to her engagement ring.

In the spirit of reciprocation, she wanted to get me something nice for Father's Day.  So I suggested a couple of things and let her choose.  She picked the cooler of the options - an AtGames Legends Ultimate Arcade cabinet.

legends-ultimate-large.jpg

I'd been eyeing arcade cabinets for a while.  Of course, I'd considered building a custom MAME cabinet myself, but to be honest, I didn't really want a construction project, just the end result.  I'd also looked at the possibility of just buying a cabinet, but they tend to be a little pricey.  For instance, I'd seen some custom cabinet builders selling just the cabinets (not electronics) for around $1,000.  To be fair, they were very nice cabinets, but that seemed a little much.  Also, I'm not particularly interested in putting together just the electronics either, so it would still be a little bit of a project.  So I wanted to go with something pre-built.

One option that I originally considered was the Arcade 1Up machines.  I'd seen these in the local Walmart and they actually looked pretty nice.  The design was very authentic to old-school arcade machines and they were very reasonably priced, with some of the units being as low as $300.  However, they also aren't full-size, so to be able to play the games standing up, you need to either build or buy a riser for another $60.  They also come with a limited selection of games, usually a dozen or less.  And even if you can mod them to add more, the controls are really only designed for the built-in games, so you're limited in what you can do.

The Legends Ultimate does not have such limitations.  My introduction to this cabinet was actually playing an older version of it at the Strong National Museum of Play.  They have one in the retro arcade that's free to play, and it seemed quite nice.  It had several classics that I enjoy (including Burger Time and Elevator Action) and the controls were very good and flexible enough for a variety of games.

(Correction: After going back and looking closer, it turns out the unit at the museum wasn't from AtGames.  The Strong actually had the Chicago Gaming Company Arcade Legends cabinet.  That system has been discontinued, but it was very similar to the ones produced by AtGames.  When I Googled it, I just put in "arcade legends" and the AtGames website was the top hit, hence my confusion.)

For the record, if you're considering this cabinet, I would recommend getting it from Sam's Club, which is what we did.  When I first looked it up, the list price was around $550.  However, since then it has gone up to $900 on their website.  But when my wife ordered it, Sam's Club was still offering it for $550.  And it seems AtGames has a special deal with Sam's Club to include some extras in their version.  So I got 2 free months of their  premium ArcadeNet service as well as the pinball button attachments that you can see on the side of the cabinet.  I've been enjoying those more than I thought I would.

I'll do a separate post with a review and break-down of my experiences with the Legends Ultimate, but so far I'm enjoying it.  It's got a decent selection of built-in games (they advertise 300 games, which is...technically true), good controls (including a trackball, if you want to play Centipede, and spinners for...I don't know what), and a fairly decent selection UI experience.  It's also expandible, with a very subtle expansion panel in that metal strip between the controllers and the screen.  In fact, you can see that I have a flash drive plugged into that panel.  They have a very nice BYOG (Bring Your Own Games) feature which allows you to load up a drive with games in UCE format, plug it in, and they just show up.

So I'm happy.  I've got a nice selection of vintage arcade games and a cabinet that gives me an actual authentic arcade play experience.  And, while it may not be an authentic design, I think it actually looks pretty cool.  And that counts for something.

Belated Christmas Mission 2024

I'm only about five months late, but I promised my son I'd write a post about this past year's Christmas Mission, so here it is.

This year, the Christmas Mission was a collaborative effort.  My wife had been doing the Murdle puzzle books and our son really got a kick out of them.  If you've not seen them, they're basically logic puzzles, except that each puzzle has a story and the stories all connect to make one big murder mystery.  The stories are also pretty funny, which is part of what appeals to our son.  So this year's mission was a Murdle.  My wife wrote the story and the puzzle.  She also enlisted her friends to make short videos reading the clues.  Each one of them played a different character in the mystery and presented the clues in-character. 

My job was to distribute the clues in various hiding places and to create short encrypted messages leading to the next clue.  I also collected the video files, uploaded them, and created QR codes for them so that our son could scan them with his phone camera and watch the videos.  The messages were encrypted with a simple substitution cypher and I helped walk him though a little frequency analysis to figure out the key.  (All the messages used the same key, because otherwise we would have been there all day.)

Overall, this one was a hit.  Our son enjoyed doing it and he really liked the story.  He thought the videos were really fun, and I think those really made it special.  

I got lazy on the encryption this year and just wrote a short Powershell function to do the work for me:

function encode($data) {
    $code = @{
        'A' = 'U'
        # ...
    }
    $ucInput = $data.ToUpper()
    $output = ''
    foreach ($i in 0 .. ($ucInput.Length - 1)) {
        $letter = $uCInput[$i].ToString()
        $item = $code[$letter]
        if ($item) {
            $output += $item
        } else {
            $output += $letter
        }
    }
    Write-Output $data
    Write-Output $output
    Write-Output " "
}

Here's an export of the puzzle itself.  I took out some of the details and video links, but this has the good stuff, i.e. the story.  Here's the setup, which includes all the clues and people.  I think my wife did a great job with it.

Deductive Logico and his partner Professor Irratino are finally taking a well deserved holiday vacation to the Bermuda Triangle.  As his intern, you have gone to a Christmas charity ball to accept an award on his behalf.  This year’s host is Sir Rulean, heir to a vast shampoo empire fortune. 

Unfortunately, that fortune will go to his next of kin, as the magnate is dead when you arrive at the Grand Hotel.

Logico is relying on you to solve this murder as your first real case!

Follow the clues and fill out the puzzle to find out who did the deed, what weapon they used, where they killed him, and their motive.

The Suspects:

LADY LAVENDER

Sir Rulean’s wife, a self-proclaimed psychic and mystic.  She’s mostly famous for getting every prediction wrong…including those about the sports matches she bets millions on.

5’2” * Brown Eyes * Auburn Hair * Scorpio

MADAME MAGENTA

A savvy businesswoman and sweater enthusiast.  She has the world’s finest collection of argyle cardigans.

5’1” * Brown Eyes * Brown Hair * Capricorn

PROFESSOR PINK

English professor and crazy cat lady, who got lazy a few years back and let her cats type all her scholarly articles.  No one noticed.

5’3” * Blue Eyes * Blonde Hair * Taurus

HENNA HUMAN

Absolutely not three penguins in a trench coat, why would you even ask?

7’2” * Sunglasses * Scarf * Virgos

The Locations:

THE CHRISTMAS TREE

Indoors.  A grand 12 foot Douglas fir in the main foyer of the hotel.  Tastefully decorated, but shedding needles everywhere.

THE KITCHENS

Indoors.  Don’t look too closely at the ingredients for the soup.

THE FIRE PIT

Outdoors.  A great place to cuddle up by the fire and make some s’mores.  Or get rid of a body.

THE PENTHOUSE SUITE

Extremely swanky, and extremely expensive. 

The Weapons:

A SHARPENED CANDY CANE

Light weight, made of sugar.  A beloved holiday treat, great for giving you minty fresh breath or stabbing your enemies.

A POORLY DISGUISED GIFT

Heavy weight, made of resin.  A suspiciously bowling-ball shaped package, wrapped unevenly in lime green paper with a frayed purple ribbon.  Great for knocking down pins, or people.

POISONED CHRISTMAS COOKIE

 Light weight, made of sugar and poison. If the poison doesn’t kill you, the diabetes might.

STOCKING FULL OF COAL

 Medium weight, made of fabric and mineral.  For when you’re REALLY on the Naughty list.

The Motives:

TO AVOID BLACKMAIL  --  SHEER ANGER  --  PROFESSIONAL JEALOUSY  --  TO PAY A DEBT

 

Using a docker proxy in WSL

I recently started working on a web-based project that has some non-standard networking stuff going on in the dev environment.  The fix was easy, but took a little searching, hence this post.

The codebase itself is built on Node JS, but I have to run it in WSL.  There are various build issues that keep it from building cleanly in Windows and it would be a bit of work to fix that.  But it builds just fine under WSL, so it's easier to use that.

The dev setup uses a Docker container running HAProxy.  It's set up to proxy the static portion of the website to the shared dev server (which is on the VPN) and direct the traffic for the dynamic part to a local port.  So we have a HAProxy running in Docker, the local dev server running in WSL, and the browser running in Windows.

The problem: In the default WSL config, this doesn't work.  The proxy to the shared server works just fine.  So if I go to wwwlocal.site.com, that works as a proxy to wwwdev.site.com.  Perfect!  However, wwwlocal.site.com/login is supposed to proxy to localhost:4321, but that results in a 503 error.  However, I can go directly to localhost:4321 and it works just fine, so this is clearly a networking issue.

The solution was to just add a few lines to my $home\.wslconfig file on Windows.  The following lines did the trick:

[wsl2]
networkingMode=mirrored
dnsTunneling=true
autoProxy=true

You can read more about these settings here.