Native Pico-8 on Android (Guide)

Last updated: 21JUN2024 (see Changelog for details)

Pico-8 is an awesome fantasy console, and one of its biggest strengths is that it works on Windows, Mac, Linux, and any number of Linux-based handhelds with ease. Unfortunately, getting it to run natively on Android devices is not as simple; there are some excellent Pico-8 emulator cores available for RetroArch, but none of them replicate the thrilling experience of navigating the Splore menu and downloading/playing carts directly within that native environment.

In this guide we’re going to trick our Android devices into running a Windows environment that will launch Splore. Once set up, it takes a couple extra taps to get running, but it’s pretty neat.

Note that this will require a somewhat powerful Android device to run, I would recommend something like the Retroid Pocket 3+ or higher. Also note that running Pico-8 through a Windows container on Android like this is inherently buggier than running it natively on Windows, Mac, or Linux. There will simply be some moments where the app or controls will freeze. It’s not perfect!

This guide was inspired by redditor jtischer1979’s post; thanks for the tips!

Add Pico-8 to your device

  • Download the latest Winlator APK from their releases page, and install it on your Android device.
  • If you haven’t already, purchase Pico-8 (generally $15 USD), then download the windows.zip version (not the “setup.exe” version). Image below.
  • One you have downloaded the .zip version of Pico-8, unzip the package so that you have a folder named “pico-8”. Now you want to transfer this folder to the Internal Storage > Download folder of your device. There are many ways you can do it, but the simplest may be to transfer the folder onto your device’s microSD card, then within your device’s Files app, copy the folder to Internal Storage > Download.

Set up Winlator

  • Start up the Winlator app on your device, and enable all permissions requirements at startup. It will install some System Files, which might take a minute.
  • In the Containers heading, you tap the “+” button on the top-right.
    • Rename the Container to something memorable (like Pico-8)
    • Under Screen Size, you have a few options:
      • For 16:9 and 4:3 aspect ratio devices, I recommend 800×600
      • For 1:1 devices like the RG Cube, I recommend “Custom” and 720×720
    • For Graphics Driver, you have a few options depending on the device and it’s chipset
      • In most cases, I recommend VirGL (Universal)
      • For Retroid devices, LLVMpipe (Software) seems to work best
      • For Odin or other Snapdragon devices, try Turnip (Adreno)
    • For Audio Driver, choose ALSA
    • In the Win Components tab, choose DirectX > Direct Sound > Native (Windows)
    • In the Advanced tab, you can remove CPU cores under “Processor Affinity”, although I have found the default settings work well.
  • One you have made these adjustments, click the blue check mark on the bottom right to save the container settings

Make a Pico-8 shortcut

Now that the container has been created, click on the hamburger (three dot) menu and select “Run”. This will create a Windows desktop environment. To navigate in this environment, think of your device’s touch screen as a laptop’s touchpad; press and drag your finger to move the mouse cursor, and tap to click (and tap with two fingers to right-click).

  • Once in Windows, an Explorer window should appear, showing multiple storage drives.
  • Navigate to the D: drive, then open the Pico-8 folder that we previously added to the device’s internal storage. Inside, find the pico8.exe file, then right click by tapping with two fingers, and choose “Create Shortcut”.
  • This will create a shortcut on your desktop. Verify it is there, then navigate to the Windows Start > Exit Desktop to exit the Windows environment.

Boot into Pico-8 Splore

Back in the main Winlator interface, tap on the Menu icon to the left of the word “Containers” in the top menu bar, and select Shortcuts. You should now see a Pico-8 shortcut in this menu, but it needs some additional configuration.

  • Tap on the hamburger (three dot) menu button on the right, then select Settings
  • Scroll down to the tabs, choose Advanced > Exec Arguments and add “-splore” (minus the quotations) in the text box.

In an ideal world, that should be it. You can press OK and then tap on the pico8 shortcut to boot into Splore and enjoy Pico-8!

To exit out of this environment, hover over any game within the Splore menu and select Options > Shutdown Pico-8. After a moment it should boot you back into Winlator.

From now on, getting into Pico-8 is pretty fast. Open Winlator, navigate to Menu > Shortcuts, tap on the pico8 shortcut. DONE.

Troubleshooting issues

Depending on your device and how its controller / graphics profiles were programmed, you may run into other issues. Here is a (not comprehensive) list of things you could do to make sure it’s working properly.

Graphics issues?

  • In Winlator, go to Menu > Shortcuts and to the right of the pico8 shortcut, tap the hamburger (three dot) menu button on the right, then select Settings
    • Adjust the graphics driver. For example, for the Anbernic RG Cube, changing the Graphics Driver to Turnip (Adreno) allowed Splore to boot
    • Adjust the DX Wrapper. I have found that WinD3D seems to work best, but it’s worth toggling the others to see if they work
    • Under the Advanced tab, set the Box86 and Box64 presets to Compatibility

Controller issues?

By default, the app should detect your device’s controls, but with some devices (especially those from Anbernic), it may not. Let’s set them up manually.

  • In Winlator, go to Menu > Input controls
  • Under Profile, tap the “+” icon and create a new input profile of your choice (“RGcube”, etc).
  • Once created, click on the drop-down menu under “Profile” and choose the one you just created
  • Under the External Controllers heading, you should see the name of your controller input (“retrogame_joypad” for Anbernic devices), tap on that.
  • Now, in this next section, you can press a button on your controller, and then map it to whatever you’d like.
    • I have found that for Anbernic devices, which don’t seem to properly detect xinput controls within Winlator, it’s best to map the controls to keyboard inputs, which work great in Pico-8. Here is the input mapping that I used for the RG Cube:
      • Button A: Keyboard X
      • Button B: Keyboard C
      • Button Start: Keyboard ENTER
      • Dpad Up: Keyboard UP (and so on)
      • Analog stick Up (Axis Y+): Keyboard UP (and so on)
  • Now that the controls are set up, let’s assign this profile to your Pico-8 shortcut.
    • In Winlator, go to Menu > Shortcuts and to the right of the pico8 shortcut, tap the hamburger (three dot) menu button on the right, then select Settings
    • Under the Advanced tab, select Input Controls > Profile and choose your control profile. Set the DirectInput Mapper Type to XInput.

Running Pico-8 through a Windows container on Android like this is inherently buggier than running it natively on Windows, Mac, or Linux. There will simply be some moments where the app or controls will freeze. It’s not perfect!

Other resources

In addition to my written guide, there are two other helpful YouTube videos. The first is a setup guide video from Adin Walls going through a process very similar to this written guide (albeit with an older version of Winlator, so there may be some inconsistencies). The second option is to manually install the fake08 RetroArch core, using ET Land xoxo‘s video.

Alternatively, if you just want to try out a few games, you could always navigate to the Pico-8 cart repository on your device’s browser and play the games from there. Just note that it’s a slightly miserable experience, with crackly audio, virtual controls taking up screen real estate, and a fullscreen mode that will often make the image *smaller* rather than larger. Below is a demonstration of the experience.

Pico-8 via Chrome on the Anbernic RG Cube

Changelog

21JUN2024
– published guide

3 thoughts on “Native Pico-8 on Android (Guide)

  1. Nice. The RG Cube definitely needs the Turnip driver; otherwise it boots to a black screen.

    Another problem I’m having is that my guest container seems to have no network connectivity from the host. I can’t actually go sploring until I figure it out.

    Like

  2. tried this on my retroid pocket 4 pro, unfortunately doesn’t work (pico-8 0.2.5g). the .exe launches and immediately exits. tried a few settings, no good. if anyone can get this to work i’d love to know your settings!

    Like

Leave a comment