1
1
Fork
You've already forked aaaaxy
0
A nonlinear 2D puzzle platformer taking place in impossible spaces. Fork of github repo by divVerent https://github.com/divVerent/aaaaxy
  • Go 87.5%
  • Shell 9.1%
  • Go Template 1.1%
  • Objective-C 0.8%
  • Perl 0.6%
  • Other 0.9%
2026年07月11日 09:12:14 +05:30
.github Require macos-26, not "latest". 2026年06月03日 18:06:53 +02:00
AndroidStudioProjects/AAAAXY Add adi-registration.properties as required by Google Play. 2026年05月02日 10:26:31 +02:00
assets Progress and added sprite 2026年07月11日 09:12:14 +05:30
cmd Fix package name. 2025年05月09日 17:53:51 -04:00
fastlane/metadata/android Release v1.7.89 2026年06月22日 12:00:01 +02:00
internal Correcting a mistake when merging 2026年05月26日 09:32:31 +05:30
licenses Fix embed path. 2022年08月01日 09:06:02 -04:00
scripts Minor adjustments: 2026年05月25日 16:46:16 +02:00
snap Try another build-environment syntax. 2025年07月28日 21:23:04 -04:00
third_party Added puzzle to reaching star 2026年07月03日 10:32:04 +05:30
XcodeProjects/iOS Release v1.7.89 2026年06月22日 12:00:01 +02:00
.gitattributes Early markdown cleanup support, and an initial clean script. 2021年08月16日 05:10:33 -07:00
.gitignore Update .gitignore. 2024年10月08日 16:25:02 -04:00
.gitmodules Progress in UpDown 2026年03月04日 11:09:48 +05:30
.gitmoduleversions Release v1.7.89 2026年06月22日 12:00:01 +02:00
.lastreleaseversion Release v1.7.89 2026年06月22日 12:00:01 +02:00
.lastreleaseversioncode Release v1.7.89 2026年06月22日 12:00:01 +02:00
.mailmap Add .mailmap file. 2021年08月04日 13:27:40 -04:00
aaaaxy.desktop More description syncing. 2022年03月01日 20:56:39 -05:00
aaaaxy.html Set HTML title. 2023年04月09日 20:41:33 -04:00
aaaaxy.png Recompress all PNG files with advpng. 2022年07月28日 12:31:39 -07:00
aaaaxy.svg Make the SVG icon meet flathub guidelines. 2024年06月04日 04:57:32 -07:00
aaaaxy.tiled-project Fix sorting. 2026年05月25日 17:47:25 +02:00
CONTRIBUTING.md Rephrase to make clear copyright applies to all works, not just code. 2026年03月10日 07:19:58 +01:00
default.pgo Try a newer WINE build for Go 1.22 builds. 2024年04月23日 12:45:28 -04:00
generate.go In "go generate" commands, invoke the shell explicitly. 2022年02月08日 05:21:23 -08:00
generate_licenses.go More infrastructure for zip based releases. 2022年07月28日 06:32:31 -07:00
generate_windows.go In "go generate" commands, invoke the shell explicitly. 2022年02月08日 05:21:23 -08:00
generate_zip.go More infrastructure for zip based releases. 2022年07月28日 06:32:31 -07:00
go.mod Modules update. 2026年06月22日 11:13:17 +02:00
go.sum Modules update. 2026年06月22日 11:13:17 +02:00
io.github.divverent.aaaaxy.metainfo.xml Release v1.7.89 2026年06月22日 12:00:01 +02:00
level_design.md Level design is decided. Read level_design.md. 2025年10月04日 09:35:02 +05:30
level_design.svg Defined Checkpoints 2026年06月14日 12:42:45 +05:30
LICENSE Add license file; handle license file better. 2021年01月15日 11:45:06 -05:00
main.go Make singlethreaded-ness a runtime option. 2024年09月10日 17:52:17 -04:00
Makefile Don't actually need sed for this. 2026年03月18日 07:20:00 +01:00
README.md Fix README formatting, again. 2024年04月23日 11:16:59 -04:00
RELEASING.md Fix Markdown formatting for current version of pandoc. 2023年01月06日 16:19:40 -05:00
transifex.yml Fix Transifex expression. 2022年12月13日 11:34:41 -08:00

AAAAXY

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.

The game is available for the following platforms:

Platform Downloads
Android F-Droid, Google Play
HTML5 (slow) netcup
iOS App Store
Linux Flathub, GitHub, Itch, Snap Store
macOS GitHub, Itch
Windows GitHub, Itch

Available languages: Arabic, Belarusian, Chinese (Simplified), Chinese (Traditional), English, German, Japanese, Latin, Portuguese and Ukrainian.

Screenshots

shot1 shot2 shot3 shot4 shot5 shot6 shot7 shot8

More Resources

This documentation is intended for developers; user-centric documentation is available on the game's website.

Notable Libraries

This game is based on the following libraries:

Compiling

This game has been successfully compiled on Linux, FreeBSD and Windows, and will likely compile just fine on other unixoid systems as well. For other platforms some minor porting may be required so save games and settings can be retained; in particular see vfs/state_*.go.

To build the game for yourself, install git, golang, graphviz, imagemagick and pandoc, and then run:

git clone https://github.com/divVerent/aaaaxy
cd aaaaxy
git submodule update --init --remote
make

NOTE: On FreeBSD systems, use gmake instead of make to compile.

To update and rebuild, run:

cd aaaaxy
git pull
git submodule update --remote
make

You can also immediately compile and run the game using:

make run

Editing

In a Source Checkout

Use Tiled on the included aaaaxy.tiled-project. The map is in assets/maps/level.tmx.

If checkpoints were changed, run make assets-update to regenerate the checkpoint map.

make run will use the modified data.

On a Release Binary

Run the game with -dump_embedded_assets=/path/to/folder/for/editing. Download the mappingsupport pack from the release and extract it to that same directory. Tell Tiled to use the included `objecttypes.xml.

Running the game with -cheat_replace_embedded_assets=/path/to/folder/for/editing will then use the modified data.

Changing checkpoints is not supported this way.

Mathematical Notes

This game does not take place in the Euclidean space you're used to - instead, you are experiencing the universal cover of a massively twisted space, which feels like a space with a locally-Euclidean topology and geometry, which however violates some of their axioms globally (e.g. the shortest path from one point to another modulo the equivalence relation is not necessarily a line, and parallels are not always unique).

For some added confusion, the space is occasionally reconfigured by turning portals on/off at runtime, further violating expectations.

This is rather similar to seamless portals, but yields stronger immersion and is generally an interesting approach I wanted to try out. In particular, gravity behaves consistently across portals, and objects are entirely glitch-free around them. The player is only ever visible once. On the other hand, this approach can not sensibly support multi-player games; a more traditional portal based engine would be more appropriate there, where the same object may be seen multiple times on the screen. Sadly that approach would appear rather confusing in places where this would cause the player themselves to show up multiple times at once, which is why I did not go with it.

In 3D games with transparent portals/warpzones, immersion is usually achieved by treating each portal as a dynamic texture surface which shows a view out of a camera projected to the other side. An open source implementation of this can e.g. be found in Xonotic. The reason why this works is that only those parts of an object are shown that have a line of sight to the player - as expected in a first person game. Implementing a third person view that way is already a bit more tricky but usually one can work around the view origin mismatching but being close to the player origin; however what is usually not possible with transparent portals in a top-down or other 2D-ish view, as conflicting (e.g. self-overlapping) geometry may need to be rendered to the screen at the same time.

There are however two approaches to solve this:

  • Design levels so that conflicting geometry is never on screen.
    • In other words, when transparently teleporting in order to move the player past a portal, a screen-sized environment of the source position must always match a screen-sized environment of the destination position.
    • This approach is simple and very immersive and has already been used in the original Super Mario Bros. game on the NES.
    • It however is not very flexible as any impossible geometry has to be rather large and behave fully Euclidean on every screen-sized environment around positions the player can visit.
  • Hide anything that has no line of sight to the player.
    • This actually matches the approach used in first person 3D games
    • With this approach, the game needs to be consistent with Euclidean geometry only in small environments around each object.
      • In this implementation, the consistency requirement is that an 1-tile environment around every portal must match, and that the same "screen tile" cannot be reached by a 1-tile environment around a line of sight through two different sets of portals at the same time.
      • As this game demonstrates, this can yield rather interesting while still obvious non-Euclidean topologic properties.
    • This is the approach has been explored in this game as well - but very likely for the first time in a two dimensional game.

License

This project is released under the Apache 2.0 License.

Disclaimer

This is not an officially supported Google product.