Git Product home page Git Product logo

aaaaxy's People

Contributors

dependabot[bot] avatar divverent avatar hirokoni avatar transifex-integration[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

aaaaxy's Issues

input: should shoulder buttons really be exit?

I took that idea from another game, and to support gamepads without a start button better (e.g. MS SideWinder), but still... might not be right.

Will think about this later, writing down now to track.

iOS/Android: hide touch controls when not in use

Instead of touchForce, these systems should use a "touchPrefer" that I have to implement.

touchPrefer works like the opposite of default mode: touch controls are shown by default, unless "any other input method" was recently used.

Also, may want to remove the timer based touch overlay by default, and just go with inputMap, and just deciding on an OS dependent default if inputMap is NoInput.

I.e. no more touchPadFrames logic, but instead:

  • Make Map() return an OS-defaulted InputMap if empty.
  • Keep touchPadUsed, but use Map() & TouchInput in addition in HaveTouch.
  • In touchDraw, use Map() & TouchInput alone.

Language support: Arabic

We have a translator for Arabic on Transifex, however some preparations need to be done to display it correctly.

Demo playback as regression testing

We already can record and playback demos that just contain input state.

Would be nice if we could make every demo frame contain a game state hash or similar info so we can detect during playback if the game state ever diverges.

Suggesting to use the following data:

  • Player position (ideally with subpixel)
  • Whenever saving a game during recording, a hash of that save game

This alone should actually suffice; every action that changes the "world" will either cause a savegame to be written or the player position will diverge.

Also, a headless demo playback mode so we can run it on e.g. Travis CI. I know Ebiten doesn't really support headless, so to support true headless, we'd need to factor out all use of Ebiten calls (easy) and types (omghard if we do not want to decrease performance). However, just skipping all render processing alone will already do a lot and we can run the rest in Xdummy or similar.

Performance issues on Android

(Android F-droid 1.3.524)
l i changed settings from maximum to minimum and back.
now it periodically freezes for 5 seconds unless I set graphics to minimum.
it's unplayable.
newer version runs slower overall too

Migrate to split ABI packages on F-Droid

https://gitlab.com/fdroid/fdroiddata/-/issues/2809

Seems like what this takes is:

  • Make four build versions on F-Droid, not one
  • Add 1, 2, 3, 4 to each's version code to indicate the platform (both in the update spec at the end of the yml file)
  • In each, override gradle properties as follows:
    • aaaaxy_build_versioncode_add=1 (or 2, 3, 4)
    • aaaaxy_build_gomobile_targets=android/386 (or android/amd64, android/arm, android/arm64)
    • aaaaxy_build_tags=embed

Test Ebitengine 2.5

Test results:

  • Android: better (much fewer lag frames)
  • Windows: better (slightly better fps at 64bit)
  • Linux: can not distinguish

Still need to test on macOS, if that's good too, I will make the Ebitengine 2.5 build the default and create a branch with the API changes to Ebitengine 2.5 rolled back so one can still use it to build for 2.4.

Shepard Tone pitches aren't aligned with keyboard

In Shepard Tone, the sounded note pitches are 3 semitones lower than the expected keyboard pitch.

E.g. the note A (shepard_00.ogg) is sounded when the player triggers the note C on the keyboard.
It should be shepard_03.ogg that is sounded for the note C.

signal-2023-04-16-011141_002.mp4

Non-clipping walls taking out the trash

It seems, under certain conditions, platforms can travel trough walls. This is not reproducible during normal gameplay, but it has happened to me multiple times.
Screenshot_20220920_131835
However, this also seems to happen when holding action key when joining the level, in which case the platforms noclip through the dividers which also breaks the level.

Screenshot_20220920_132601

I have aaaaxy 1.2.331-1 installed from AUR on Arch Linux with Kernel 5.19.8-zen1-1-zen and I run aaaaxy via xwayland 22.1.3-1.

Remove gradle-wrapper.jar from the repo?

From https://libregamewiki.org/Libregamewiki:Suggested_games#2022

AAAAXY (*) - small-scale 2D non-euclidian puzzle platformer, originally released in 2021. This game seems libre, but I'm not sure about aaaaxy-1.2.280/AndroidStudioProjects/AAAAXY/gradle/wrapper/gradle-wrapper.jar and I haven't checked any build-time-downloaded-dependencies yet.

Wonder if we really need to include this file, or if we can replace this by using a locally installed gradle or do a runtime download when building for Android. The file is free software under Apache 2.0 license, so legally we're fine, but compiled binaries don't belong in a git repo. Debian's gradle package does NOT suffice, but it's a really old version.

At the very least, this file doesn't affect building for any non-Android platforms.

Android/Touch: menu behaves a bit odd

When leaving the Reset or Edit Touch Controls menus, the selected entry becomes Main Menu.

This is unexpected - normally menus open with the topmost entry selected. Cause not known yet, but also far from critical, so releasing anyway for now.

Consider expanding Android gamepad support

Android needs gamepad support most as touch input isn't so great. Right now only gamepads supported by SDL_GameControllerDB are supported - however Android APIs already provide a standard layout mapping natively.

I filed hajimehoshi/ebiten#2557 for this, but it seems resources are lacking to implement this on Ebitengine side - thus, filing this bug so I'll look into it myself to see what it takes to make this work.

Looking for androidKeyToSDL it seems like we already have a 1:1 mapping from Android buttons to SDL names, which seems close to standard layout. We'd need the same for axes. As part of the SDL ID, we already provide info about axis and button existence, as well. For buttons it seems rather clean which are transmitted 1:1 to Go, for axes not so much as they're remapped in the Java code. Probably should move the remapping into Go and then we also have a trivial standard layout mapping.

Performance on Android slow

Since the most recent update (from 1.3.263+20230205.2728.57c67f41 to 1.3.303+20230212.2768.bfe2720d), the game is very slow on Android, often even unplayably slow, especially after a minute or two.

Snap: savegames not preserved on updates

After a sudo snap refresh, I lose all save games.

Appears to be because XDG_DATA_HOME and XDG_CONFIG_HOME points into SNAP_USER_DATA, which is not preserved across releases.

Try using SNAP_USER_COMMON.

winx86 app crashed

Windows 7, x86, application crashed while run

>aaaaxy-windows-386.exe
2022/02/10 01:52:40 [INFO] could not find path for folder0/config.json: The handle is invalid.
2022/02/10 01:52:40 [INFO] requested logical scale factor: 0
2022/02/10 01:52:40 [INFO] device scale factor: 1
2022/02/10 01:52:40 [INFO] screen size: 1920x1200
2022/02/10 01:52:40 [INFO] max size: 1792x1072
2022/02/10 01:52:40 [INFO] max physical scale factors: 2.8, 2.977777777777778
2022/02/10 01:52:40 [INFO] requested physical scale factor: 2.8
2022/02/10 01:52:40 [INFO] chosen physical scale factor: 2
2022/02/10 01:52:40 [INFO] chosen logical pixel scale factor: 2
2022/02/10 01:52:40 [INFO] chosen window size: 1280x720
2022/02/10 01:52:40 [INFO] AAAAXY 1.1.112+20220207.1825.4f803d6a
Exception 0xc0000005 0x8 0x0 0x0
PC=0x0

runtime.cgocall(0x463b10, 0x26a73dc)
        runtime/cgocall.go:156 +0x58 fp=0x1456da48 sp=0x1456da30 pc=0x403958
syscall.Syscall6(0x7355451e, 0x6, 0x14689f58, 0xffffffff, 0x13c8b950, 0x464bc4, 0x0, 0x30000)
        runtime/syscall_windows.go:493 +0xbb fp=0x1456da64 sp=0x1456da48 pc=0x460e4b
golang.org/x/sys/windows.(*Proc).Call(0x1468d0e0, {0x13c8b968, 0x6, 0x6})
        golang.org/x/[email protected]/windows/dll_windows.go:180 +0x3bf fp=0x1456dae0 sp=0x1456da6
4 pc=0x5d2f3f
golang.org/x/sys/windows.(*LazyProc).Call(0x13c900d8, {0x13c8b968, 0x6, 0x6})
        golang.org/x/[email protected]/windows/dll_windows.go:348 +0x58 fp=0x1456db04 sp=0x1456dae0
 pc=0x5d3c58
github.com/hajimehoshi/oto/v2.waveOutOpen(0x13c8b950, 0x464bc4)
        github.com/hajimehoshi/oto/[email protected]/winmm_windows.go:136 +0xad fp=0x1456db40 sp=0x1456db04 pc=0x612b0d
github.com/hajimehoshi/oto/v2.newContext(0xac44, 0x2, 0x2)
        github.com/hajimehoshi/oto/[email protected]/driver_windows.go:111 +0x175 fp=0x1456db84 sp=0x1456db40 pc=0x61012
5
github.com/hajimehoshi/oto/v2.NewContext(0xac44, 0x2, 0x2)
        github.com/hajimehoshi/oto/[email protected]/driver.go:88 +0x35 fp=0x1456dbac sp=0x1456db84 pc=0x60fcb5
github.com/hajimehoshi/ebiten/v2/audio.newContext(...)
        github.com/hajimehoshi/ebiten/[email protected]/audio/player_notjs.go:25
github.com/hajimehoshi/ebiten/v2/audio.(*playerFactory).initContextIfNeeded(0x146a6840)
        github.com/hajimehoshi/ebiten/[email protected]/audio/player.go:102 +0x98 fp=0x1456dbdc sp=0x1456dbac pc=0x615518
github.com/hajimehoshi/ebiten/v2/audio.(*player).ensurePlayer(0x13c40450)
        github.com/hajimehoshi/ebiten/[email protected]/audio/player.go:116 +0x28 fp=0x1456dbf8 sp=0x1456dbdc pc=0x615618
github.com/hajimehoshi/ebiten/v2/audio.(*player).Play(0x13c40450)
        github.com/hajimehoshi/ebiten/[email protected]/audio/player.go:144 +0x63 fp=0x1456dc18 sp=0x1456dbf8 pc=0x6157f3
github.com/hajimehoshi/ebiten/v2/audio.(*Player).Play(...)
        github.com/hajimehoshi/ebiten/[email protected]/audio/audio.go:352
github.com/divVerent/aaaaxy/internal/audiowrap.Init()
        github.com/divVerent/aaaaxy/internal/audiowrap/player.go:80 +0x64 fp=0x1456dc30 sp=0x1456dc18 pc=0x6fcaa4
github.com/divVerent/aaaaxy/internal/aaaaxy.(*Game).InitStep.func2(0x13cf0288)
        github.com/divVerent/aaaaxy/internal/splash/splash.go:124 +0x1c fp=0x1456dc3c sp=0x1456dc30 pc=0x76186c
github.com/divVerent/aaaaxy/internal/splash.(*State).Enter(0x13cf0288, {0x7ff954, 0x12}, {0x806a03, 0x1a}, 0x1456dcd0)
        github.com/divVerent/aaaaxy/internal/splash/splash.go:109 +0x111 fp=0x1456dc8c sp=0x1456dc3c pc=0x690301
github.com/divVerent/aaaaxy/internal/aaaaxy.(*Game).InitStep(0x13cf0180)
        github.com/divVerent/aaaaxy/internal/aaaaxy/init.go:175 +0x176 fp=0x1456dd14 sp=0x1456dc8c pc=0x761246
github.com/divVerent/aaaaxy/internal/aaaaxy.(*Game).Update(0x13cf0180)
        github.com/divVerent/aaaaxy/internal/aaaaxy/game.go:138 +0xab fp=0x1456dd34 sp=0x1456dd14 pc=0x75d96b
github.com/hajimehoshi/ebiten/v2.(*imageDumper).update(0x13c9c720)
        github.com/hajimehoshi/ebiten/[email protected]/imagedumper_desktop.go:111 +0x42 fp=0x1456dde4 sp=0x1456dd34 pc=0x609502

github.com/hajimehoshi/ebiten/v2.(*imageDumperGame).Update(0x13c90840)
        github.com/hajimehoshi/ebiten/[email protected]/run.go:117 +0x80 fp=0x1456ddf4 sp=0x1456dde4 pc=0x60d580
github.com/hajimehoshi/ebiten/v2.(*uiContext).updateFrameImpl(0x26a6f20, 0x0)
        github.com/hajimehoshi/ebiten/[email protected]/uicontext.go:187 +0xab fp=0x1456de78 sp=0x1456ddf4 pc=0x60ee7b
github.com/hajimehoshi/ebiten/v2.(*uiContext).updateFrame(0x26a6f20, 0x0)
        github.com/hajimehoshi/ebiten/[email protected]/uicontext.go:159 +0x6f fp=0x1456de90 sp=0x1456de78 pc=0x60ed5f
github.com/hajimehoshi/ebiten/v2.(*uiContext).UpdateFrame(0x26a6f20)
        github.com/hajimehoshi/ebiten/[email protected]/uicontext.go:138 +0x2b fp=0x1456dea4 sp=0x1456de90 pc=0x60ec4b
github.com/hajimehoshi/ebiten/v2/internal/uidriver/glfw.(*UserInterface).loop(0x26a2e40)
        github.com/hajimehoshi/ebiten/[email protected]/internal/uidriver/glfw/ui.go:1103 +0x185 fp=0x1456dee4 sp=0x1456dea4 pc=
0x600a55
github.com/hajimehoshi/ebiten/v2/internal/uidriver/glfw.(*UserInterface).Run(0x26a2e40, {0x22d380c, 0x26a6f20})
        github.com/hajimehoshi/ebiten/[email protected]/internal/uidriver/glfw/run_singlethread.go:42 +0xfd fp=0x1456defc sp=0x1
456dee4 pc=0x5fcb2d
github.com/hajimehoshi/ebiten/v2.RunGame({0x22d26ec, 0x13cf0180})
        github.com/hajimehoshi/ebiten/[email protected]/run.go:160 +0xdf fp=0x1456df2c sp=0x1456defc pc=0x60d77f
main.runGame(0x13cf0180)
        github.com/divVerent/aaaaxy/main.go:51 +0x6a fp=0x1456df7c sp=0x1456df2c pc=0x7627ba
main.main()
        github.com/divVerent/aaaaxy/main.go:83 +0xe6 fp=0x1456dfc8 sp=0x1456df7c pc=0x762c26
runtime.main()
        runtime/proc.go:255 +0x23a fp=0x1456dff0 sp=0x1456dfc8 pc=0x438d4a
runtime.goexit()
        runtime/asm_386.s:1319 +0x1 fp=0x1456dff4 sp=0x1456dff0 pc=0x462da1

goroutine 20 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0x1454cbe8, 0x0)
        runtime/sema.go:513 +0x175
sync.(*Cond).Wait(0x1454cbe0)
        sync/cond.go:56 +0xa0
github.com/hajimehoshi/oto/v2.(*players).wait(0x146a6870)
        github.com/hajimehoshi/oto/[email protected]/player_notjs.go:55 +0x6e
github.com/hajimehoshi/oto/v2.(*players).loop(0x146a6870)
        github.com/hajimehoshi/oto/[email protected]/player_notjs.go:62 +0x3b
created by github.com/hajimehoshi/oto/v2.newPlayers
        github.com/hajimehoshi/oto/[email protected]/player_notjs.go:37 +0xbf
eax     0x1
ebx     0x0
ecx     0x0
edx     0x73553af0
edi     0x2affa0
esi     0x3bb
ebp     0x0
esp     0x12fcd0
eip     0x0
eflags  0x10202
cs      0x1b
fs      0x3b
gs      0x0

Detect and fix per-build differences

For now, I got a set of regression test demos, and found:

  • Linux64 and Windows64 differed in ONE location regarding navigation of the checkpoints map.
    • Cause was a float64 comparison making an unpreferred keyboard direction go left on one and right on the other. Changed affected code to use integer math. This broke the demo on both platforms, though, but now it's at least deterministic.
  • Lots of Windows64 vs Windows32 differences.
    • Maybe related to integer types?
  • Level hash seems to be OS dependent?

no content?

Only seems to be one screen in the game with nothing else in reach, assuming there is at least one more screen then you need to moderate the level design to meet players half way. Current state of the game is unplayable to none mind readers....

1.3.367 is unusably slow for me on Android

While the 1.3.359 release on fdroid was perfect, updating to 1.3.367 made the game so slow that I can't play it anymore. I have an old phone (OnePlus 1) but it was working just perfect until the last release.

Fonts break with -pin_fonts_to_cache=false -draw_blurs=false

That option should only reduce performance by not calling text.CacheGlyphs(), but it's actually breaking all font rendering.

This issue was apparently introduced in 91a0526 which updated Ebitengine:

-       github.com/hajimehoshi/ebiten/v2 v2.1.4
+       github.com/hajimehoshi/ebiten/v2 v2.2.0-alpha.11.0.20210817032719-12350e2fee5d

This issue becomes more relevant now as glyph precaching no longer works in Ebitengine 2.5 due to better font hinting support.

Donations

Hello divVerent,

aaaaxy is really awesome, I enjoyed its non-linear gameplay with a lot of surprises! Thank you for making it open source! :)

Can I "buy you a coffee"? ;-)

Generic NES-like controller always holds down left, and --gamepad_override doesn't seem to fix it

I have a generic NES-like controller branded "retro power" that the game interprets as always holding down left. The controller works fine in AntiMicroX and Taisei, but for some reason AAAAXY seems to misread the controller. I tried running `./AAAAXY-x86_64.AppImage --gamepad_override "0300000079000000110000001001000012117,Retrolink SNES Controller,platform:Linux,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftshoulder:b4,rightshoulder:b5,dpup:a1,dpleft:a0,dpdown:a1,dpright:a0," (I got the gamepad override string from AntiMicroX. The gamepad doesn't really have that many buttons.), but that seemed to have no effect. Actually, I just now noticed it says "[INFO] gamepad mappings from --gamepad_override applied" regardless of whether I actually use the "--gamepad_override" option.

I have tried "AAAAXY 1.2.280+20220822.2294.9ff4b8b7" and "AAAAXY 1.2.321+20220905.2335.e05b1efe", both via the AppImage, and I am using Trisquel GNU/Linux Nabia (10.0.1) as my operating system. Unfortunately, I could not find a controller that actually works with AAAAXY. I have another controller that came with the NES-like one, and it has a similar problem, and I have a couple of Wii remotes, which do not have the holding-down-left problem, but the D-pad is rotated and none of the buttons jump or pause. The Wii remote D-pad controls the entire operating system for some reason though, so I think the D-pad rotation is a operating system problem or something (Actually, the way the D-pad is rotated would make sense if I held the Wii remote like a TV remote.).

Option to move on-screen controls?

I saw this on f-droid and it has been a lot of fun.

However, the platforming is a bit difficult. It would be more comfortable if the B button was closer to the A button. Perhaps there should be an option on mobile to allow the user to move the on-screen controls.

RunGame exited abnormally: VersionUnavailable: GLX: Failed to create context: BadValue (integer parameter out of range for operation)

I recently updated the game, and it now isn't launching, instead it give this log (from terminal output, also I censored my name):

2023/07/25 16:46:31.242812 [INFO] requested logical scale factor: 0
2023/07/25 16:46:31.242820 [INFO] device scale factor: 1
2023/07/25 16:46:31.242841 [INFO] screen size: 1920x1080
2023/07/25 16:46:31.242843 [INFO] max size: 1792x952
2023/07/25 16:46:31.242847 [INFO] max physical scale factors: 2.8, 2.6444444444444444
2023/07/25 16:46:31.242851 [INFO] requested physical scale factor: 2.6444444444444444
2023/07/25 16:46:31.242853 [INFO] chosen physical scale factor: 2
2023/07/25 16:46:31.242856 [INFO] chosen logical pixel scale factor: 2
2023/07/25 16:46:31.242858 [INFO] chosen window size: 1280x720
2023/07/25 16:46:31.242861 [INFO] starting early initialization
2023/07/25 16:46:31.242867 [INFO] configs will be written to /home/[name]/.config/AAAAXY/*
2023/07/25 16:46:31.242873 [INFO] save games will be written to /home/[name]/.local/share/AAAAXY/*
2023/07/25 16:46:31.243530 [INFO] asset search path: [dat:aaaaxy.dat(.->/)]
2023/07/25 16:46:31.244940 [INFO] detected language English (not translating)
2023/07/25 16:46:31.245004 [INFO] font pinning coverage: 100%
2023/07/25 16:46:31.245012 [INFO] charset pinned:  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\134]^_`abcdefghijklmnopqrstuvwxyz{|}~©¾àãéöπτ
2023/07/25 16:46:31.248000 [INFO] AAAAXY 1.4.39+20230725.3058.087fe586
2023/07/25 16:46:31.248007 [INFO] finished early initialization
goroutine 1 [running, locked to thread]:
runtime/debug.Stack()
	runtime/debug/stack.go:24 +0x65
runtime/debug.PrintStack()
	runtime/debug/stack.go:16 +0x19
github.com/divVerent/aaaaxy/internal/log.Fatalf({0x5650540be21b, 0x1d}, {0xc00049df48, 0x1, 0x1})
	github.com/divVerent/aaaaxy/internal/log/log.go:101 +0x3c
main.main()
	github.com/divVerent/aaaaxy/main.go:125 +0x24d
2023/07/25 16:46:31.264193 [FATAL] RunGame exited abnormally: VersionUnavailable: GLX: Failed to create context: BadValue (integer parameter out of range for operation)

iOS support

I am working on also releasing AAAAXY for iOS.

A first test build is available here:

https://testflight.apple.com/join/bQC1sOev

Note that it currently stores savegame and config data in a Documents folder so users can get them out or back in as a means to investigate or backup/restore - I may not keep it that way for an actual release, but if I change that, I will make sure that there is at least some way to transfer this data to a new (more hidden) location. I do kinda like though that using the Documents folder means I get a setting to enable/disable iCloud syncing of the savegame data.

Feedback welcome!

Devices I am testing on (intentionally got some older ones for this so I can ensure great performance for everyone):

  • iPad Air (1st generation, running iOS 12.5.7): takes very long to load, slightly laggy but plays rather well at lowest settings.
  • iPhone 6S (running iOS 15.7.4): loading screen is OK (8 seconds), game runs perfectly at default settings.
  • iOS Simulator: generally works perfectly on current iOS versions in there. Notably though, keyboard controls do NOT work in there - I only have touch working right now.

Aspect ratio correction modes

  • letterbox: what we do now
  • pan: run CRT shader on physical screen size, but pre-upsize the source image
  • stretch: run CRT shader on physical screen size but pre-scale the source image

In all shaders but the CRT shader, we can simply use an adjusted GeoM and all will fall into place.

In the CRT shader, the GeoM scales the output, and thus in pan and stretch modes needs to be a GeoM that scales the input to fullscreen size. Further transformation needs to be done in shader code.

Suggest I first think of a way to generalize this transform as needed by the shader code, and then apply the same to all places equivalently.

32bit Windows build is VERY slow

The loading screen on the 32bit build on a 64bit machine takes very long. The game also lags out for about half a second when touching the Leap of Faith checkpoint.

The main things taking long seem OggVorbis related, and I can not see any suspicious activity in ProcessMonitor.

Issue exists in current build and is unchanged in Ebitengine 2.5.

Fade out sounds on Close()

Currently, Close() can leave a sound in an ugly state, causing clicking.

Let's move the fade out logic from music/ to audiowrap/ and run it on EVERY Close() of a still playing sound at nonzero volume.

Should be OK performance wise as Close() isn't called that often; one-shot sounds don't need it. Also, maybe make it an explicit FadeOut(d time.Duration) even.

While at it, we could even kill music multitrack fading logic entirely; may still want to ensure time between tracks though.

More sounds

Let's add sounds for:

  • Platform being pushed
  • Platform carried/released (on the actions)
    • or maybe platforms should always be making a humming noise? Well, maybe not. May be weird with visibility/disappearing.
  • Platform being destroyed
  • Switch pressed/released
  • Hitting a side wall (maybe a softer "thud")

Goal is to have enough sounds to make a blind playthrough not too hard. Although quite some places are probably blind-impossible - still would be nice to have a blind playthrough route. Pretty sure the ending of the game is possible that way, but not sure if any of the three Anti-Hub sections is playable blindly.

Internationalization

This seems good:

https://pkg.go.dev/golang.org/x/text/message

For menu and game code strings, we can use p.Sprint() directly and the extractor should just work; for in-game stuff, however, we need to write a custom extractor that gets the translatable strings out of the .tmx file.

Seems very feasible though. Do need to figure out how to make it auto extractable from source; if this doesn't seem feasible, we may need a different approach. Support for a website like Transifex would be nice, although not required.

Unable to stand on grabbable platforms

Running on Android, acquired from F-Droid.

I have gotten to a room that gives you gloves to hold platforms, but while I can grab and place the platform in that room, I can't stand on it. I fall straight through. It seems clear that you're intended to stand on them, since there's an exit at the top of the room that can only be reached by doing so.

Flipped credits

Maybe unflip JUST the button descriptions and the logo on there?

Creating demo on android

It seams to be impossible to generate a demo file when playing on android. One way this could be possible is by putting demo files with the date and time in /sdcard/Android/data/io.github.divVerent.aaaaxy/files/demos if the user enables an option to do so. A better way would be to make this directory configurable.

As another related suggestion, it would be nice to be able to enable the timer in android.

These things would be useful for speedrunning on android without recording the screen.

Great game by the way!

Pause menu is unfriendly, at least on phones

On Android, from F-Droid.

I paused the game so I could make the other github issue I made, but it did not pause the timer, and it has no way to return to the game without teleporting somewhere, making pausing effectively a fail-state.

Can't run on Chrome

I think my localStorage is broken on chrome, not sure why (even in private nav).
But maybe it should still start and show a warning (persistent or not) that the game can't be saved ? 😅

image

Anyways, works fine on Edge ! (enjoying so far 🚀)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.