Linux Gaming: ODROID-GO Advance

The recently released ODROID-GO Advance has a lot to offer for ODROID fans, and retro gaming enthusiasts. The design of the ODROID makes it perfect for retro gaming and the build in gaming controls are perfect for this purpose.

Still, the board itself can do so much more and we’re lucky to have drivers for nearly any purpose, so I want to look into some alternatives besides emulating retro consoles and test what is possible on a Desktop for the ODROID-GO Advance. I want to test how other applications can be controlled without having to attach a mouse or keyboard all the time, and find out whether using the gamepad controls for input is intuitive for these games.

Requirements

For my test run, I used my Debian Buster image that I released some time ago. I also installed a MATE Desktop on top of it to have a desktop environment. I will make heavy use of a tool called antimicro which will be the basis for all my controller mapping. The programs and games I use either come from my repository or directly from Debian.

Desktop scaling

Some of the applications I want to run require a minimum resolution of 640x480. Since the ODROID-GO Advance has only a resolution of 480x320, we have a problem with these. Luckily for us, X11 supports scaling and allows us to “virtually” increase the size of the Desktop by scaling the output image accordingly. Using the following command, we can get a virtual desktop with the dimensions of 720x480:

$ xrandr --output DSI-1 --scale 1.5x1.5
This command gives our desktop a size of 960x480 (four times the size of the original desktop):
$ xrandr --output DSI-1 --scale 2x2
Because the picture is scaled everything gets a lot smaller, which in return makes things like text much harder to read, so if you are having issues with very small sized text, this may turn out to be a problem for you.

Antimicro

Antimicro is a tool that allows you to map controller buttons to any type of action you want. It can be that with the press of a button, you press a single key on your keyboard instead. For example, when you press D-pad UP, you press the UP key on your keyboard. It can also be a combination of keys. For example, if you press the button I on the ODROID-GO Advance, you do an ALT + F4 on the keyboard instead.

It can even be an entire series of keystrokes in a row, instead of at the same time. For example, like for Quake 2, you could define a button that first triggers a “~” to open the cheat menu, then types “give all” followed by the ENTER key and at last does a “~” again, all with the press of one single button. You can even map mouse events, like moving the mouse pointer or left and right mouse button to buttons on your gamepad.

I guess you understand how powerful this application can be to help configure your games and programs to run only with the ODROID-GO Advance gamepad controls rather than an attached mouse and keyboard. For this, you need to install antimicro-odroid. Note that there is also an antimicro directly from Debian, but it requires QT5 which is currently not configured correctly on arm64, therefore please use the antimicro-odroid package instead.

Figure 1 - Antimicro running on the ODROID-GO Advance mapping mouse movement, buttons and arrow keys
Figure 1 - Antimicro running on the ODROID-GO Advance mapping mouse movement, buttons and arrow keys

The UI from antimicro is actually quite big and requires you to scale the desktop 2x2 in order to fit.

Firefox

Let’s start off with some applications instead of games. Firefox as a web-browser runs ok on the ODROID-GO Advance. I used just a basic setting in antimicro that maps the analog-stick as a mouse pointer, L und R as mouse buttons and the D-pad as the arrow keys. I could map more buttons like F11 for full screen ESC to escape out of a fullscreen video or something similar, but I opted not to. Using 2x2 scaling is actually a nice size and you have a good amount of detail on the screen, but testing the ODROID forum as a option for reading some text the experience was not very good. With 2x2, the text is way too tiny to really read anything. So I opted for 1.5x1.5 scaling instead, and although I lost some space, it was good enough to go through the threads on the forum and read them. Using the D-pad for scrolling up and down also made it quite easy to navigate and for the rest I could use the mouse pointer. The downside, of course, is that you don’t have any input. I could have used an on-screen keyboard, but that would cover most of the screen, so I abandoned that idea, and instead tried something that could be easier to use through navigation and ended up setting on YouTube. It’s quite usable, since you navigate nearly entirely via mouse, and when you double click a video, it nicely fills the screen and turns your ODROID in a nice little video player. I was actually quite surprised that videos up to 720p are working, but since it’s stressing the CPU a lot, I suggest using 480p, which is also closer to the actual screen size at 1.5x1.5 scaling. In fact, the speaker was performing quite well too, and the sound of music videos and even a 4-hour Looney Tunes special was good.

Figure 2 - Youtube on the ODROID-GO Advance
Figure 2 - Youtube on the ODROID-GO Advance

Figure 3 - The ODROID-GO Advance is a nice video player on the go
Figure 3 - The ODROID-GO Advance is a nice video player on the go

There was one downside though while testing this, in that when a video was playing the navigation through antimicro, it seemed to be delayed and the mouse pointer was sluggish. I compared this with using a real mouse, but the issues did not happen with a real mouse, so it seems that the high CPU usage of the video affects antimicro and can cause slow downs in the mouse pointer emulation. It did work, but it was just somewhat delayed.

Clementine

Clementine is my favorite music player for Linux (and even on Windows in the past). Running it on the ODROID-GO Advance was very easy, and using antimicro to navigate it with a mouse was very simple. You can easily add your favorite music stations and playlists, and then use the ODROID simply to navigate between your music, audiobooks, or whatever you put on there. The CPU usage is very minimal, using only about 10 to 15% CPU capacity on one core while playing an Internet live stream. With this, you can turn your ODROID into a mobile music player. Add a bluetooth module, turn off the screen, and you can listen to music for hours and hours. Using antimicro is to navigate here is very easy and intuitive. You can easily map a bunch of buttons to navigate just a single button click:

  • F5 – Previous Track
  • F6 – Pause
  • F7 – Stop
  • F8 – Next Track
  • CTRL + M – Mute
  • CTRL + Q – Quit

Mapping these on I to VI for example gives you easy access to your control through your playlists.

Figure 4 - Clementine with 1.5x1.5 scaling, works as well in 1x1 and 2x2; just pick which one you like the most
Figure 4 - Clementine with 1.5x1.5 scaling, works as well in 1x1 and 2x2; just pick which one you like the most

Games

Ok let’s stop with the boring applications. I guess you get the idea: everything that works fine just with input of mouse or arrow keys still works perfectly fine on the ODROID-GO using Antimicro. You can setup key combinations or map buttons for extra stuff like on the music player clementine, but what I really want to know, how is gaming working here?

Alien vs Predator

This fast-paced action shooter is no problem for the ODROID-GO Advance. It was a little bit hard to configure at first, but due to some changes in the code that I made, it works perfectly on the ODROID-GO Advance. You need to run this game without scaling (1x1), or else you will only be able to run it in window mode, while in 1x1 you can run it in full screen mode, which looks amazing. The game itself though is hard to control, especially since I come from a PC gaming background with little experience. Playing a first-person shooter with controllers was hard for me to find a comfortable way to play. You need one button for the key combination ALT + Enter as the game starts in window mode, and it needs to be switched to full screen mode in order to capture the mouse pointer correctly. My button layout was as following:

  • D-pad – Arrow Keys
  • Analog Stick + L and R – Mouse
  • B – Space (pulling switches)
  • A – RSHIFT (jumping)
  • Y – RCTRL (for crouching)
  • X - “]” for cycling through weapons
  • I – ESC (menu)
  • II – free
  • III - “.” (throwing flares, cloaking)
  • IV - “/” (switching view modes – Predator)
  • V – free
  • VI – ALT + Enter (switching full screen mode and back)

The two free buttons could easily be configured with one of the many other functions keys in the game: zoom for example, or throwing disc recall. Depending on your needs, these keys will be used up very quickly.

Figure 5 - AVP looks gorgeous on the ODROID-GO Advance
Figure 5 - AVP looks gorgeous on the ODROID-GO Advance

Figure 6 - Cloaked as a Predator on the hunt for Humans
Figure 6 - Cloaked as a Predator on the hunt for Humans

The overall gaming experience is rather mediocre in my opinion. The layout works, but since you need to switch between analog stick and to walk and adjust your sight, it’s not very easy to do this quickly. While playing as a Predator, whose specialty is stealth and sneaking, this is fine, but fast action scenes with the Marine or Alien are nearly impossible to pull off (or maybe I’m just really bad at this kind of control scheme). I wonder if replacing D-pad left and right with mouse left and right for turning would already improve gameplay a lot. The strafing is not very helpful either. The gameplay is very fast and fluent, and I haven’t experienced any lagging at all, so technically nothing stands in your way to play it once you learn how to control it. Overall, it was a nice experience.

Corsix-TH (Theme Hospital Clone)

The funny simulation / management game Corsix-TH runs quite well on the ODROID. It uses SDL2, and with that, adjusts automatically to the display size you have. So it will work no matter if you use 1x1, 1.5x1.5 or 2x2. In fact, it probably always looks the same. The menu and text is quite hard to read since the font is quite tiny. The game is rendered in 640x480 and then scaled to the resolution you have. Overall, it’s an interesting experience, and quite playable with just the ODROID-GO Advance’s gamepad as an input. Using the analog-stick and L+R for mouse works fine, and using D-pad for arrow keys allows for faster scrolling. Other keys are not necessarily needed, but if you want to save a game you must be able to enter a name, so I suggest mapping any keyboard key like “1” or so to “type” something as a file name for your save game. You can also map ALT + Shift + S (for quick save) and ALT + Shift + L (for quick load) which probably is already enough as you probably not gonna play on multiple levels at a time.

Figure 7 - As with most of the 640x480 games, the text is hard to read
Figure 7 - As with most of the 640x480 games, the text is hard to read

Figure 8 - The game itself runs fine and looks good
Figure 8 - The game itself runs fine and looks good

As there is no extremely fast action required, it’s working fine with the ODROID-GO Advance gamepad controls. The game is quite playable with the exception of the hard to read text, but it’s not impossible, and if you know the game you probably don’t read anything anyway.

Dune Legacy

The Dune 2 clone Dune Legacy is another game made for a minimum 640x480 resolution. Like Corsix-TH, it’s written in SDL2 so it does work on any resolution, but it will scale the display accordingly. Once again, this means that text is going to be hard to read, but it still works fine. When you first start the game, it’s going to be started in 480x320 which looks fine, until you notice some of the buttons are missing. Therefore, I highly suggest changing the resolution to 640x480, which is the minimum anyway. After that, the menu is significantly harder to read but at least you have all the buttons that are there.

Figure 9 - As expected, text is very hard to read
Figure 9 - As expected, text is very hard to read

Figure 10 - It’s not that hard to organize larger armies for attacks
Figure 10 - It’s not that hard to organize larger armies for attacks

Overall, the controls via gamepad work fine. I used the standard layout with mouse and arrow keys mapped, and it fits most situations. The arrow keys on the D-pad actually are very convenient for scrolling, and much easier than using the mouse at the edges of the screen. There’s no quicksave and quickload feature, so this time you need to map at least one button for input “text” for save games. Another good idea is to map CTRL + 1, CTRL + 2, etc. to assign groups that you can jump in between fights. Since you have to call them with 1 and 2 to switch back to the groups that you assigned this, can also double as your text input for save games. Overall, I was surprised how well this performed in terms of the controls. I was able to play the first 5 levels of Harkonnen campaign without any trouble, but I wonder how it will work out in later levels where you have to organize different armies to take out the enemy. Dune 2 was one of my favorite games to play on the Amiga, so I’m quite happy this remake works quite nice on the ODROID-Go Advance

Gigalomania

Gigalomania is another strategy game. This game is a clone of Mega-lo-Mania, which is another Amiga Classic that I really liked. This game doesn’t give you a lot of options in matter of graphics, since it’s rendered in 640x480 and scaled to whatever your desktop resolution is. As you probably guessed, text is hard to read.

Figure 11 - The text is barely readable, especially numbers
Figure 11 - The text is barely readable, especially numbers

Figure 12 - The numbers are so tiny that it actually becomes an issue
Figure 12 - The numbers are so tiny that it actually becomes an issue

The game is controlled by mouse alone, and there’s nothing else you need, so there’s also very little to map inside Antimicro to make this game work. However, the tiny font really becomes an issue in this game. While I usually ran through the first era (10000 BC), I failed on the first try for 2000 BC (the second era), and the reason was that I couldn’t see the state of my army. I wasn’t able to tell if I or my enemy had more units, and who was winning and losing. It turned out that I was losing, but didn’t know it. This is somewhat annoying, and shows the limitation of scaling.

Hedgewars

This one is tricky. It uses Qt5 which, on Debian, is for arm64 compiled against OpenGL although arm64 boards normally just have OpenGL ES. Even if you replace Qt5 with a version for OpenGL ES, the game itself still requires OpenGL to work correctly. Therefore we need libgl-odroid installed for this game to work at all. Hedgewars has a minimal resolution of 640x480, but since it does not use SDL2 but Qt5 instead, it does not scale to 480x320, which means it would not run as is. In order to get the game to run at all we need to scale the desktop 2x2 or else the game won’t start. The menu itself can be started in full screen mode and looks quite nice. Most of the text is big enough to read, but some text is still tiny. The game itself can only be started in window mode, and full screen mode won’t work. The game has quite a few hotkeys you might want to map, aside from mouse and arrow keys.

  • 1-5 can be mapped for the time grenades take to explode
  • Precise aim (normally left shift) can be used for better aiming, or in combination with 1-5 for bounciness
  • Tab might be needed to switch through your Hogs when using switch hogs
  • H to center view back to the active hog
  • Enter is used to jump forward
  • Backspace for jumping high and backwards
  • Space is required to fire your weapon

Enter, Backspace, and Space probably should be mapped to Y,B,A as you use them most often. The rest of the buttons are pretty much for everything you want. You also might want to map ESC and “Y” to exit the current game, or ALT + F4 to quit the game.

Figure 13 - The game looks good even with a 960x640 desktop resolution
Figure 13 - The game looks good even with a 960x640 desktop resolution

Figure 14 - The text is most of the time big enough to read
Figure 14 - The text is most of the time big enough to read

The game runs surprisingly well and is for the most part quite nice to play. The controls, once they are setup to your liking, work surprisingly well, although you are a little slower than with a real mouse, and a little less precise. Overall this is quite fun. You have to start the game from console with:

$ LD_LIBRARY_PATH=/usr/local/lib hedgewars

LZDoom

LZDoom is an engine to run different Doom engine games, such as Doom1, Doom2, Hexen, Heretic, and many fan made games like Castlevania: Simon’s Destiny, which brings a Castlevania style game in the first person 3D perspective. LZDoom has many different resolutions that it supports, starting with 320x200. I recently added support for 480x320 to support the ODROID-GO Advance display resolution. The engine is quite advanced, and offers features such as Fog and ambient lighting, but uses OpenGL in the background. Therefore, it runs on gl4es from @ptitSeb in order to use OpenGL 2.0 features. Although the engine itself offers joystick support, I suggest against using it, and rather map keyboard and mouse controls via antimicro as usual. The reason for this is that you can not navigate through the menus with the joystick support, but since the keyboard works for both menu and in game, I recommend using keyboard and mouse instead as an input method. Enter and Space are a must bind for this as they are used in the menu and in game. ESC should be mapped as well to go into the menu. You need to enter a name for save states, but having space mapped already should be enough, and you probably end up mapping more keys anyway. I suggest mapping the switching on weapons, jumping, primary and secondary attack. Everything else probably depends on the game that you use. The original Doom game can be played completely with just an attack button, an action button (space) for activating stuff and your basic walking controls, so it depends on you how much you want to configure.

Figure 15 - Classic Doom 1 running in LZDoom on the ODROID-GO Advance
Figure 15 - Classic Doom 1 running in LZDoom on the ODROID-GO Advance

Figure 16 - Castlevania: Simon’s Destiny looks just gorgeous

Overall, LZDoom runs very well on the ODROID-GO Advance, and might just beat prboom libretro port in matter of how well it plays and how versatile it is.

OpenXcom

I simply love this game. I started playing it on the Amiga, and later played it under DOS. There are a lot of games in the same spirit, like the new Xcom series available on Steam and other platforms, or the UFO series (UFO Aftermath, Aftershock, Afterlight) and I love them!

Figure 17 - The game looks amazing and the big buttons make text easy to read
Figure 17 - The game looks amazing and the big buttons make text easy to read

Figure 18 - Even in missions, you never lose overview
Figure 18 - Even in missions, you never lose overview

This game uses standard SDL 1.2 instead of SDL 2.0, which means that it does not automatically scale the picture and you have to scale your desktop to 2x2 for the game to work correctly. You can select the 960x480 as a resolution for the game and the game will work fine. Luckily, the game uses rather large fonts which makes the text much easier to read. The game is also round based, so there is no hurry when making a move, and you have all the time in the world to fiddle around with the controls. The mouse and arrow keys are again your best method of control. You can use the arrow keys for fast but precise scrolling, and the rest is done with the mouse. Binding ESC for faster access on the menus is quite handy, and you also need it if you want to save and load games for example. For save games, you probably need to map an “input” for save game names.. But you could also map F5 (quick save) and F9 (quick load) instead, although I normally use more than one save game. I just love this game. It has many mods to improve the original experience with remixed, music and weapons and even total conversion. It supports the classic Xcom 1 and 2 games (Enemy Unknown, and Terror from the Deep). It is really fun to play on the ODROID-GO Advance.

Quake 2 (yquake2 engine)

Similar to other FPS shooters mentioned here, this is hard to configure, since the games were meant for mouse and keyboard. This game makes heavy use of the mouse for aiming, which is somewhat of a problem, as the D-pad and analog-stick are on the same side, which means you would have to switch between aiming and walking. The problem with this game is that you can not disable game input, and even if you remap the buttons, they often turn out to do something different. I ended up mapping movements on the ABXY buttons (front, back, side steps). I increased the mouse speed since it’s used for looking around and was way too slow for me. I used mouse button 1 for firing, and I mapped the D-pad for crouching, jumping, and activating things. I also mapped buttons for next and previous weapons and items, as well as the Info computer for mission info. The only drawback was that navigating through menus did not work as I hoped it would.

Figure 19 - Quake 2 looks gorgeous on the ODROID-GO Advance and supports high res textures
Figure 19 - Quake 2 looks gorgeous on the ODROID-GO Advance and supports high res textures

The game ran surprisingly well, and I quickly found a way to walk aim and shoot like I wanted to. Crouching and jumping took a while to get used to, but overall the game ran fine. Unfortunately, the fact that the game always interprets buttons as an action on the gamepad, so you can’t navigate through menus, as each press of a button is the same as pressing enter, therefore I have to say it’s not 100% mobile as you still need a keyboard to navigate menus. The game can be configured to run in 480x320, through the games config.ini file.

RVGL

This racing game is one of the few games that I tried which has a controller mapping that also works for the menu, which means that once you have configured your ODROID-GO Advance gamepad for the game, everything works as it should be just by using the controller to navigate the menus, play the game, and everything else. There is no need for antimicro, and since the game uses SDL2, it automatically scales to the size of the screen, so no changes on the scaling either.

Figure 20 - RVGL has very good graphics and responsive game controls, and this game was made to be played with a controller
Figure 20 - RVGL has very good graphics and responsive game controls, and this game was made to be played with a controller

While the controls are fine, the game seems to suffer from some issues. Whenever there are a lot of effects going on on the screen, like an explosion, the game slows down significantly. It’s the same when a race starts. The moment the Go sign comes up, the game is at 1 FPS for a few seconds after which the game runs fine again. I haven’t yet figured out what causes the slowdown, but generally it should work much better. This game is perfect for the ODROID-GO Advance, and its gamepad design doesn’t have so many buttons that you couldn’t comfortably map all functions to the gamepad, and the controls act fast and precise. I hope I can find a way to fix the slowdown.

Devilutionx (Diablo 1 engine)

Last, but definitely not least, I want to talk about Devilutionx, which is an engine made for Diablo 1. I recently posted a short video of this game at https://oph.mdrjr.net/meveric/other/Videos/GO2/go2-1.mp4. The game looks beautiful on the ODROID-GO Advance, and can be controlled fully by mouse input alone, but you will probably want to map the quick item bar to chug down health potions. The game actually supports controller mapping as well, but this has to be done in the code itself for the moment or in SDL2 directly by choosing the controller with an environment variable. I haven’t done either of these things yet, but it might be worth it, because during fast action scenes, controlling the game via emulated mouse can be quite hard (or maybe my reflexes are just too slow). Overall, the game looks and sounds gorgeous on the ODROID-GO Advance. It has beautiful music, sounds, and voices everywhere. Although it is made for 640x480, the font is big enough that you can read everything that is going on on the screen. Maybe I’ll take the time and create an SDL2 mapping for the ODROID-GO Advance, so we can use it for this (and other) games that use SDL2 as a basis.

Figure 21 - This title screen brings back so many memories
Figure 21 - This title screen brings back so many memories

Figure 22 - Even after over 20 years, the game still is phenomenal
Figure 22 - Even after over 20 years, the game still is phenomenal

Conclusion

It has become more and more clear to me that one of the main limitations is the low resolution of 320p. Many games were created with a resolution of 640x480 in mind, and you can feel this everywhere. Although for most of the games, scaling is a possibility, it often makes text very hard or even impossible to read. Controlling games via game-controller and mapping of mouse and keyboard to buttons has its limitations, especially when fast controls are required or you need to work very precisely, and a combination on the gamepad is not really suited for this. On the other hand, it also shows that with a little training, and the correct button mapping, games can play quite nicely. I personally was surprised how well Quake 2 performed after some controller tweaking. I know that for sure a controller is always slower than a real mouse, but it still felt natural, and after some time I got quite well playing with a controller instead of mouse and keyboard. The ODROID-GO Advance is mainly targeted for retro-console gaming, but luckily it’s not limited to this. There are many possibilities of what you can do with it aside from “just console”, and I’m pretty sure a lot more games and programs will be available to use on the device over time.

Be the first to comment

Leave a Reply