Christians Tagebuch: gamestick

The latest posts in full-text for feed readers.


GameStick games on the OUYA

Some of the 188 games available on the PlayJam GameStick were not available on the OUYA. Ever since building my replacement GameStick server I dreamt of making the GameStick games available on the OUYA.

Andiweli had the same idea and went through the tedious task of installing and testing each of the GameStick games on the OUYA. The result was a long compatibility list.

This list sat for a year until he came back and asked how we could bring them to the OUYA. The main problem is that each game needs a special tv.ouya.intent.category.GAME intent in its manifest file - otherwise it will not appear in the PLAY menu. Manually adding that to the games is possible by modifying the original game .apk, but that breaks the signature and requires us to host two versions - neither of which I was fond of.

Community content

At first I tinkered with community content, a feature introduced with the Chickcharney 1.2.1353 firmware update - the last major update ever released. That feature was never used by any games, but I did try out the pre-compiled cc-sample app shipped with the 2.1.0 development kit. It didn't allow me to add custom entries to the play menu, though.

CC Sample App Create an emblem Context menu Emblem information Emblem editing Community content in the PLAY menu Emblem in the community content menu Emblem details

Bundles

Then I remembered that I already solved this problem for SNES games in 2015 by building a small launcher application that only acts as proxy to start the actual game. The Chickcharney firmware also brought support for bundles, which lets you purchase multiple games at once, and all of them get downloaded automatically! This would make the perfect solution: Bundle the GameStick game with the launcher, and people can click "download" and get both.

Two hours after I communicated my plan, Andi demo'd the first launcher in a small video.

Then I only had to think hard about a way to store the launcher data and cross-link the launchers with the actual games, build a script to convert GameStick meta data files into OUYA meta data files, modify the server software to automatically combine those linked games into bundles, expand the API documentation with the new information I got from implementing bundles and adjust the OUYA-API-to-HTML-converter to handle bundles.

7 days later I had everything in place and the first bundle downloaded on my development OUYA.

Fast-forward 4 days and we've got 11 GameStick games easily installable on the OUYA!

GameStick games in the OUYA home row PlayJam GameStick category in the OUYA store Bundle details Bundle detail contents button Bundle content list Automatic download of game + launcher at once

Also on: Mastodon and Twitter.

Published on 2025-11-13 in ,


GameStick server HTML interface

After several months of work the community GameStick server has a HTML interface that lets you browse all the 188 games available for the GameStick.

On a desktop browser, the UI looks like the original marmalade-based GameStick interface. Use a smart phone or tablet device and the website looks a like a typical modern mobile web page.

The web interface has a couple of improvements over the old UI: You may filter games by genre and features - it's easy to find games for 2 players for some couch co-op, or platformer or racing games.

Featured games list List of all games Game details Achievement list

Also on: Mastodon, Twitter.

Published on 2025-09-03 in , ,


GameStick: Purchases implemented

The PlayJam GameStick community server software got another feature: Purchases. You are now able to buy games (instead of having all of them available for free) and in-game products like levels and powerups.

Your wallet has an infinite amount of money, so you don't risk going broke :)

Purchasing games

All games - even already installed ones - have to be bought now. After buying, the game download starts automatically.

The purchase dialog is a web view, displaying a HTML page delivered by the server. I had no idea how it looked like - there were no screenshots to find with my Google-Fu. In the end I found a video of Lee Chapman demoing the Gamestick, and near the end he buys Riptide.

I took screenshots, resized and warped them until they had the correct aspect ratio and size. Then I re-built the layout in HTML and CSS that a 2013 browser understands.

There was no documentation about the purchase requests and responses. The requests were easy to document since I could see them in the server logs, but the responses were hard: Some of them are handled in the Java library, while others are passed to the Marmalade UI and parsed there. The important things like "success, download now" were of course in the compiled C code, and I was forced to use Ghidra to make a bit sense of it.

The magic words are:

{
    "body": {
        "success": true,
        "message": null,
        "action": "CLOSEPAYMENT"
    }
}

Purchasing a game

Implementing purchases fixed a long-standing bug: The "uninstalled apps" view in the settings crashed, probably the Marmalade interface was never meant to handle 188 games. Now only the purchased games are listed there - without crashing.

Uninstalled apps

In-game products

A number of games have in-game products: "Top Gear: Stunt School" allows to buy nuts, dollars and permits. In "Pacman Tournaments" you can buy tokens (3500 for 99.99USD!), "Rise of Glory" lets you spend money on airplane packs and in Prince of Persia you can buy coins (1000 for 1.99, 100000 for 99.99$).

Of course we did not have backups and I had to decompile the game apk files to find the product IDs that they used. Products had to be registered at the server, and the game only asks the server which products are available.

More often than not, decompiling did not work because the game was made with Unity or some other engine, and I miss the tools to unpack those files. In this cases I let the server return all products ids from 1 to 1000, with prices from 0.01€ to 10.00€, and could immediately see which products were used. This did of course only work on some games; others crashed when they received more than 15 products.

OUYA games were much easier in this regard: They send all supported product keys to the server, making it a breeze to quickly add products for unsupported games. Although, easier only after I broke their DRM :)

At one point I was finished and had only find products for the last game, Repulze. Then I saw that - instead of sending integer number product IDs, just as all other games do - this game sends string keys like com.pixelbite.repulze.iap.toolkit_pack1! I had to modify the database, parts of the purchase API and the game data schema to support that :(

But now this feature is really complete, and you can purchase things in the following games:

  • Falling Bird
  • Pac Man Tournaments (does not work; needs defunct Namco server)
  • MIMPI
  • Prince of Persia
  • Repulze
  • Top Gear: Stunt School Revolution
  • Sky Gamblers: Rise of Glory

Start buying in-game product Confirm Purchase successful

Game archival status

In 2024-09 we had 163 of 188 games archived. Thanks to GameStick fans Kazdan, Krzysiu, Ryo and TheMartinMess22 we have 170 now, a whopping 90.4%!

Newly rescued games:

  • Canabalt HD (Kittehface Software)
  • Dead Rushing (Dancing Cat Development)
  • Finger Hoola+ (Plantpot)
  • Sci-Fighters (Headup Games)
  • ShaqDown (One Spear)
  • Spacecat (Platty Soft)
  • Wasteland Bar Fight (Kybernesis)

Also on: Mastodon, Twitter.

Published on 2025-06-25 in


PlayJam GameStick timeline

A collection of links regarding the history of the PlayJam GameStick microconsole.

Short version
Age Date Event
2013-01-02 Kickstarter funding campaign started
1 month 2013-02-01 Kickstarter funding campaign ended, 5691 supporters, 647.658$
10 months 2013-10-24 First Review at golem.de
11 months 2013-11-20 German backers receive Gamesticks: GameStick ist da!
1y 5m 2014-05-08 Last firmware update 0.9.2071
1y 5m 2014-05-31 Kickstarter docks were shipped
1y 8m 2014-08-15 Inventory sell-off begins: GameStick for 19.99$
3 years 2016-01-05 PlayJam says GameStick will be running in the forseeable future
3y 2m 2016-03-09 Last Facebook post by PlayJam
4 years 2017-01-09 Official server shutdown

Detailed timeline

Date Category Event
2012-12-10 PlayJam First PlayJam tweet: We are live with our pre-launch campaign. Follow us! Visit http://GameStick.tv or like us on http://facebook.com/GameStickNews
2013-01-02 Kickstarter Kickstarter funding campaign started
2013-01-03 Kickstarter Update #1: GameStick Day 1 - Wow.
2013-01-09 Kickstarter Update #4: 320.000$ reached: Stretch Goals Announced!
2013-01-11 Kickstarter Update #6: Stretch goal 1 reached: Stretch #1 Reached!
2013-01-18 Kickstarter Update #8: 400.000$ reached: You spoke and we listened..
2013-01-30 Kickstarter Update #13: Miracast support: Working with Miracast
2013-02-01 Kickstarter Kickstarter funding campaign ended, 5691 supporters, 647.658$: Wow! What a result! Incredible! Blown Away!
2013-03-19 Kickstarter Update #17: Developer unit in production: Dev Kits, Partnerships and Further Updates
2013-04-19 Kickstarter Update #23: GameStick DEV kit Unboxing Video
2013-05-27 Kickstarter Update #29: GameStick Features on the BBC.
2013-06-13 Kickstarter Update #34: Companion app: Demo showing PlayJam's Companion App working the GameStick UI
2013-10-23 Kickstarter Update #45: Shipping stalled: Shipping update.
2013-10-24 Review Golem.de: Playjams Gamestick im Test: Die Android-Konsole für zwischendurch
2013-10-30 Review Eurogamer: GameStick review: Stick it.
2013-11-05 Review Techradar: PlayJam GameStick review: The latest Android console doesn't get the formula right
2013-11-07 Kickstarter Update #46: Sticks are shipping, Dock shipping delayed: Update - Feedback.
2013-11-11 Review Engadget: GameStick review: Android console gaming still awaits its king
2013-11-11 Store 45 games available: Engadget review
2013-11-15 Store Over 50 games available: GameStick: Aktuelle Spieleliste
2013-11-20 Kickstarter Germans backers receive Gamesticks: GameStick ist da! Die Verpackung…
2013-12-04 GameStick Firmware update 0.9.2049: (source)
2013-12-12 GameStick Firmware update 0.9.2049 report: GameStick Software-Update 0.9.2049
2014-01-19 Store 68 games available (source)
2014-02-03 GameStick Firmware update 0.9.2058: (source)
2014-02-06 Kickstarter E-Mail: Docks are still not shipping: Dear Backers, Let me start by apologizing for the lack of news and or updates on the GameStick project over recent months - in particular on the status of the docks.[...]
2014-04-04 Kickstarter Last Kickstarter page update #47: Dock situation: Update. (archived copy)
2014-05-01 Store 84 games available (source)
2014-05-08 GameStick Firmware update 0.9.2071 (source)
2014-05-21 Kickstarter E-Mail to Backers: Dock will be shipped next week Update: GameStick Dock
2014-05-30 Store 90 games available (source)
2014-05-31 Kickstarter TopFree got its kickstarter dock: GameStick Dock im Praxistest
2014-07-12 Review Telegraph PlayJam article, 35000 units at GameStop: Get ready for TV gaming to move up a gear
2014-08-15 Sell-off Price at GameStop: GameStick 19.99$ (source)
2014-08-21 Sell-off Price at GameStop: Dock 15$ (source)
2014-09-01 Sell-off Price at GameStop.com: GameStick 19.99$ (GameStick für $19.99, source 2)
2014-09-18 Sell-off PlayJam sells off inventory on ebay Gamestick Sell off?
2014-09-23 GameStick Custom Firmware CFW 1.4 (source)
2014-12-05 Sell-off Price in GameStop store: GameStick 17$, Dock 5$ (source)
2015-01-05 Sell-off Price at Gamestop: Controller 9$ (source)
2015-10-20 PlayJam GameStick website redirects to flareplay.com, only zone.gamestick.tv still available: Neue PlayJam-Konsole FlarePlay und kostenlose AGameAWeek Collection für GameStick
2015-11-23 PlayJam Playjam Titan prototype device sent to shanti: PlayJam Titan, (Gen 2 Gamestick?)
2016-01-05 PlayJam PlayJam says GameStick will be running in the forseeable future: Tweet
2016-02-26 PlayJam Last Tweet by @PlayJam
2016-03-09 PlayJam Last Facebook post by PlayJam
2016-05-15 Store 177 games available (source)
2016-10-09 Store Game download not possible since months: GameStick ist „tot“
2017-01-09 PlayJam Server shutdown (taken from topfree screenshot)
2017-01-11 Store Topfree blog post about server shutdown with screenshot of Gamestick homepage: GameStick: Das offizielle Ende
2017-01-12 Store 177 games available (source)
2017-11-09 Store Shutdown: "Store closed earlier this year": Comment: No - they closed the store earlier in the year. As far as I know you can't download anything from the GameStick servers any more.

Published on 2025-04-11 in


GameStick: Remove melted rubber coating

2013 PlayJam GameStick devices have a all-around rubber coating, and the controllers have a rubberized bottom. After 11 years, the coating's chemicals dissolved, leaving a sticky mess that sticks to your fingers when touching it.

GameStick controller with sticky bottom

It is possible to get rid of the coating by rubbing it off with Isopropanol (Isopropyl alcohol), an old sock and a pair of surgical gloves.

Cleaned controller

The rubber coating was mentioned in the 2013-07-11 Kickstarter Update #36: The Golden Sample:

  • Put a rubberized coating on the bottom of the controller. This gives the finish a really nice quality feel.
  • Used a rubber coating on the GameStick so that it did not scratch when inserted in to the controller. It really looks and feels fantastic as a result.

Also on: Mastodon, Twitter

Published on 2024-12-31 in ,


GameStick Companion app skins

The PlayJam GameStick had native support for using mobile phones as game controllers via its Companion app. Youtube still has a the official demo video showing it' usage.

When starting the app, it would show the GameStick and you could connect to it. Then the GameStick would deliver a branded controller skin to the app, which then displayed a custom controller interface for the game (or the standard one if the game had no own).

While looking through the files of a GameStick backup, I found some of the cached files in the /data/com.playjam.ca.service/files/ directory: .bundle and .meta files. The .bundle files are just Zip archives that contain an XML configuration file, background, button and stick images.

I took the time and built some little scripts to convert the XML configuration file via XSLT into a SVG image, and a script to embed the bitmap image files into the svg file. They can be found in the companion-app repository on Codeberg.

Game controller images

System default

Evac Final Freeway 2R Fishy Rush Kosmik Revenge MAGNETOID HD - Robo Runner Metaloid Reactor Guardian Oddy Smog's Misadventure Quantic Pinball Raiden Legacy Riptide Shadowgun Ski Safari Slingshot racing Smash Cops Stalagflight Stop the Birds Tales of Illyria 1

Also on: Mastodon, Twitter.

Published on 2024-12-15 in


GameStick server delivers firmware updates

My PlayJam GameStick replacement server is now able to deliver firmware updates to the GameSticks: Version 2049 to 2058, and 2058 to 2071.

Firmware images

The GameStick server was shut down in 2017, long before we tried to preserve the system. We thus could not download firmware images from the server, but GameStick Fans member Ryo found the firmware files for 2058 and 2071 somewhere on the internet and collected them for us.

Joe, a new GameStick Fan who joined in 2024-11, found the firmware image for 2049 on his stick.

Those full firmware images are ~180 MiB large and fully reset your GameStick - all settings and games are wiped. They can't be used for automatic updates.

Firmware updates

After I manged to build a firmware update that enables the Android debug bridge, Ryo found an official firmware update on one of his GameSticks in 2023: Update-2058-to-2071.img. It was located in the /cache/ folder and only 3.2 MiB large.

Another stick contained Update-2049-to-2058.img (9.9 MiB).

Those .img files are small downloads and keep all the settings and games as they are - the right ones for automatic updates.

Firmware update process

The initial request to check for firmware updates is pretty standard: A HTTP POST request to http://update.gamestickservices.net/check.php (actually 2 different domains and one hard-coded IP address), which returns a JSON structure that tells the stick if a firmware update is available, the textual changelog and if the stick must install it ("forced update") - and of course the download URL.

By reading the decompiled OOBE code, I figured out that the download URL gets modified and URL parameters are appended:

  • &i=-2 - return the total size of the download
  • &i=-1 - return the number of chunks
  • &i=0, &i=1 etc. - download the firmware parts

The firmware update is split into parts (chunks) of 100 kiB, and each chunk is "encrypted" by XORing it with the magic number 0x5b, and the binary SHA1 sum is put before the data itself.

My guess is that the developers did that to prevent people installing their own updates - a measure that was already defied in 2014-03, known as the lukepanic hack method. That hack supposedly (I don't have the files) opens a web server and delivers a custom firmware update :)

Server implementation

My server now contains a script that takes a firmware update, splits it into chunks, encrypts and signs them - so that the download files can be delivered statically.

All firmware images and updates known to us have been uploaded to the Internet Archive: 0.9.2049, 0.9.2059 and 0.9.2071.

Next we'd really like to have a developer firmware, and also know that there was a 0.9.2079 version we do not possess yet. Let's hope we'll find more sticks with cached firmware files on them.

Screenshots

Console UI update process

Firmware update notification Update 0.9.2058 is downloading Download finished Update is installing Android is upgrading Firmware is up to date! .. or not :) Update now to 0.9.2071 Update boot screen Now really up to date

OOBE update process

Searching for updates during setup Downloading 2058 update Update downloaded Firmware is up to date

Also on: Mastodon, Twitter.

Published on 2024-12-03 in


GameStick server improvements

I've been continuing work on the Playjam GameStick replacement server and managed to implement two features: Achievements and leaderboards.

Achievements

Achievements are things you reached in a game, e.g. jumping onto 3 enemies without touching the ground in Bloo Kid 1, a "Triple hit".

Whenever a player unlocks an achievement, the game sends that information to the server - a simple set-complete API call with the ID of the achievement and the session ID of the user. The server then has to store it in a database, and return it when requested.

Achievements can be requested in several locations:

  • The GameStick's main user interface lets you look at a list of all games you have achievements for.
  • The achievement overview lets you inspect all achievements for each game in detail.
  • Games fetch the list of achievements when they start, and want the information if the user has unlocked them already. This is helpful when you have multiple GameSticks and want to continue where you left off on the other stick.

GameStick UI: profile GameStick UI: Games with achievements GameStick UI: Game achievement details

Each of those locations had its own API call. Implementing the first and the last were easy, but the per-game achievement overview in the GameStick UI was pretty hard - the JSON structure was not parsed by the low-level GameStick database interface, but was handed off unparsed to the Marmalade-based UI, which parsed it and then crashed.

Guessing the property name for the achievement list yielded no results. Since the Marmalade SDk compiled code into C, it is pretty hard to decompile.

Fortunately, I found a Ghidra plugin for Marmalade, and after fixing a bug I could load the Console.s3e file into Ghidra. After some looking I found the property name for the achievement list: gameList.

Ghidra: Console.s3e analysis

All achievements were unfortunately registered at the server, and we have no backups of them. This means the games have to be decompiled and inspected to find out which achievements exists, what their title and description is. The achievements on the server also had images, which are lost forever.

Currently the game metadata repository has achievement information for Bloo Kid, Boulder Dash, Prince of Persia and ShaqDown.

Achievements in Bloo Kid Achievements in Prince of Persia

Leaderboards

Unlike the OUYA, the GameStick had native support for high score lists (but only one per game).

After implementing achievements, leaderboards were quickly done - the only API calls required for all games I know are saving the current score, and fetching the top 50 scores.

A couple of games provide high score lists: FallingBird, FourColorTaxi, GridLock, Magnetoid and Prince of Persia.

Stop the birds unfortunately fails to show the leaderboard for yet unknown reasons.

Leaderboard: 4 color taxi Leaderboard: Falling bird Leaderboard: Gridlock Leaderboard: Magnetoid Leaderboard: Prince of Persia

Also on: Mastodon, Twitter.

Published on 2024-10-30 in


86.7% of all GameStick games archived

This week the GameStick Fans community reached a milestone: Of the 188 games that were once available for the PlayJam GameStick, 163 have been archived and only 25 remain missing. That's 86.7%; a huge success for the project that started in 2024-04.

Playjam GameStick user interface

Obtaining apks

The lack of a GameStick community meant that nobody had backed up the available games before PlayJam announced the micro console's death in 2017.

After collecting cache files from GameSticks, 37 games could be downloaded from their AWS S3 URLs without authentication.

Another way to get the games is to contact the developers, but we had only limited success in getting answers to our e-mails, let alone .apk that the developers often did not have anymore.

Extracting installed games from existing GameSticks was the third option to get the game .apk files into our hands. It took a while and quite some effort until we were able to copy files off GameSticks - the devices were locked down and allowed neither file access nor sideloading.

The following people helped by copying games off their GameSticks or contacting developers to get .apks directly from them:

  • Alex Shorts
  • Andyweli
  • cweiske
  • eyehorus (Wayne)
  • jrronimo
  • Kazdan R. Azahn (KRAZ Pro.)
  • Lee Chapman
  • Ryo
  • Toast (Liam)

Missing games

We do not yet have the .apk files for the following GameStick games:

# Game name Developer
1Animalz: Super SquadInvaderGames
2Baa Baa BomberRatJar Games
3Beast Boxing TurboGoodHustle
4Canabalt HDKittehface Software
5CR FootySacred Duck Games
6Crumble ZoneRebel Twins
7CUBISTICPytebyte
8Dead RushingDancing Cat Development
9Dr. Bulbaceous Puzzle SolverWetgenes
10EDGEMobigame
11Finger Hoola+Plantpot
12Furfur and NubloDevilishGames
13Fuz RushJet Stone Studios
14Groundskeeper 2OrangePixel
15Nimble QuestNimblebit
16OrborunTiny Lab Productions
17Pix'N Love RushAdvanced Mobile Applications
18REDKnife Media
19Sci-FightersHeadup Games
20ShaqDownOne Spear
21SpaceCatPlatty Soft
22Space GruntsOrangePixel
23Space Vermin GameDisciples
24Usagi YojimboHappy Giant
25Wasteland Bar FightKybernesis

If you have a GameStick with one or more of this games - follow the apk rescue instructions, or ask for help in chat.

Archived games

The following games have been backed up and archived in the GameStick library at the Internet Archive.

Recent gameplay videos can be found on Wayne’s Gaming Den "PlayJam GameStick" playlist

Game name Developer
100 RoguesFusion Reactions
4-Color TaxiShadowBrain Games
Alien SpindomeAGameAWeek
Alpha CollexionAGameAWeek
Alpha WaveHardline Studios
Animal BattleOvogame
Animal Math Games for KidsEggroll Games
AquaVentureJellyfish Games
Asteroid 2012M-Spacemedia
Back to BedBedtime Digital Games
Battlebow - Shoot the Demons HDHaybyte Studios
Beasts BattleBadim
Beat DriftLunarPixelGames
Beta CollexionAGameAWeek
BionflytheOmenbit
BlastTraxAGameAWeek
Blockman Gets HungryAGameAWeek
Blockman WorldsAGameAWeek
Bloo Kidwinterworks GmbH
Boson XIan Mclarty
Boulder Dash - The FULL CollectionFirst Star Software
BounceABallAGameAWeek
BoxsplodingsAGameAWeek
Brave WarriorsGeorgeGames
Catcha Catcha AliensHotsauce Interactive
ChuckABallAGameAWeek
codestormPOLYGAMe d i g i t a l
Cro-Mag Rallycitizen12 studio
Crypt of BaconthulhuHamster Republic Productions
Cube DefenderPark Posse Games
Cyberflow Larissa Davidova
Dark IncursionBig Blue Bubble
D-GLESKokak
Disc BlasterAGameAWeek
Diversionezone.com
Epic Eric232 Studios Ltd
EvacHexage
Every Good Bird Deserves FlappynessAGameAWeek
Expendable RearmedRetrobomb
ExperimentHeadup Games
ExZeus 2HyperDevbox Japan
Falling BirdOne Legged Seagull
Final Freeway 2ROyatsukai Games
Fishy RushSilenGames
Fist of Awesomeifightbears
FlappynougImogia Games
Fly to the Moon!Badim
Fox Tales: The Skeleton KingWon-O-Soft
Freeeshrealtech VR
FutrinoAGameAWeek
Future Classics - 1986 EditionAGameAWeek
Galaga Special EditionNamco Bandai
GameStick Media PlayerPlayJam
Gene Effect Lightstorm3D GmbH
Genius Greedy MouseSpace Fractal
Greenie's Little Adventure AGameAWeek
GridlockLudometrics
GunslugsOrangePixel
Harpoons and BallsAGameAWeek
Haunt the House: TerrortownSFB Games
Haymaker Team Haymaker
Hazard RushSurreal Street
Heroes of LootOrangePixel
Hero of ManyTrickster Arts
Hoppy BobbyAGameAWeek
Icy Towerfreelunchdesign
INDY500® Arcade RacingHyperDevbox Japan
Invisible Munky 2AGameAWeek
It Takes TwoEpiphany
Karl's Tiny AdventureAGameAWeek
Knightmare TowerJuicy Beast
Kosmik Revengerealtech VR
LoveThe Bancast
LvLnTanuki Entertainment, Inc.
Magic RampageAsantee Games
MAGNETOID HD - Robo RunnerRoom 247 Studio
Maldita Castilla Locomalito
Metaloid Reactor Guardian Retro Revolution Games
MIMPISilicon Jelly
MiniSquadronAdvanced Mobile Applications
MiseriaRatJar Games
Momonga Pinball AdventuresPaladin Studios
MotorbikebaKno Games
Muffin KnightAngry Mob Games
Munky Blocks dxAGameAWeek
My Little Rescue HelicopterAGameAWeek
NeonPlat ExtremeAGameAWeek
NeonPlat's Cosmic AdventureAGameAWeek
Night Riders, 3D Arcade Racingbaka-neko.fr
No Gravityrealtech VR
Oddy Smog's Misadventure Play Medusa
OverdroyRoberto T. Fauri
PAC-MAN + TournamentsNamco Bandai
Panic FlightAdvanced Mobile Applications
Paragon InfiniteBipolarDesign
Particle Arcade ShooterDianox Games
Penguin ParadeAGameAWeek
Platdude in A Bit of A DoAGameAWeek
Platdude in A Bit of a SpinAGameAWeek
Platdude in A TubeAGameAWeek
Platdude in Battling OstrichesAGameAWeek
Platdude in SpaceAGameAWeek
Platdude in Swamp GolfAGameAWeek
Platdude in The Spirit CollectorAGameAWeek
PoperlyAGameAWeek
Prince of Persia: The Shadow and the FlameUbisoft
Puzzle 2 HDAdvanced Mobile Applications
Quantic PinballShineResearch
RadiantHexage
Raiden LegacyDotemu
Reckless GetawayPixelbite
RepulzePixelbite
RetroBallAGameAWeek
RetroidTaurris
Retro RacingJamie Woodhouse
RiptideVector Unit
Royal OffenseBadim
Saturday Morning RPGMighty Rabbit Studios
Sela The Space PirateFeili Chen
Shadow BladeDead Mage
ShadowGunMadfinger
Sheep in Helldavid.cm
Shuttle Quest 2kTACSGames
Ski SafariDefiant Development
Sky Gamblers: Rise of GloryNamco Bandai
Sky HeroKokonut Studio
Slingshot RacingSnowbolt
Smash CopsHutch
SoccertronForgotten Systems
Soldier NightmareGeorgeGames
Soul PowerGhost Time Games
Sound RideOutOfTheBit Ltd
Space Ax'RIOT digital
SpaceBallGeorgeGames
Space Clusters DXAGameAWeek
Space Station A6-100AGameAWeek
SpikeDislike2AGameAWeek
SpikeDislike3AGameAWeek
Spiky TowerAGameAWeek
StalagflightStalagflight Team
Stop The BirdsHaybyte Studios
Stop The BotsScary Robot Productions
Super Grid RunRefresh Creations
Super Mega WormDeceased Pixel
Tales of Illyria 1Little Killerz
Tales of Illyria 2 - Beyond the Iron WallLittle Killerz
Tales of PocoroCurved Cat Games
The Button AffairModern Dream
The Chronicles of PandoraSuprnova Entertainment
The Other BrothersSimian Squared
The Tribloos 2Bumpkin Brothers
Tim-Tim "The Mighty Gnome"" Spoonweaver Studios
TOFU Media CenterPivos
Top Gear: Stunt School RevolutionBBC Games
Towelfight 2Butterscotch Shenanigans
TURBINEGeorgeGames
TurboFly HDOsaris Games
Twin RobotsThinice
unwindJijjy
VectorNekki
Vendetta Guild Software
Zombie Kill of the WeekPanic Art Studios
Zzap LinesAGameAWeek

Also on: Mastodon, Twitter.

Published on 2024-09-08 in


ADB access on GameStick

I'm on the quest to make PlayJam GameStick micro consoles usable again. Building a replacement server is underway, and collecting game information is nearly finished - but not much progress has been made obtaining the actual .apk files.

37 apks could be downloaded from the PlayJam Amazon AWS S3 bucket, but the rest of them are not accessible although we know the URLs. They are probably only accessible with a temporary access token that the GameStick server once generated.

We contacted a number of developers and asked for the apks, but most don't have them anymore - they are lost. Some developers don't even remember having programmed for the GameStick :) And many don't react on e-mails.

The last resort is to get the .apk files off the GameSticks that have them installed. PlayJam wanted to prevent that, so they locked the GameStick down, preventing access to the Android settings, disabling the adb daemon and even removing the functionality to sideload games (which was available in early firmwares).

Telnet server

Simply starting the Android settings or adbd via the advanced launcher TOFU plugin did not work. I needed to find a way to inspect the GameStick and run applications on them to see what worked. Because adb access was not available, I decided to build my own telnet server that would run as TOFU plugin on the GameStick.

I found a nice Python 2 socket server example and used that as base to build my own server that I could connect to with a telnet client. Development was easy because I could run the server locally. Only at the end I built a TOFU plugin that simply started the telnet server script.

One thing I learned was that the shell (my server) needs to take care of storing the current working directory, and also needs to implement change directory commands - those cannot be delegated to the system. After 2.5 hours I had a telnet server that ran on the GameStick, and I could finally inspect the file system and run programs:

cweiske:~/dev/gamestick/sync/tofu-plugin> telnet gamestick 5023
Trying 192.168.3.41...
Connected to gamestick.
Escape character is '^]'.
/> ls
acct
backup
boot
cache
[...]
/> whoami
u0_a40
/> am start -n com.android.settings/.Settings
[Errno 13] Permission denied

Now I could try to open the Android settings (which still fails) and start adbd - it turned out that running programs on the GameStick is only possible as root:

$ telnet gamestick 5023
Trying 192.168.3.41...
Connected to gamestick.
Escape character is '^]'.
/> su -c start adbd
/> quit
Connection closed by foreign host.

cweiske:~/dev/gamestick/sync/tofu-plugin> adb connect gamestick
already connected to gamestick:5555
cweiske:~/dev/gamestick/sync/tofu-plugin> adb shell
root@android:/ # pwd
/
root@android:/ # ls /data
GameStick
GameStickCache

Plugins

The result of this endeavour are two TOFU plugins:

Update 2023-06: An adbd-enabling firmware image is available at codeberg.org/gamestick-fans/firmware-adb-enabler/ - see GameStick: Black screen after OOBE.

Starting a telnet server with a TOFU plugin Starting adbd via TOFU plugin

Published on 2023-05-07 in