A downloadable game for Windows, macOS, Linux, and Android

AAAAXY is a nonlinear 2D puzzle platformer taking place in impossible spaces.

Although your general goal is reaching the surprising end of the game, you are encouraged to set your own goals while playing. Exploration will be rewarded, and secrets await you!

So jump and run around, and enjoy losing your sense of orientation in this World of Wicked Weirdness. Find out what Van Vlijmen will make you do. Pick a path, get inside a Klein Bottle, recognize some memes, and by all means: don’t look up.

And beware of a minor amount of trolling.

To reach the end, a new player will take about 4 to 6 hours, a full playthrough can be finished in about 1 hour and the end can be reached in about 15 minutes.

Main website: https://divVerent.github.io/aaaaxy/

This game can also be played on the web! Do note that the web version may have low performance depending on your system or browser and defaults to medium graphics settings; for optimum performance and quality please use a downloadable version!

For Android users, see below Google Play link, or download from F-Droid.

Download

Download
Windows (64-Bit) 29 MB
Version v1.3.219 4 days ago
Download
Windows (32-Bit) 29 MB
Version v1.3.219 4 days ago
Download
Linux (64-Bit AppImage) 29 MB
Version v1.3.219 4 days ago
Download
Linux (64-Bit) 29 MB
Version v1.3.219 4 days ago
Download
macOS (Intel and Apple M1) 33 MB
Version v1.3.219 4 days ago
Download
Android (APK) 81 MB
Version v1.3.219 4 days ago

Install instructions

If downloaded as a ZIP file, just extract the game executable out of it and run it. Depending on operating system, some kind of verification of the program needs to be done/skipped (Windows 10: click "More info", then "Run anyway"; macOS: click "Cancel", then go to "System Preferences", "Security & Privacy", and allow the app there).

If downloaded as an AppImage, run "chmod +x" on it, then run it (like any other AppImage).

This game can also be downloaded from F-DroidFlathubGoogle Play, the Snap Store, or, of course, from GitHub.

More details on the website.

Also available on

Development log

View all posts

Comments

Log in with itch.io to leave a comment.

Can you provide an Android APK directly to itch that doesn’t require Google Play Services? I specifically use itch.io to avoid that.

(2 edits)

Hm… good question. I haven’t considered that yet.

An APK download is already available on https://f-droid.org/en/packages/io.github.divverent.aaaaxy/ but it usually lags behind by about one week (not that many changes are still happening, right now I’m mainly doing localization) - is that good enough, or is there any additional value from uploading the APK directly on Itch?

If I did that, it’d have a different signing key than both the Play and the F-Droid version, which would basically prevent any kind of automatic updating. Or is there a way to automatically update from Itch APK uploads?

I’m using Mitch to download and update my games on Itch https://gardenapple.itch.io/mitch

(1 edit)

I see; I’ll see if I can somehow get this supported despite also having F-Droid, as I assume most users of Mitch also have F-Droid installed. And it’s really annoying I can’t use the same signing key on F-Droid and Itch, unless I wait a week for F-Droid’s build and then manually download F-Droid’s APK and upload it here.

For now I put the F-Droid link in the description here.

Thank you for your quick responses and careful consideration.

I just tried the F-Droid version on my Android device. It’s an Anbernic RG353P (one of these emulation handhelds from China) and I’m having a few issues with the game.

Firstly, this system has a 4:3 aspect ratio and the game seems to display in 16:9 letterboxed. The screen is already a bit small, and this letterboxing reduces visibility even further.

Secondly, there doesn’t seem to be any controller support. I tried pushing all the buttons on the integrated gamepad fruitlessly. While it’s certainly possible to use the touchscreen on this device, it’s small and hard to press compared to a smartphone. Furthermore, there’s many Android devices out there without a touchscreen such as the Nvidia Shield, Amazon Fire TV, and the infamous kickstarter console OUYA.

Lastly, I switched the graphics settings to lowest and it’s still a bit choppy to play which is surprising due to the 2D nature of the game.

If you’re interested, I’ve been journeying through itch and I’ve compiled a list of games I found working perfectly for this device. https://itch.io/c/3059442/anbernic-rg353p

I agree it’s not running optimally on mobile yet.

As for aspect, this is actually important for gameplay, so I will not change that. Letterboxing is necessary here.

Controller support works for me - when I plug in an Xbox game pad into my Pixel phone via USB Type-C to Type-A adaptor, it just works. However, I do not know what decides whether a controller is supported or not. With another gamepad I have, I get no success but just this message in logcat:

01-27 19:17:43.488 15781 15814 I GoLog : 2023/01/28 00:17:43.488626 [ERROR] gamepad Generic X-Box pad (05000000d620000002280000ff073f00) has no standard layout - cannot use

This is likely a bug in Ebitengine that should be possible to fix soon. Not sure if you get the same message.

Performance is indeed a rough spot - I am rather sure it could be faster if Ebitengine did a better job, but it doesn’t. But do note that the visibility overlay (what makes those shadows) is quite a performance eater - on my Moto G7 Play, which I consider performance-wise the absolute minimum, only lowest settings are smooth (the game does however notice that and after about a minute automatically downgrades to those settings). Without those shadows, however, this game outright cannot work.

So I do not consider Android a recommended platform for it yet. Maybe once performance issues get better.

(+1)

As for aspect ratio, “soon” there will be an option for it, but I am waiting for Ebitengine 2.5 to stabilize first, as the code for this is in a way that differs from the Ebitengine 2.4 way of doing this so I put this on my 2.5 branch.

In the place where the desktop setting has a fullscreen option, the mobile version will have a stretch/letterbox option.

Infuriating but in the fun way - the influences are obvious. I do however object to the mobile control scheme

Have an idea of an alternate control scheme? I basically took ideas from typical NES emulators and 2D platforming games; I do understand it’s not quite optimal though and am open to suggestions.

The biggest bugbear I had was the requirement of jumping while holding B and a direction, a particular scheme that anyone that isn't a Muse Dash veteran would have great difficulty doing while still holding the phone (and I am not a Muse Dash veteran). I would suggest that the controls be customizable, or failing that, the buttons smaller and closer together.

Thanks for explaining;

as an immediate improvement, I didn’t change anything visually but made the jump button smaller (like it looks) and the action button bigger (the entire rest of the right side of the screen). That should make it much easier to hold the action button while jumping around.

Long-term, still thinking of a good controls edit mode.

(2 edits)

... maybe a bit late... But i would have a suggestion for an alternate control scheme 😅

Why not turn the whole screen into an (invisible) A button?

That is actually a funny idea; that even allows me to not tell about the button initially.

I.e. a clearly visible jump button, and “press elsewhere” when introducing the actions.

I’ll think about it… it’s technically equivalent to what I can do now with the input editor, but has some appeal.

Implemented this now in git (to be released next week) - the button not to be told about yet can be hidden now.

In-game hints then will say “press elsewhere”.

Right now this isn’t enabled by default yet, but holding an empty place on the screen for two seconds in the touch editor toggles the action button on/off.

(+1)

I love the fact that I'm starting out clueless (if not baffled) and the way the game simply imposes its alternate dimensionality. What seems haphazard at first soon becomes as inherent as Newton's fruit induced and most famous law.

I take it from the credits that a controller would be supported, were I to connect one? How universal is this? Some 20 to 30 bucks should get me a lower middle end one. Considering getting one just because of this little gem of a game. Would the arrows and jump icons be suppressed once a controller is connected?


Thanks for the fun!

(1 edit)

Many controllers are supported, a good list of “sure” working ones for desktop platforms here is here: https://github.com/gabomdq/SDL_GameControllerDB/blob/master/gamecontrollerdb.txt - although on Linux and Windows, any Xbox compatible USB controller will surely work, as well as many others.

However, this does not suppress arrows.

BTW, if you’re on Android, controller support is somewhat limited; it seems like it is also necessary for Android to recognize its layout, which it does not do for a controller I have (a cheap Xbox controller knockoff from Walmart). If you want to suppress the touch controls on Android, there’s a way but it involves ADB (there’s currently no setting for this) to change the settings JSON file to set “touch_force” to “false”. On the web, similarly your browser needs to be able to map it to the W3C standard layout, which is basically Xbox style.

The game requires at least the features a typical NES controller had; however it is implemented such that you can use any stick or d-pad on your controller, they’re all activated.

BTW you can port your savegame from Android or web to the desktop version as well, if desired; see instructions on https://divverent.github.io/aaaaxy/userguide.html under “data storage”.

Stuck on twice twice, I don't understand that one at all

(2 edits)

At first you’re given a large platform. Carry it up until the top, but do NOT ride it up. Carry it down again instead, and you’ll be presented a small platform. Walk near it but do not grab it (or do, but it’ll make what comes later a bit harder). Carry the platform up again, and ride it up. The exit will be to the side but requires the large platform.

The room is named after a common theme of Super Mario Maker trolling, introduced by a level called “Larl Does Everything Twice Twice” - it’s actually not one room but many rooms that looks the same but aren’t.

This game is great! Now all it needs is a steam page, and you got yourself a finished game! (Also, steam deck support when lol)

(+1)

I do not see Steam as an immediate goal mainly as I do not intend to monetize this game in any way and getting on Steam is a huge investment.

Having said that, most likely this game can already be run on a Steam Deck as I’ve seen instructions on how to install other non-Steam games on there; at the very least this game runs both on Linux natively and in WINE, so the same instructions as used for e.g. the Epic store should work. Maybe I should just buy a Steam Deck and write up instructions on how to install - it shouldn’t even be hard.

(1 edit)

Wow I'm really impressed by the level design, I currently have to "take out the trash" :D
This is just hard as I wished it to be honestly, I enjoy the fact that when I'm stuck it's just my fault and I need to think (except on that part I got stuck on trampolines for a while because I was missing an ability?)
The music is chill and fits, makes me want to spend some more time on a level.

I sometimes got frustrated when I had to land some technical jumps but there is this little lag every N seconds (playing on browser, maybe a goroutine not parallelizing?).
I don't know if it's saving the game, or doing video record thing (yeah I followed a bit about your requirements on github/ebiten :D)

We can see a lot of work has been done, but there is still this extra great design that I don't know how you did haha

(+1)

Thanks!

Yes, each path of Anti-Hub requiring two abilities at once is intentional - and all three sections make that rather clear at the beginning (that trampoline room is arguably weird, I added it specifically to subtly tell the player that they clearly lack something).

Taking out the trash is easy once one knows the trick - one can carry multiple platforms, and releasing two at once into the chute is perfectly safe and even three at once not dangerous but a little tricky.

Yes, the web version is more laggy than it should be, and I am working on optimizing further but especially the rendering I just can’t get faster there even if I turn off most CPU processing - so likely this issue is with Ebiten or the browser (BTW I get much better fps in Chrome than in Firefox). The native version also has some minor GC lags but they are hardly noticeable except when walking left/right a lot (e.g. in Hilbert’s Dotel). I do intend to reduce those further by reducing memory allocation, but they probably will never go away entirely (will follow Go updates though, soon gonna switch to Go 1.18 which has some GC improvements). If you have lots of RAM, GOGC can be set to have fewer GC pauses. If desired, I can help you export your savegame from the web version to the local one.

There are only few parts that actually require strong platforming skills, primarily in two of the Anti-Hub sections which I intended to be rather hard (one of the three OTOH is easier but takes longer). You did get past the race section, which tells me you have what it takes :)

Thanks for compliments on the level design - I’d describe the design philosophy mostly as influenced by Antichamber, VVVVVV and Super Mario Maker troll levels, while being a math nerd. You really shouldn’t check out the game I made when I was 16 though, but well, there’s a reason it’s not on Itch ;)

Seems you are confusing geometry and topology here and in the description on GitHub... (geometry is a local property that is changed when you stretch the space and topology is changed when you cut/glue the space -- portals change the topology, not the geometry; in the "sphere" level you have the topology of the sphere but the geometry is Euclidean, not spherical. The geometry is Euclidean everywhere, at least from what I have seen so far)

Also not sure why you say it is "the universal cover of a massively twisted space"? This does not seem to be accurate either. (From this description I would expect a world in the shape of e.g. an annulus that always looks like an annulus, but the contents are different when you go around the hole -- this would be the cover of the annulus, and if you never go back no matter how many times you go around, that would be the universal cover (it is more fun with two holes as you get the full binary tell then); here, the walls also sometimes all change when you go around a hole)

A bit similar 2D portals were used in the 7DRLs by Jeff Lait (Jacob's Matrix was the first one IIRC and Vicious Orcs was another one), although he did not do that much with this concept.

(1 edit)

To be clear, the universal cover property is mostly true; there are a few places where portals are enabled/disabled at runtime (in particular the places where one goes back and something changes in the previous place), and thus the topology is actually changed. In most cases the property is actually true, and things actually do change when you go around the hole (e.g. if the annulus contains a platform, you would be able to hold on to this platform and get a second one when you get to the “same” place again, and the existence of both objects together proves that the old and new place is not fully identical).

But you are right, the proper word, to be exact, is topology, although “non-euclidean topology” isn’t quite the right term either. https://hyperbolica.fandom.com/wiki/Fake_Non-Euclidean_Geometry is a quite good description.

HOWEVER, it isn’t Euclidean geometry either - e.g.

A list of things that have been mistakenly claimed as violating Euclid’s 5th postulate “for any line A and point B, there is exactly one unique line that crosses B but not A” is here:

is actually violated a few times accidentally, although not by every use of portals. Furthermore, from Euclid’s axioms, it follows that a line segment is the shortest path between two points, which is absolutely untrue in all “R^n with portals” worlds due to a trivial counterexample.

Feedback taken though, I will look for a better way to describe this. Thanks!

(1 edit)

One issue here is the lack of a generally accepted and mathematically correct term.

It appears that the common term in game development has been “non-euclidean geometry”, even though it is often just “accidentally” violating Euclid’s axioms, and only in few places. The term “impossible spaces” appears to be used too and would be more accurate, but is not as commonly used for these games. I think I will try adjusting to that, as impossible spaces are more the focus than some accidental violations of the parallel axiom.

https://zenorogue.medium.com/non-euclidean-geometry-and-games-fb46989320d4 (which, I know, is your site)

(3 edits)

I see the point about the platform returning to the same location after going around the hole, it is indeed a bit similar to would happen in the universal cover. However, IIRC if you move the platform A, go around the hole to find a yet unmoved platform, and then go back, the platform A also becomes unmoved, so it is still not really the same thing...

I would say that the parallel axiom is not violated (the spirit of this axiom is that parallel lines behave weirdly, they converge/diverge, or in 3D they could also twist -- since the gravity is preserved in most of the game, the gravity lines act like normal parallel lines, same with the lines orthogonal to them.). The only place I have found so far where gravity lines cross (in some sense) is the "sphere" level.

> Furthermore, from Euclid’s axioms, it follows that a line segment is the shortest path between two points, which is absolutely untrue in all “R^n with portals” worlds due to a trivial counterexample.

I would not agree with this, because by this logic, any L-shaped level is non-Euclidean because the shortest path is not straight.

It is still piecewise straight, so we should allow for piecewise straight lines here, and in portal spaces shortest paths are again piecewise straight lines (well, unless the obstacles are curved).

Also this is not really a property of non-Euclidean geometry -- shortest lines are straight lines in all classic non-Euclidean geometries.

(again, in both cases the weirdness happens due to topological rather than geometrical effects)

I do not think "non-Euclidean geometry" is that common, mostly they say just "non-Euclidean" without geometry (one thing contributing to the confusion is CodeParade's "non-Euclidean worlds" viral video, he thinks that "non-Euclidean geometry" should not be used for any weird space but just "non-Euclidean" is fine -- this makes some sense but it still confuses people so I do not agree with him). "Impossible space" is what most people who care say. Thanks for considering this!

(5 edits)

I would not agree with this, because by this logic, any L-shaped level is non-Euclidean because the shortest path is not straight.

In fact, any bounded “space” already violates Euclid’s axioms, as you can e.g. find two lines that are not parallel in the “infinite extension”, yet nowhere cross within the space. So just reducing the plane to a rectangle’s contents already is breaking Euclid’s axioms.

I think the issue is different ways of interpreting “non-Euclidean” - a mathematician typically means by non-Euclidean geometry not anything that violates some of Euclid’s axioms, but something that violates them in a rather specific way: only the parallel axiom, and in a rather “deterministic” way (i.e. either there are no parallels, or infinitely many, no matter which point and line one starts from). However, it is quite clear that most game worlds violate Euclid’s axioms in some ways or another, thereby it is technically not wrong to call them non-Euclidean. Yes, even Quake… with its floating point inaccuracies making Euclid rotate in his grave :)

BTW, as for gravity lines crossing - this is even already the case in the very first room of the game.

However, IIRC if you move the platform A, go around the hole to find a yet unmoved platform, and then go back, the platform A also becomes unmoved, so it is still not really the same thing…

This comes from the rule of the game “if you can’t see it, it does not exist”, which is derived from the same rule in Super Mario games. I.e. the moment you take the platform A out of view, it gets destroyed, and if you come back to its spawn location, it reappears there. Just like a Goomba which will reappear even if you allowed it to drop down into a pit once you leave and re-enter the section.

Implementation wise, doing the portals in the tile loader means the game code already “sees” only the universal cover, meaning everything in game is a standard 2D tile map based game, and e.g. distance functions work normally. So it could be seen as an Euclidean game with above visibility rule working on the universal cover and thus an infinite world - or maybe a tiny world that is built and destroyed around you as you go. To the player, and the way the levels are designed, it behaves more like a typical portals based game, except that you will never see yourself or duplicates of the same object at once.

Yeah, usually "negative" qualifiers in mathematics mean some specific things. "Irrational number" does not mean numbers like i or Aleph-Zero even though they are not rational numbers. It means a *real* number that is not rational. Discovery of such numbers was quite important in math. Same as with non-Euclidean geometry, the discovery that all the axioms could be satisfied but not the fifth one was important again. So it originally meant just that, not satisfy the 5th but satisfy all the others. Some people extend this but they usually try to keep the spirit (hard to explain Nil geometry using axioms, but the spirit of  parallel axiom is no longer there...). Sometimes "non-X Y" is meant to include "X Y" as a special case :)

Anyway, thanks for the nice game! I have added a mention to my article.

(1 edit)

Thanks!

BTW, as for the teleportation trick - both Antichamber and AAAAXY could not really have been done with the teleportation trick alone, as objects (e.g. Antichamber’s matter gun blocks) remain available when going through a portal. In a few places a player can even clearly notice that the game isn’t just teleporting those blocks, too.

However, the first part of the game would entirely have been possible with just seamless teleportation.

BTW, Super Mario Bros. 1 is probably one of the first games with impossible spaces, in two ways, so it may too be worth mentioning:

  • Pipes are not connected in a way consistent with layout on both sides (but arguably this could be understood as a long twisted pipe one just doesn’t see, so this may not really count - after all, maybe pipes are just teleporters).
  • Levels 4-4 and 7-4 are “puzzles” where one has to pick an upper/lower path, and picking the wrong path seamlessly transports one to the start of the “puzzle”. This appears to be done by seamless teleportation and even in a bad way, as Firebar objects suddenly stop working when scrolling past the “portal”.
(1 edit)

Another game in impossible spaces maybe worth mentioning is Unreal Tournament ’99 (the GOTY one). A few included maps use portals to shorten/lengthen pathways to balance out gameplay on the map. This is hardly noticeable in-game though, so it differs from the use in other games - the player is not intended to ever notice.

Of course, some third-party maps totally exploit that feature :)

Brilliant! Reminds me a bit of the game I'm working on, Dimenshift. Though I'll say you executed the whole "direction is meaningless"/non-euclidean concept a lot better than I did.

I love how everything's seamlessly connected, and after exploring and getting lost for over an hour I feel like I've barely scratched the surface of this game.

Great job!

A fun fact is that everything (except for a bunch of obvious dead ends that tell you so, and which this game does not include in "100%" for that reason) can be played entirely seamlessly without ever going to the checkpoint map.

This is rather hard though and it takes some specific trickery to reach the end this way.

how am i supposed to beat kaizo

wait its not even possible lol

(1 edit)

Also, a big oops - I just noticed one can reach kaizo without being able to even stand on platforms (you get that ability elsewhere).

I've fixed that in git now by making the room before it "clearer" about this (will release this next week when I am fully done with it), but in the meantime, if that's your problem - go back to The Hub, into the topology madness, and that will give you what you need.

(1 edit)

I had replied in more detail on Github, but basically you do the similar inputs as in a Super Mario World shell jump: carry platform, jump, at about 1/4 of the jump height, release grab and make sure to re-press jump.

However, this section is actually optional - so if you ignore this part and keep exploring elsewhere, you can win the game too.

(1 edit)

In v1.1.6 (released today), Kaizo is made rather different:

- One is now forced to release in-air.

- One has more time to land on the platform. Generally, the timing is a lot easier now, matching the one in Kaaaart Race.

- Resetting the room is more natural now.

- If having the third ability (pushing), one can cheese the room by stepping on the platform then pushing it right. Not that this is actually much easier. My policy about Anti-Hub sections is that each section requires two out of three main abilities, and having the third one is OK to be of advantage.

- Speedrunners can complete this room now about a second faster, as one can obtain the platform now right when entering.

Beautiful! Reminds me alot of antichamber!

(1 edit)

That was indeed one influence - and yes, the very first room is rather obviously a reference to it (but also to typical Mario hack/maker game trolling, and also serves to explain that there is no real "death" in this game) :)