Linux Gaming: Nintendo 64 Emulation - Part 1

Nintendo 64 emulation has recently evolved to run on all ODROID devices, using either the Mupen64plus standalone emulator or the Libretro core for Retroarch. Now that it’s widely available, I decided to do a comparison not only between the standalone version and the Libretro core, but also between the different ODROID platforms, in order to evaluate their capabilities in terms of emulating a Nintendo 64 (N64) console. Please note that this article covers only Linux emulation, and does not extend to Android, although there are several Nintendo 64 emulators available for Android, such as Mupen64plus and N64oid.

General information

It took a while to get N64 emulation to work on all the ODROID boards under Linux. However, now that it's functioning, it's quite fun and opens up lots of opportunities for classic gaming. Hopefully in the future, we will see more improvement and have even better support for N64 emulators on ODROID devices under Linux. For now, there are a few restrictions. Only the XU3 is able to use the Libretro core under Linux, which has better graphics, and is easier to control than the standalone Mupen64plus emulator. Mupen64plus runs on all other ODROID devices, such as the Exynos 4 series (X, X2, U2, and U3) as well as the newer but less powerful ODROID-C1. Both versions offer different plugins and methods of playing the games.

Graphics plugins

Whether you use Mupen64plus or the Libretro core, different plugins are used to display the game graphics. Mupen64plus is able to use a video plugin called rice, and another one called glide64mk2. The Libretro core offers rice, glide64 and one called gln64. While testing, I found that the best videocore depends on the game. However, it seems that glide offers better graphics features than the rice plugin, but has some minor glitches that are not present in the rice video plugin. Using the standalone Mupen64plus, rice is unable to perform aspect ratio scaling, and always scales the game to the full size of your video resolution. This distorts the picture, causing the characters and objects to appear wider than normal. The ODROID-C1 performs best when using the rice video plugin, since glide64mk2 doesn’t work unless the color depth is reduced to 16 bit, which causes the transparency effects to become disabled. This will also cause issues if you try watching movies or want to start other applications that require more than 16 bit color depth. Since the initial tests on the C1 went poorly, I decided to retest every game in 16 bit using the glide64mk2 video core. There seems to be a workaround using framebuffer drivers instead of X11 drivers by adding some scripts in order to switch resolution and color depth, but since my ODROID GameStation Turbo image uses X11 drivers by default, I don't take the time to perform framebuffer tests. The glide plugin on the Exynos 4 series devices (X, X2, U2 and U3) is working well, and respects aspect ratio with an overall good quality, but it can be a bit slower than rice on some games. Glide also seems to render a darker picture than rice does, which is most likely due to some missing shader options with regards to shadows. The glide64mk2 plugin on the Exynos 4 devices is the preferred graphics plugin for Mupen64plus standalone. The XU3 can use rice, glide64 and gln64, but glide64 seems to be the best plugin for now on the ODROID.

Controllers

Joysticks are fortunately working fine on all ODROID devices, which means that all emulators (mupen64plus and libretro core) are fully supported with any game controller. The Mupen64plus emulator configures the controllers automatically, but not all controllers work perfectly with the default settings. Thanks to Retroarch on the XU3, you can setup any controller you want by manually configuring the buttons, so every controller is 100% supported. Normally you should be able to activate rumbling support of the controller, but I had trouble getting it enabled on all emulators and controllers. I was able to use it with some PS3-style controllers on the Mupen64plus standalone emulator, but I wasn’t able to use rumbling with the Libretro core.

Sound

Sound is working well on all emulators, and I haven't found any major issues with it. Although one game had a delay in sound, which caused effects not to be synced with the action on the screen, that was an exception, and I haven't seen this issue with any other game.

Game selection

Are you ready to play your favorite Nintendo 64 games on the ODROID? Well, that's exactly what we want to try and find out: do your favorite games work? To answer that question, I did some research on what are generally considered the best games on the N64, then picked some of them to test, as shown in Figures 1 and 2. Hopefully you will find some of your favorite games in this list as well.

Figures 1 - List of some favorite N64 games from many different genres

Banjo-Kazooie

Banjo-Kazooie is a mix of jump-and-run platformer and action adventure. You play as Banjo the bear trying to save his sister who was abducted by a witch. He has a friend Kazooie the Bird, with whom you need to solve a couple of puzzles. Like most of the Rareware games, this one is fun and has a cute comic style.

Figure 2 - Banjo Kazooie)

U3

Generally, the game is running acceptably on the U3. It's sometimes a little laggy, especially during the intro. The introductions of Rare games are normally rather long and can't be skipped. On the XU3 and the Libretro core, you have the ability to increase the emulator speed, so that the introduction is over faster. I haven't seen that option on the standalone Mupen64plus emulator yet, which means a long wait time. Also, the fonts are not correct on the standalone emulator, which is slightly annoying. The game felt a little laggy after playing it for a while. I used the configuration options of the emulator to activate frameskipping with a maximum of three frames, which increased gameplay to full speed. With that setting, it was a really nice game to play, with only the font issue remaining. I left the frameskipping option set to three frames for all of the other games.

C1 - rice plugin

For the C1, I used the standalone emulator Mupen64plus, using the rice plugin, since I did not want to change the colors to 16 bit. Also, rice is a little bit faster than glide64mk2, and is better suited for the C1. I also had to activate frameskip for the rice plugin in order to get the game to run smoothly. Without frameskipping, the sound was lagging and was not a good experience. Although rice does not respect aspect ratio, it doesn't look bad. The issues with the fonts that happened with glide64mk2 do not exist on rice, so the fonts look normal. With frameskip activated, the game ran surprisingly fast on the C1, which was unexpected. If the game were to support a proper aspect ratio, it would run perfectly fine on the C1.

C1 - glide64mk2

Banjo-Kazooie runs on the ODROID-C1 using glide64mk2, but is extremely slow and no fun to play. The Rice plugin in 32 bit color is working much better than glide64mk2 in 16 bit.

XU3

XU3 uses the Mupen64plus Libretro core and Retroarch to emulate the game, and the experience on the XU3 is the best of all three platforms. The emulator runs glide2gl as a video plugin, which seems to be much better than the older glide64mk2, and does not render the colors as darkly. The Libretro core is missing the frameskip feature that the Mupen64plus emulator offers, which means that it can only perform as fast as the board that it runs on, which can lead to slowdowns, depending on the scenes. In Banjo-Kazooie, this happens in the introduction, but it's not bad. The graphics look much better using Libretro, and the game is fully playable.

Conker's Bad Fur Day

Conker's Bad Fur Day is another game from Rareware, and is similar to Banjo-Kazooie. However, it’s not suitable for small children due to its reference to drugs and alcohol along with harsh language, despite its comic style. You will also find a few characters that are the same in both games. This game is a mixture of many genres, mostly jump-and-run and action adventure, but it feels more like a first-person shooter with a mix of other genres as well. The game is actually one of my favorites for the Nintendo 64, and some other people already gave it nice reviews: http://bit.ly/1bo6odW. I highly recommend the game for adults and teens.

Figure 3 - Conker’s Bad Fur Day

U3

The U3 with the Mupen64plus standalone emulator is a little bit too slow for Conker's Bad Fur Day, and there are scenes where it feels somewhat laggy, which affects the controls. Sometimes they react too slowly, which is annoying during the jumping puzzles. The glide64mk2 plugin also makes the graphics very dark, especially during the cutscenes in the castle. When inside dark rooms, it’s nearly all black in some spots.

U3 - rice plugin

While the U3 is having speed issues, the C1 fails completely because the C1 is simply not powerful enough to run a demanding game like Conker's Bad Fur Day. The rice graphics plugin also has many issues with this game, such as black borders and distorted graphics, which is not fun to look at. Although the game is generally working, it's rather slow. Some scenes are actually fast enough to be considered playable, but are far from full speed. Therefore, I would consider this game unplayable on the ODROID-C1.

U3 - glide64mk2

Conker runs better using the glide64mk2 plugin than with the rice plugin. It's still not full speed, but if you can tolerate a little lag, it’s playable.

XU3

The XU3 offers the best gaming experience when running Conker's Bad Fur Day. The game, although not running at full speed, is mostly smooth on the XU3. The glide2gl plugin looks really good and only has a few issues with the game. I am not very far in the game right now, so I can't compare how the later levels perform, especially with driving tanks and using sniper modes.

Earthworm Jim 3D

Earthworm Jim is a nice platform action shooter about an earthworm named Jim, who got hit by an advanced space suit, transforming him into a hero. While the game was first a success on the SNES, SEGA Genesis, and even the Playstation 1, with the N64, it went a step further and transformed the game from a 2D platformer into a 3D action game.

Figure 4 - Earthworm Jim 3D

U3

The gaming experience of Earthworm Jim 3D on all ODROIDs is very nice. The U3 runs the emulator very fast and fluently, with some occasional minor graphical glitches. Since the game is rather colorful and bright, with light rooms and no shadows or dark corners, the glide64mk2 graphical darkness that affects other games is not a factor while playing Earthworm Jim 3D, which really improves the gaming experience.

C1 - rice plugin

Although the introduction and demo gameplay are fast, I couldn't start the game. The first scene where you talk to one of your friends is not only laggy, but also the window that is supposed to show the text remains empty and does not render anything. Clicking a button is also unresponsive, so you're stuck before the game even starts. It's likely that this is only a rice bug, but since I haven't tested glide64mk2 on the C1, I can't tell how well it's performing under that plugin. Therefore, I can only say that Earthworm Jim is not working on the C1.

C1 - glide64mk2

This game runs really well using the glide64mk2 plugin, with no graphical issues or slowdowns. Everything works as expected.

XU3

Since the C1 and U3 are powerful enough to play the game fluently, it's really no surprise that the gaming experience on the XU3 is perfect as well. If you like a good action platformer, this game is definitely a must have, but it does have some minor glitches. Some of the objects that you can collect are not displayed correctly. They seem to be too high, and you often only see a shadow where the object is supposed to be. You can still collect them, they are just invisible, although the game still works fine otherwise.

GoldenEye 007

GoldenEye 007 is found on everyone’s top 10 list for the N64, since the game was revolutionary for it's time. Not only did it offer nice graphics, but it was known for its awesome multiplayer mode. The single player story and missions are very exciting as well and are fun to play as well. GoldenEye is a rather serious first person shooter with just the right touch of secret agent work. Although not as spectacular as Cate Archer, James Bond fights or sneaks through different levels and has to defend himself against enemy guards and spies. However, Cate Archer will always be my favorite spy in harms way. Although this game has very good reviews for the N64, I really don't like first-person shooters on consoles. Therefore it's not one of my favorite games, although it's nice to play.

Figure 5 - GoldenEye 007

U3

The game runs very well on the U3. Except for a short scene in the introduction, there was no slowdown either inside or outside of buildings. I had some issues when using a wireless XBox 360 controller with the right analog stick, which made game movement difficult. However, using only the left analog stick seemed to be a good workaround for playing the game.

C1 - rice plugin

The C1 has graphical issues with the rice plugin with this game as well. Neither the logo, nor the introduction are visible, and both are hidden behind a black border. The scene that caused a massive slowdown to 8 fps on the U3 is too much for the C1, and the emulator stops completely and eventually crashes. Observing the ODROID while running the game, I can tell that when the slowdown happens, the RAM usage skyrockets to the point where no RAM is available. After that, it uses the swap partition that I created, and after that, the out of memory killer terminates the emulator, which doesn’t happen on the U3. I then switched to the rice plugin on the U3, and although the emulator was much slower than with glide64mk2, it was working properly with no black screen or memory issue, and did not crash. I therefore concluded that it was only an issue with the C1.

C1 - glide64mk2

The game is working with glide64mk2, but the speed varies from nearly full speed to laggy. It's playable, but not as good as on the U3 or XU3.

XU3

The game runs at a decent speed on the XU3 using the Libretro core. The graphics look really good, but it has occasional slow downs, although not in a way that prevents playing the game. I was also able to use the XBox 360 controller without any issues.

Kirby 64: The Crystal Shards

Who does not recognize little Kirby? This game is very kid friendly and has cute graphics. The pink marshmallow-like buddy can suck in its enemies and swallow them in order to absorb their powers. The N64 version has beautiful 3D graphics and is rather easy to play, which makes it perfect for children. Although the game is rendered in 3D, the levels are very linear. You can go left, right, up and down, but are not able to walk freely on the map, which probably greatly reduced the map size and allowed extra performance for effects. The game looks similar to Mario 64, but without the free movement in all directions.

Figure 6 - Kirby 64: The Crystal Shards

U3

The general experience is very good, and the game runs perfectly fine in full speed. However, it has some graphical glitches with the ground and shadows which makes it flickery in some situations. I also had major issues with the controls. I had to change to a different controller, since my XBox 360 controller would not work with this game. It seems that movement only works with the D-Pad, which is not available on the Xbox 360 joystick. After I switched to a “Thrustmaster Dual Trigger 3 in 1” controller, which is similar to a PS3 controller, the movement controls were working, and I could play the game without issues besides the previously mentioned glitches. The game experience is really smooth and fun to play. The cute graphics and cutscenes really fit the game.

C1 - rice plugin

The C1 experience was different from the U3, and was unexpectedly slow. Cutscenes were so slow that I skipped them, rather than waiting for them to play through. However, the graphical glitches were gone. The gameplay was slower than expected and was laggy in some scenes, while during other scenes, it's nearly full speed. I expected it to run better on the C1.

C1 - glide64mk2

Kirby works well using glide64mk2, with only minor issues on the ground textures and shadows.

XU3

The XU3 runs Kirby very smoothly. The graphics, although not as bad as on the U3, have some glitches such as effects that do not display on the ground, but they are shown normally while jumping or on higher platforms. Since the XU3 can use the Libretro core, there was no issue with the controller at all, and I was able to use an XBox 360 controller normally.

Next issue - more Nintendo 64 game reviews, including Mario Kart, Mario Party and Paper Mario!

Be the first to comment

Leave a Reply