The latest posts in full-text for feed readers.
I collected a list of all games that were exclusively released on the OUYA gaming console.
Games that have never been ported to any other system - you need an OUYA to play them. Find them in the Exclusive category on my OUYA server.
Games that were for some limited time only available on the OUYA, but got released on other platforms later. Find them in the VIP room category on the OUYA server.
Game name | Other Platforms | Source | Notes |
---|---|---|---|
Amazing Frog | PC (Steam) | 15, 17, 18 | |
Broken Age | PC (Steam), Playstation, Apple App Store, Google Play | 1 | Only console on launch day |
Chrono Blade | Apple App Store, Google Play | 14, 15 | Demo only |
Deep Dungeons of Doom | OUYA (2013-04-11), Apple App Store (2013-06-04), Google Play | 15, 19 | |
Duck Game | OUYA (2014), Nintendo Switch, Playstation 4, PC (Steam) (2015) | 11, 13 | new official site |
Laza Knightez | Windows, Mac OS | 6 | |
No Brakes Valet | Windows, Apple App Store, Google Play | 15, 16 | new official site |
Polarity | PC (Steam), Apple App Store, Google Play | 1, 15 | new official site |
Reagan Gorbachev | Xbox One, PC (Steam, Humble Store) | 2, 11 | |
That Dragon, Chancer | Mac, PC, Google Play, Apple App Store | 4, 22 | new official site |
Toto Temple | Playstation 4, Xbox one, WiiU, PC (Steam, Humble Store) | 7, 8, 11 | |
Towerfall | Switch, PC (Steam), Playstation 4, Xbox One | 9, 10, 14, 15 | |
Whispering Willows | Switch, PC (Steam), Playstation 4, Xbox One, Wii, Google Play, Apple App Store | 11, 12 | 2 months exclusively on OUYA according to 12 |
Some games were announced to be exclusively on OUYA but weren't actually, or were cancelled.
Game name | Source | Notes |
---|---|---|
Cascade | 11, 23 | Never released on the OUYA store. No mention of OUYA on homepage. |
Fist of awesome | 15 | Kickstarter page says PC & Mac were there at least with ouya. |
Human Element | 1, 24 | Cancelled |
Neverending Nightmares | 11 |
Released simulatenously on Windows, Mac, Linux, and Ouya.
Kickstarter page:
The Ouya Free The Games Fund exclusivity terms don't apply to computers. |
PitchWreck | 5, 25 | Never released |
Red. | 15, 26 | Released the same time on iOS and OUYA, 2013-03-13. |
Yummy Circus | 1, 3 | Not on the ouya.tv games list. Was listed on their website as available on OUYA. |
Published on 2021-10-13 in games, ouya
I've always wanted to play the game Horizon Zero Dawn since it was released for the PlayStation 4 in 2017. In 2020-07 it was released for PC, but since it was DRM-ridden, I did not buy it then.
In 2022-12 I found it on gog.com for a reasonable price of 17€ and bought it. After downloading the 74 GiB with the command-line tool LGOGDownloader and installing it with Wine 8.0-rc2, I started it and got a crash:
Unhandled exception: illegal instruction in 64-bit code (0x00000140118cb7).
It turned out that HorizonZeroDawn.exe uses CPU instructions that my processor (AMD Phenom II X4 945 from 2009) does not support. The minimum system requirements say that an AMD FX 6300 is needed, which was released in 2012.
It is possible to see which opcodes are used in an executable.
Combining objdump with some grep will give you the list of CPU instructions. I used cpu_features.py to get the list, and it showed me that AVX and SSE4 instructions are used:
$ python2 cpu_features.py HorizonZeroDawn.exe [...] x64: sse4.1: pextrw pextrq sse4.2: crc32 [...] sandybridge: avx: vcvtss2sd vpmuludq vpsrlq vpcmpgtd vcvtsd2ss vaesenc vsqrtss [...]
Just listing the instructions does not mean that they are actually used, because the programs can have checks that use certain opcodes only when the CPU supports it.
Many players complained about Horizon requiring AVX, and so version 1.08 was released that removed that requirement:
Fixed a start-up crash for CPUs that do not support AVX instructions
This leaves the SSE4 opcodes that are also not supported by my processor :-/ I will have buy a new CPU + mainboard until I am able to play the game.
Someone on the internet provides binaries for processors without SSE4.x support but those executables are for the Steam and Epic versions only, and not for the GOG one :(
Published on 2023-01-01 in games, hardware, linux
The Defold game engine is able to generate applications that run on Desktop, smartphones and HTML5 web browsers. Just for fun I built an application that extracts textures and Lua scripts from the generated binary data files.
A game would not run on my computer, and I thought it would be worthwile to at least extract its image assets. It had a 1.5 GiB file called game.arcd that probably contained all the data, and I just had to obtain them from there.
I had no idea what tool was used to create the game.
Searching for .arcd file type
did not give me any results
(looking for game.arcd
would have helped,
but I only learned that later).
Instead I ran strings on the executable file to see messages are
inside it:
$ strings -n 10 executable |wc -l
5799
$ strings -n 10 executable |grep -iE 'error|fail'
...
ERROR:DLIB: dmLog already initialized
...
$ strings -n 10 executable
...
dmGraphics::ValidateAsyncJobProcessing
dmGraphics::OpenGLClear
dmGraphics::OpenGLFlip
...
I wanted at least 10 characters because otherwise it would just be too much output - 5800 lines were enough already. Then I looked for non-generic error messages and non-standard API strings, in the hope that that would tell me which engine was in use.
Searching for both dmLog
and dmGraphics
told me that
the Defold game engine was used here.
I looked for existing tools that could unpack the game.arcd file and found Unfold, a unpacker written in Defold itself. Unfortunately it did not work.
The Defold documentation talks about the game archive format, and it did not seem to be very complicated.
When inspecting the Defold source code I saw that there were .proto files, which are specifications for "Protocol buffers", a binary serialization format. This proto files can be compiled into Java, C, C++, PHP and other languages. That's enough to read all the files.
I also found a ArchiveReader.java file that already implemented a file extractor! So I downloaded IntelliJ idea, set up a new Java project and wrote a tool that utilized the reader.
Working on a 1.5GiB file would be slow, so I checked out the Defold games showcase and downloaded a game that looked small: At first I used the browser's network inspector to obtain archive_files.json and then downloaded all files linked from it:
$ jq -r .content[].pieces[].name < archive_files.json | xargs -L1 I{} wget http://example.org/archive_files_dir/{}
The files extracted by my tool were of no use. After some tinkering I found out that files can be compressed and encrypted, and both features were not implemented in the ArchiveReader class.
An hour later I had a BetterArchiveReader with support for both compression and decryption, and it was able to extract .luac and .texturec files.
The .luac files has the Lua source code, but also some binary before and after the actual script code. This means the files were again packed protobufs, and needed to be unpacked.
.texturec files may contain multiple texture formats,
and each of them had meta data about the actual image format.
The files I was interested in had Compression: basis UASTC
,
which
turned out
to be a format suitable for directly loading onto the graphics card.
Luckily the basis_universal basisu command line tool already contains an unpacker that is able to convert .basis texture files back into .png!
The tool itself worked, but had hard-coded paths and I had to comment out code to switch between extraction and listing.
I decided to add a nice command line interface so others would not have to go through the same hoops as I. After evaluating Java command line parsing libraries I decided on JCommander.
After the initial work of about 5 hours, I spent 1.5 days to build the cli interface. It even has a pretty help screen:
[files to extract]
Options:
--arci
.arci index file path
--dmanifest
.dmanifest file path
--extract-lua
Extract Lua scripts from .luac files
Default: false
--extract-textures
Extract textures from .texturec files
Default: false
-f, --filter
File extension filter
-l, --list
List archive contents
Default: false
--outdir
Directory to extract files to
-v, --verbose
Show names of extracted files
Default: false
lua Inspect or extract a .luac file
Usage: lua [options] <.luac file path>
Options:
-v, --verbose
Show names of extracted files
Default: false
-i
Show .luac file information. Do not extract.
Default: false
texture Inspect or extract a texture file
Usage: texture [options] <.texturec file path>
Options:
-v, --verbose
Show names of extracted files
Default: false
-i
Show texture information. Do not extract.
Default: false
]]>
The tool is called arcdEx
, is open source and can be downloaded
from codeberg.org/cweiske/arcdEx.
Published on 2022-08-20 in games, programming
I've been playing the android RPG game Andor's Trail (on F-Droid) a bit and was put off by the requirement to spend too much time slashing cute enemies to make money - only to be able to buy more equipment and to continue with the storyline.
My choices were: Stop playing the game, or find a way to get more money.
I chose the latter and found a forum thread Edit saved game files ?? which unfortunately has no useful information on the first two pages.
So I had to solve the problem myself:
$ adb connect
$ adb root
$ adb shell
$ find / -iname "*andor*" 2&>/dev/null
...
/storage/emulated/0/andors-trail/savegame1
...
$ exit
$ adb pull /storage/emulated/0/andors-trail/savegame1
# fix savegame
$ adb push savegame1 /storage/emulated/0/andors-trail/savegame1
To fix/adjust the savegame I used emacs in
hexl-mode.
The first line contains the name of the player with the main properties:
(Level 7, 5361 Erfahrung, 459 Goldmünzen)
.
Then I converted the number of coins 459 to hexadecimal:
$ php -a Interactive mode enabled php > echo dechex(457); 1c9
Now I searched for c9 and found the hex values 01c9 which I replaced with (via C-M-x) with ffff (65536). After saving, I pushed the savegame onto my Android device, loaded the savegame and voila, I did not have to worry about money anymore.
I could also have increased my XP, but that would have spoiled the fun.
Published on 2019-01-30 in android, games
In 1996, Tomb Raider 1 invented the category of third-person 3D action-adventure games. After nearly twentry years I wanted to play it again, but this time from the couch on TV via my OUYA android gaming console.
It turned out that the game was ported to Android in 2015 and is available in the Google Play store. I asked the Square Enix support if the game supports gamepads or joysticks, and they confirmed that it works at least with the Moga Hero Power and Moga Pro Power controllers. So basic support was there, and the rest would be button mappings - I thought :)
The Google Play store is not available on the OUYA (only the native OUYA store is supported), so I bought the game for 0,99 US dollars on a normal Android phone. Installing it on the OUYA required me to get hold of the game's package file, and I asked the support for the official .apk download URL, telling them the account email I used to buy it. They declined my request:
Unfortunately for security reasons it is not possible for us to advise you how to download the game unless you are using the Play store. If you are unable to do this then it should be possible for you to speak to them regarding a refund.
We are sorry for any disappointment that this may have caused.
Kind regards,
The Square Enix Support Centre team
I tried an APK Extractor app on the phone, which gave me an .apk file of 4 MiB while the original download was 320 MiB.
Then I went the usual route: Use mitmproxy to get hold of the URLs that are called when the phone downloads and installs the game. I used Android-x86 in VirtualBox for this since it was easier than to install the mitmproxy certificate on a real phone.
It turned out to be two files that were downloaded:
The Android package installer installed the .apk file normally, and saved the expansion file at /sdcard/Android/obb/com.squareenix.tombraider1classic/main.40.com.squareenix.tombraider1classic.obb. The Tomb Raider app would show an error message if that file did not exist.
After installing .apk and .obb file I started the game. The copyright notice, then the logos of Square Enix, Core and Realtech-VR appear, and the first frame of the intro video. Then it crashed, and I was back at the launcher.
I sent the log I got via adb logcat to the support, and again got dismissed:
We are sorry to hear that you are having trouble launching Tomb Raider on your OUYA. Unfortunately we cannot provide support on this platform as the game is not distributed on or to the OUYA.
We apologise for any inconvenience this may cause.
A day later I found a thread on ouyaforum.com about Tomb Raider Classic, and it gave me an important hint: You can skip the intro movie by hammering the red button on the controller. If you're quick enough and press it within the 100ms window before the movie player crashes, you'll get into the main menu!
It was cool to see the main menu, and I could even start the training session in Lara's home, as well as the normal game - if I managed to skip their intro videos.
Then the screen was filled with the button overlays, and I could use the OUYA's controller touchpad to press them. Apart from the red O button on the controller, no other button, analog stick or the digital pad worked.
So close, but so far away - still the Square Enix support had said there was controller support, and I just had to find out how to make it detect the OUYA controller.
At first I used jadx-gui to decompile the .apk file into nearly-real-java files that I could inspect. The input handling code is at com.realtechvr.v3x.input, and there are three classes:
Gamtel was only activated if your device model was R800i, the input device model contained gametel or if the default device input method class starts with com.fructel.gametel.
The HoneyComb input handler looked more promising; it had a whitelist for controllers for Android versions < 4.3:
At first I pondered how to change the input device name, but that required modifying and re-compiling the kernel, which I did not want to do again.
Then I saw that for Android 4.3 or later, every controller was accepted! The choices I had were:
For simplicity, I chose the last option :)
The java code produced by jadx cannot be compiled, so I had to resort to apktool which generates .smali files that contain a plain text version of the Android Dalvik VM byte code .
I quickly found the HoneyCombInputController::isSupported method and the API version comparison code:
.line 133 .local v2, "ids":[I sget v4, Landroid/os/Build$VERSION;->SDK_INT:I const/16 v5, 0x12 if-lt v4, v5, :cond_0 .line 135 invoke-static {}, Lcom/realtechvr/v3x/input/HoneyCombInputController;->initBindings()V
0x12 is the Android version being compared, and I simply changed it to 0x10 (16), which is the OUYA's android version.
I re-packaged the code up with apktool, signed it and installed it via adb on the OUYA.
Then I started it, skipped the intro, and ... it worked! Finally I was able to play the game as it was meant to be! I rejoyced like a child.
Now that I knew how to fix things, I checked the movies issue again. The code told me that even when I removed the movie files from the .obb package, the movie player was still initialized and started.
I hoped that preventing the player from being initialized and started also prevented the crash. There was an if statement in the SDLActivity::playFMV method which checked if the Android version was >= 11, and I simply reversed the condition in the corresponding .smali file:
.line 921 sget v5, Landroid/os/Build$VERSION;->SDK_INT:I - if-gt v5, v6, :cond_1 + if-lt v5, v6, :cond_1
After building, signing, zip-aligning and re-installing the game on the OUYA I could start it without any crash!
+
]]>
Now that all is done, I could enjoy some hours of discovering the mysteries of caves with Lara:
During playing I noticed several small problems:
Sometimes when getting into the main menu, the buttons do not work. I had to press U twice to get to the OUYA game context menu and press A to get back to the game; the buttons then usually work.
During gameplay sometimes they stop working and it seems as if you're in look-around-mode. Pressing L2+L3+R2+R3 and the look-around analog stick (the right one) usually fix this.
Published on 2015-09-09 in bigsuck, games, ouya
I bought my OUYA android gaming console mainly as to be able to play old games via emulators, for example Super Nintendo classics like Super Mario World or Aladdin.
For SNES emulation I use Snes9x EX+ which works fine - but to start a game, you have to start the emulator, use the "Open ROM" menu, navigate to the .smc file to finally run it. That's definitely not easy-to-use.
There are tools like Nostalgia that provide a graphical interface to start ROMs with a single click (once you started the interface of course) and automatically download covers. But that was still a click too much for my taste; I wanted to have the SNES games directly available in the OUYA launcher like all the native games.
I did try this already a year ago but failed to start the emulator with the game; this time - after trying to get Tomb Raider to run I had some experience with decompiling Android applications and could look under the hood of Nostalgia. Starting Snes9x EX+ with the game file path was easy:
Intent intent = new Intent();
intent.setComponent(
new ComponentName("com.explusalpha.Snes9xPlus", "com.imagine.BaseActivity")
);
intent.setAction("android.intent.action.VIEW");
intent.setData(Uri.fromFile(new File(fileName)));
Now all left to do was extracting the .smc file shipped inside the package file, for which there were enough examples on the internet.
The result is a tool to generate OUYA SNES rom launchers with minimal effort: Provide a title, a ROM file and a image, and the script does the rest. Install the .apk on your OUYA, and enjoy the game.
The source code and build instructions for ouya-romlauncher are available on my own git server as well as GitHub.
My OUYA's PLAY menu now looks like this:
Game details are missing, but that has to wait until I build my own OUYA ROM store :)
Published on 2015-09-14 in games, ouya
Some days ago I stumbled across a thread on ouyaforum.com, [Side-Load] Commander Genius (Commander Keen series interpreter) : It seemed to be possible to play Commander Keen on the OUYA!
Commander Genius is a Commander Keen game file interpreter, similar like ScummVM interprets the Monkey Island game files. Commander Genius is available for the most platforms, including Android (which OUYA is based on).
Currently, Commander Genius is not available in the OUYA store and has to be installed manually.
Unfortunately, the Google Play page requires a Google account with a registered Android device, which I don't have. Also the Commander Genius Download page does not list the apk file, despite it being free of charge on Google play.
The Online apk downloader still allowed me to grab Commander Genius version 1.7.2.0 (although the current version is 1.7.4.0).
You may download the copy from my server: net.sourceforge.clonekeenplus-1.7.2.0.apk .
Copy the apk file onto an USB stick, plug that into your OUYA and install it with FilePwn.
It will be available in the Play menu because basic OUYA support is already included!
At first you have to select the Keen game you want to start. Commander Genius already ships with the freely avaiable episodes 1, 4 and 7. The controller's D-pad can be used properly here.
The controller's D-pad can be used to move Keen, and the four OUYA buttons are mapped to HUD, Fire, Pogo and Jump.
Before playing a game, make sure to map the "Back" button in the controller settings - it is required to go back to the main menu, to save and load the game.
The analog sticks do not work. The upper buttons L2 and R2 can be mapped, L3 and R3 get double mappings. Don't try to map those.
Music works in Commander Keen 1 if you enable the High Quality Pack in the download section of the "change device properties" window that can be accessed when starting Commander Genius (Use the touchpad to click the blue bar at the top of the screen to access this menu).
Published on 2014-06-23 in games, ouya
With version 1.3.37, Wine got a complete own DIB engine. I've been waiting since ~8 years for this to happen, because now I can play the classic strategy games Age of Empires and Age of Kings with Wine on my Linux machines properly. Before, the games would stutter and be generally not playable because they were so damn slow. With the fresh DIB engine, all that trouble is a fading memory.
After installing Age of Empires on my Ubuntu 11.10 box with Wine 1.4rc2, running patch 1.0c and executing the no-cd crack, I could start the game. Launching the first campaign, I missed an important thing: The music. Since the music is so important for the feeling of the game, I decided to fix it.
Age of Empires' music is delivered in MIDI files, and since nobody has soundcards with hardware MIDI support, you need a software synthesizer like TiMidity++.
Installing TiMidity together with Freepats (a sound font) is possible with apt-get. Note that you do not need timidity-daemon since one can run it by hand when you need MIDI sound:
$ timidity -Os -iA
When you did that, you can run aplaymidi to see that it is working:
$ aplaymidi -l
Port Client name Port name
14:0 Midi Through Midi Through Port-0
128:0 TiMidity TiMidity port 0
128:1 TiMidity TiMidity port 1
128:2 TiMidity TiMidity port 2
128:3 TiMidity TiMidity port 3
Without TiMidity running, there would me "Midi Through" only. Testing MIDI playback is also possible with aplaymidi:
$ cd "~/.wine/drive_c/Programme/Microsoft Games/Age of Empires/sound"
$ aplaymidi --port 128:0 MUSIC5.MID
Contrary to the WineHQ MIDI wiki page did I not need to change any registry settings. Age of Empires now just plays awesome music!
Published on 2012-02-14 in games, linux, music, wine
After reading on WineHQ that Tomb Raider runs on Wine now, I did try the demo on my harddisk again. And guess what? It really worked. I played the whole demo, and decided to buy it.
Tomb Raider was the first game I ever bought... It was great that decade ago, and now I felt I wanted to relive the experiece again :)
Installation was a bit tricky: Since I install my games below /games/, and only the root directory was available in wine as drive, setup told me I didn't have 7GiB for installation. Solution was to create another drive that mounts /games/, and installation worked fine. And I had to cd to /mnt/dvd/, otherwise setup wouldn't run.
Running the game did also not work out of the box. I fetched the latest patch and a no-cd crack, and with this (thanks, Deviance!) I could finally start the game. The videos at the beginning take just half of the screen, but the game itself does work really nice.
I had to disable water effects and reflections, since they seem to have some bugs in Wine's D3D implementation, and Lara's shadow is flipped when viewed from the left, but otherwise I'm enjoying a nice action-adventure on my Gentoo box.
Published on 2007-03-28 in wine, games