# Testing Moonlight on Chromecast with Google TV

For whatever reason, I suddenly decided that I wanted to consolidate my old Chromecast and the Retropie into one device. My initial idea was to get an Apple TV and use Xcode to load Kodi and Retroarch on it, but after a bit of research, I realized that this was a stupid idea. Asking around, someone suggested using a Chromecast with Google TV. I looked into it, and decided to give it a shot.

So far, so good! I had no issue connecting a DS4 controller to the device, and Moonlight seems to be working as well as it did on the Retropie and, unlike on Retropie, the list of games refreshes automatically. (I had connectivity issues initially, but rebooting my router fixed them, which may be a sign that I need to upgrade that thing, especially considering it’s no longer getting security updates.)

The main issue I had was getting my ROMs on the thing, but after trying a significant number of apps from the Play store, I found one that allowed me to do it. Storage space is very limited though, so if I decide to give PS1 games a shot, I probably won’t be put that many of them on it.

# The Forgotten City

I had been hearing good words about this game from various podcasts for the past six months. Thanks to the Epic Store coupon, I finally pulled the trigger on that one. Considering I beat the whole thing in a weekend, I’d say it was worth it.

Despite hearing a lot about the game, I wasn’t sure what to expect. I had heard about the basic premise, but that was pretty much it. The gameplay is pretty simple at first: walk around this Roman city, talk to the folks, and solve the mystery. There is more than that. Eventually. But I won’t go over it as to avoid spoilers. This is one game where you don’t want to be spoiled. The various stories are quite interesting, and the overall plot, while fairly predicable at a certain point, was entertaining enough to keep me going and going, and there were plenty of surprises along the way.

I had a great time exploring the city, uncovering and solving its mysteries, talking to its inhabitants! The city itself is very well done.

On the technical side, I encountered some weird issues:

• I was unable to create a shortcut for the game using the Epic game launcher UI. I thought I was doing something wrong, but I tried with another game and I had no issue.
• I got a bunch of achievements while I was playing, yet they don’t show up on my Epic account

From an in-home streaming point of view, I tried playing this through Moonlight with my Raspberry Pi, and again encountered some annoyances:

• No on-screen keyboard (for the one place where I had to type my character’s name)
• There was a weird drift whenever I stopped moving. I want to try playing this with the iOS version of Moonlight to see if it’s a problem with the Pi/Dual-Shock 3 combination.

I gave up on streaming the game and played it on my older Alienware Alpha instead.

# Gris and Retired Men’s Nude Beach Volleyball League

Yesterday, I bought two games: Gris and Retired Men’s Nude Beach Volleyball League. The former had been in my Steam wishlist for ages. I became aware of the latter during Summer, and it had piqued my interest even if, after watching the trailer, it didn’t look like a particularly good game. Playing both to completion in parallel, in less than 24 hours, has been an interesting experience.

Gris is a puzzle platformer. The animations are detailed and very well realized. Its graphical style is extremely polished. The music is fantastic. It has some clever puzzles that are actually not that hard to complete. There is an underlying theme of grief and overcoming depression. It takes itself fairly seriously.

On the other hand, Retired Men’s Nude Beach Volleyball League feels like a game that was thrown together in a weekend by two friends after getting drunk on a Friday night. The gameplay is rough, the graphics are primitive, there are plenty of bugs, the text has typos and grammatical errors (that even someone for whom English is not their first language notices). The volleyball is not very fun to play and the matches go on for too long. Yet, it also has its charm, and I thought the ending wrapped the whole thing pretty beautifully.

Of the two, Gris was definitely a better experience, but I had fun with both nonetheless.

Quick note regarding in-home streaming using Moonlight: Gris worked flawlessly. Volleyball League requires a mouse in some areas (navigating the settings and exiting the game).

# Dialog system is mostly complete

After weeks of little to no activity on the gamedev front, I finally sat down on Sunday and Monday to work on the dialog system. After several attempts at tree traversal algorithms, I googled ‘tree traversal’, and voilà! I found a simple C program that I was able to use as reference.

My dialog system now supports:

• Unlimited dialog lines (called DialogCommands). They can be accompanied by a character portrait or not
• Conditional dialog blocks
• Player choices

Here’s a very simple example, with one line of dialog and then an question to the player:

This is what it will look like in-game:

There are plenty of issues, of course:

• Inconsistent fonts
• Font is too small
• Inconsistencies between the dialog box and the buttons
• Question box is actually behind the dialog box

I will spend some time today to fix the font and window order issues. The UI inconsistencies will wait. I also need to test the conditional blocks to make sure it actually works. And with that, the dialog system will be mostly complete!

# Some soccer, sort-of…

It took some time, but I got something that vaguely looks like a soccer game showing up:

# Pre-match scene

Before every match in the game, the player can walk around the changing room and talk to the other players. This is a simple one that I threw together with some sprites I generated from a generic tool and simple models I created in Blender:

I am still undecided regarding the dialog system: Do I create my own, or do I use a plugin called Dialogic? At the moment, I’m using my own. It can display dialog and character portraits. I have plans for user choices, and dialog trees.

Although I thought the dialog display elements were in a good state before I started working on this scene, I soon realized that there were major issues with how input was processed, and ran into all sorts of trouble: infinite loops, unable to get out of a dialog, the dialog box would close but the player couldn’t move… Things are in better shape now.

The next step is to switch scene when the player moves close to the green rectangle in the background (which is a door, even though it doesn’t really look like one). Once that is complete, I will get started on the actual meat of the game: the beach!

# Getting into game development

I’m a longtime developer, but my career so far has been focused on business application development using the SAP ERP platform. If you don’t know what that is, do yourself a favor and forget that it exists.

My current project is a turn-based beach soccer tactical game, with visual novel and dating sim elements, built using the Godot game engine. The working title is The Saturday Amateur Beach Soccer League. This is currently in the prototyping phase, and there is a good chance it won’t go any further. I will add more detail in a future post.

# Lego City Undercover review

According to Steam, Lego City Undercover had been on my wishlist since 2018. Each time it went on sale, I looked at it, and then decided not to buy it. Maybe next time.

For whatever reason, 2021 is turning into “the year where bobbywatson plays Lego games”. It started with The Lego Ninjago Movie Videogame, which I thought was pretty good. Then, it was Lego Builder’s Journey, which I found disappointing. And yet, once I was done with it, I wanted to play more Lego games. And Lego City Undercover was on sale. So I finally pulled the trigger, started playing it after it finished downloading.

And then I just kept playing. I beat the main story in 17 hours, spread across 4 days. That’s not a record, but it’s up there.

Let’s start with the story. It mashes a whole bunch of cop movies together, adds some (hit or miss) humor, and then finishes it with what feels like a Lego remake of Moonraker. It’s nothing new, but it’s nice to see Traveler’s Tale come up with a story that is not a rehash of Harry Potter or Star Wars. And there are some pretty funny moments in it, too. I just wish Frank Honey had not been such an idiot, and that Ellie had had a bigger role.

Along the way, the player unlocks multiple costumes, and these costumes come with abilities that allow the player to access different areas. There’s a cop (of course), a thief, a miner, an astronaut, a farmer, a fireman, and a construction worker.

On the surface, LCU looks like GTA with a Lego coat of paint. And, while that’s not false, it also doesn’t give a good idea of the whole picture. Unlike GTA, the story missions themselves don’t all take place in the open world. Usually, once the player gets to the designated area, the game switches to a closed location, with plenty of puzzles, some platforming segments, and some simple combat. These sections, called ‘Special assignments’, can be replayed (and usually cannot be 100% completed on the first playthrough, since some puzzles require abilities unlocked later in the game).

The side missions are numerous, and varied. My favorite type involves finding pigs, riding them, shoving them into a canon, and then firing the canon using a live chicken (that comes out of the main character’s hat). There are also some classics: time trials with specific vehicles, parkour-style platforming sections, rescuing cats, and finding what feels like millions of collectibles.

There really are a lot of them. Which is typical for a Lego game.

My strategy was to go through the main story as fast as possible, so that I could access all the abilities, and then start exploring. After the story completed, my completion rate was at around 33%.

I had a blast playing that game. The story was simple but fun, there were some funny moments, I liked the puzzles and the missions and, most of all, I liked grabbing a car, go somewhere on the map, and explore to find a whole bunch of collectibles. I often sat down to play, thinking I would stop after twenty minutes or so, and then looking up at the clock and realizing that an hour (or two, or three) had passed.  This still happens even after more than 30 hours of play (with a completion rate of roughly 55%).

There are some issues: the platforming wasn’t as tight as, say, a Mario game, the music was entirely forgettable, the loading times between the open world and the special assignments were somewhat long (but definitely not as bad as was the case with the Wii U version, judging by the Wii U reviews I watched). It also took me a while to figure out how to access the list of available activities for each area of the city (on the map, position cursor on the area, then press the top face button).

I read somewhere that the game was very unstable at launch, but I encountered only one issue so far: at some point, my character got stuck in a water jet, and the game thought I was underwater. I was not able to get out of it and had to restart that section. Twice. I took extra care the third time and managed to complete it.

One quick note:

I played the whole game through Moonlight, streaming my gaming PC to my Raspberry Pi. I did not encounter any significant issue. My only problem was that I felt the analog controls were a bit too sensitive while driving (but I need to double check by playing the game directly on my PC to confirm).

# Cemu and Xemu on Moonlight

I have been experimenting with both Cemu (Wii U emulator) and Xemu (original Xbox emulator) recently, streaming them to my TV using Moonlight. (At this point, the SteamLink app is but a distant memory, and will only use it for games for which Moonlight doesn’t work, like Valkyria Chronicles).

For Cemu, my test games (so far) have been Monster Hunter 3 Ultimate and The Legend of Zelda Wind Waker. In both cases, I have had zero issue with Moonlight. Launching the games through Steam directly has been problematic. So, instead of doing that, I created a batch file to launch each game, and added those batch files to the NVidia GeForce Experience “Shield” settings. Here is the content of the batch file:

echo off
set Emu="C:\path\to\exe\file
set Game="C:\path\to\iso\file"
start /realtime /b "" "%Emu%" -g %Game% -f
exit

For Xemu, the only game I’ve tested is Jet Set Radio Future. I was planning to play Panzer Dragoon Orta as well but, after giving the game a shot on original hardware, I quickly realized that the game was not for me and decided not to play it. Here, I have encountered the same issue I had when I first launched the emulator: my controller was not recognized. I had to use a mouse to navigate to the settings and select it, both on the computer and on the Raspberry Pi. After that, things have been running great. I think launching through Steam would have worked here, but instead I created a batch file to launch the game directly and also added in the “Shield” settings as well.

# Tomb Raider (2013) on Moonlight

On a whim, I reinstalled Tomb Raider (2013) on my gaming PC this week, and started playing it. I have very mixed feelings about this game (despite the fact that this is the third time I’m playing through it), which I will probably detail in another post later once I finish it.

Playing this game through Moonlight on my Raspberry Pi is a charm: the visual quality is excellent, and so is the framerate. Despite its age, this game still looks great. At the time I first played it, I remember thinking “I don’t care if games ever look better than this, this is good enough”. This opinion has not changed.