youkaicountry / yknytt

Implementation of Knytt Stories in the Godot engine
Other
56 stars 8 forks source link

Nintendo Switch-related issues (played via Android 11 port) #185

Open ms2048 opened 1 year ago

ms2048 commented 1 year ago

I've recently tried YKnytt 0.5.1 on the Nintendo Switch OLED via the switchroot's Android 11 port (still in beta but working quite good).

The gameplay itself is 100% worth it and works ok (especially for the beta!) . However, there are some issues specific to it and solving these might improve the experience on this platform. Most of these also apply to anyone playing on a phone but with physical controller connected to it (or 'around it'). Just in case, I've also tested this on my old HTC U11 phone with Android 7.1.1 and some generic controller connected via Bluetooth.

These are all minor, so I'm enumerating them all together below:

(1) the debug mode can be accessed correctly but only from the touch panel; pressing the combination on the controller is not working; as the touch panel is not needed there (and obscures the screen a lot), having to turn it on just to then enable the console, type-in one command, turn it off and then turn the touch panel off, all of these from the different menus is very inconvenient (and from the docked/TV mode it is impossible at all, as there are no touch controls), there is also some bug that when the console is already on but inactive, pressing any button on the controller activates the keyboard which covers half of the screen... in case of this being hard to fix, maybe giving it a remappable shortcut would be a way to go, or even some 'cheat' functions of the debug mode separately? Some levels are too hard (at least for me) and having a way to just 'admire the view' in original KS was a great way to still enjoy them regardless.

(2) the key to select things in menus is not remappable and gets assigned strangely (in both cases the key was different from the native Android key to confirm selections - which would be the most intuitive default for it)... I'd suggest simply adding a possibility to remap it

(3) the game reacts to inputs from only one (the first?) controller - strangely, this contrasts with the key mapper reacting to all the controllers; this results in the docked mode on Switch being unplayable (as the internal Joycons are still connected while docked, in contrast to the original OS of the Switch)... as YKnytt is not a local mulitplayer game (yet... hmmm? :) ) I'd strongly suggest that the game should accept inputs from all the connected controllers; this way after connecting Switch to the dock the game would be playable by the external Bluetooth controller - that's like the original Switch games are working!

(4) there are problems with access to the data of the game on Android (only rooted Android gave me the actual access), and there are so many levels for KS, so I'd suggest adding an option to select where the app data should be stored, so that uploading levels by hand (like suggested in the readme.txt for Linux and Windows) / backing up saves and just memory management would be at all possible for the users themselves.

BTW this game was the sole reason for me to install Android on a Switch, I was waiting literally for YEARS just to be able to play KS portably (DS/DSi first, then playing KSDS on an actual NVidia Shield Portable via Drastic emulator, then playing KS+ on a GPD Win, later trying to no avail via the now-dead project Exagear on Android, etc.), so this project had already made my day/month... just saying ;)

up-left commented 1 year ago

I had no idea that this version could run on Switch. Glad to know that you launched it!

  1. Ok, I will make console combination work without touch panel. Maybe I need to choose another combination, because X+Y+down on a gamepad can be pressed by accident, but this needs to be checked. Does this solve problem with keyboard? You open the console, type iddqd for invincibility, and close the console with the same combination or escape.

  2. What is the native Android key to confirm selection? Current keys are Enter, Space, X or Select on a gamepad. I try not to add new mappings, because screen for keys is kinda full, and cheats and standart UI keys are better hidden.

  3. Ok, this one should be easy

  4. I can add button to select external worlds folder. This should be useful, because every KS user has it. Don't know what to do with 'saves' folder, because a player will have two of them. Maybe it's not a big problem. Also there is 'save backup' console command which create zip from all saves (but not 'save restore' =))

Thank you for participating!

ms2048 commented 1 year ago

Thank you for your help!

I'm sorry for the wall of text below - it started simple but is now getting kind of messy. Still, most of these are really trivial and (so it seems) not worth separate tickets. If you feel like moving something into a separate issue, please do so and I will comply.

  1. There is no keyboard on Switch, so I don't know. I can try connecting the keyboard via USB C port or Bluetooth if you want, but it will be a hassle (special dongle for USB C / USB A or... just finding a Bluetooth keyboard, as I don't have one at hand)
  2. A to confirm and B as 'Back' (BTW the latter is completely ignored in-game, despite the key mapper allowing to map it - maybe it would be worth fixing) is the default. There is also a special option specific to the Switch port to swap A<->B and X<->Y called 'Xbox Layout' but for some reason it is not working for everything (like, DraStic emulator gets confused by it). Seems to work for YKnytt 0.5.1 though.
  3. Thanks!
  4. Why do you say 'two of them'? An option to configure a single location is what I meant but I'm kind of confused. Configuring save folder is important - especially for Switch - because the internal memory of Android is only available 'externally' as a separate partition on SD card - additionally protected and so 'invisible' even to partitioning software, which is very inconvenient to access / backup, to say the least. How about just adding a single option for all the YKnytt files directory? You would store that single option in a constant place but everything else would be in that dir. That would also include the 'settings.ini', 'input.ini', logs, etc. - all that would seem mighty convenient to have an easy access to (and it already is - on Linux and Windows).
  5. Also, about keymappings for debug (so (2) again): the 'native' Android keyboard, even though very configurable, is mostly inaccessible in docked mode and a pain to use in general, so I would really appreciate some solution that would not involve typing at all. As the number of debug commands is really limited and switching between them every 2 seconds is not necessary, I would suggest simply adding 'Debug menu' similar to the 'Pause menu'. For example: an option in config like 'debug menu instead of a console'. This might also be useful for all the other platforms for people wanting to play via controllers from the couch, as the keyboard would be completely optional for them, too. It would also solve the (mentioned earlier) bug with Android keyboard randomly popping up during a game until the console gets deactivated.
  6. Another thing I forgot to mention - and this also applies to the Android phone I tested - is that both analog sticks are just ignored and treated like big buttons (pressing them is registered) - it would be extremely useful to be able to map separate directions so that, for example, you could move Juni via the left stick and use right stick for umbrella, etc. I can help you debug that if you want - you'd need to tell me how, though.

All the best!

up-left commented 1 year ago
  1. Ok, I will add 'A' as accept key. Can add more keys =) 'Back' is not implemented, but can be added in the future. 'B' is working on my Android, maybe it's device-specific.

4) I think about that every KS user has Knytt Stories\Worlds directory, and it would be convinient to just select it and have all these worlds in YKnytt. But what about Saves folder? What if it already has some save files? There should be an option to switch between standart and custom directories, but not lose worlds. Currently I prefer have two separate buttons for worlds and for saves.

  1. I can add up and down keys in the console which go through commands. Will be better and quicker to implement.
  2. Analog sticks are the separate topic. Currently I see no quick solution for them, because they can't be treated as buttons. But I will take a look.
ms2048 commented 1 year ago

(2) I expect more device-specific things there, I remember controller support for Android always being a mess. Having all already working this good I treat just as a happy coincidence :)

(4) Having Saves and Worlds configurable works for me. Still doesn't solve the problem of backing up everything, but those two are definitely the most important. It seems that I have a different way of thinking, as I am only considering Android platform (where there were no previous versions of KS) while you're considering the bigger picture of legacy directories and configs. I can't be of big help there, as I don't know much about these. But I imagine that just giving a warning of some sorts and then switching to the directory would be a good compromise. Just trusting the user - what could go wrong? :). I've also seen the following solution (don't exactly remember where, in DraStic possibly?): switching the directory would give a warning and after switching it would ask whether to move to this dir / just copy to it / do nothing, also to replace files or not. Not really a simple solution though - and easy to mess up irrecoverably.

(5) This will definitely help to some degree. As I'm trying to imagine how it would behave - and because of the bug I'm referring to - it would be also important to give some way of closing the console (I mean the effect of pressing the triangle on the rhs) using just the controller - maybe just via the debug shortcut again? This might work then; I'm definitely eager to test this when it will land.

(6) Keeping my fingers crossed ;)

ms2048 commented 1 year ago

I know it isn't ready yet but I couldn't resist installing Godot myself and testing the recent changes :), so - just in case - here are the problems I had on Switch, related to 925bbf524d4079b00416d3cbbc7d9c8fe4d2dbc7:

Hope this helps. I'm really impressed with how much work you put into this. All the best!

ms2048 commented 1 year ago

also:

ms2048 commented 1 year ago

I've tested switching to custom folders and encountered the following problems:

up-left commented 1 year ago

I've fixed some bugs you found. Without your help, most of them would go to the release!

I set sticks threshold to 30%. On my gamepad, zero threshold is pretty playable, so if you want to change that number, please tell me! New console combination is Info+Pause. This should resolve next two bugs. Have not reproduced bug with backspace key. I can't get access to SD Card in any way and don't know why. Found this year-old bug in Godot about it: https://github.com/godotengine/godot/issues/64809 I decided that virtual keyboard is a mess in FileDialog, it hides half of a screen and breaks tab order. Editing path is very rare event, and backup filename would be hidden with this keyboard anyway. Have fixed the bug with downloaded levels (probably). Near missed it. I might try to add category and difficulty to level buttons, but I'm not sure about it. My intent is not to overcomplicate UI, so I try to avoid adding new buttons and so on. Thanks again!

ms2048 commented 1 year ago

Working with 3289130ae0f3a3dfc88e6abb2745a31c3793b2e5 ...

ms2048 commented 1 year ago
ms2048 commented 1 year ago

sorry for the last post, as I was wrong: there is still some randomness to whether the game will pause or not

ms2048 commented 1 year ago

Could you also pretty please remove the (Xbox X) key from 'ui_accept' event? Or is it still needed, now that the correct button (Xbox A) has been assigned to it? This actually turned out to be the source of randomness mentioned above, as I have mapped 'show_info' to (Xbox X), so sometimes it 'clicked' the 'Resume' button in the pause menu... crazy coincidences, one after another. But the more default actions for buttons, the more they will clash together, that's why I have this request (and always forcing pause when opening the console would be another one - it is just a one-liner (and a little more than that to also hide info) and seems to be working fine after I FINALLY figured out the ui_accept conflict).

ms2048 commented 1 year ago
ms2048 commented 1 year ago
up-left commented 1 year ago

I put a slider for stick sensitivity on screen for keys, so no advanced settings needed for now. Also you can try assign something to stick push buttons, it should work. The game is going on in console because I'm not sure how all commands behave in paused mode. Player might want to see immediate effect of a command; it looks better if music is not stopped. And you always have an option to press Pause+Info and pause the game. I didn't intend this, but let it be a feature. I didn't reproduce the bug with custom world directory. I set it to download folder, download a level from knyttlevels.com, and it works. I don't have access to SDCard even if I specify direct path. Maybe later a solution will be found, but for now you just can't use it. I added hints with category to buttons. Also added a button to go to level splash screen from pause menu. I hope it brings more help than complications so far. Back event is just an alias for the back button, but I made an exception for text edit fields. I will not remove X as accept key, because it is very handy to use with dpad (on my controller at least). Also this is the default jump key, so some players may use it. There is no difference between reading levels on Android and Windows, so I think it's different storage performance. Currently there are no plans to optimize it. Thanks for all these bugs and ideas!

ms2048 commented 1 year ago

Now, that's a lot of changes, great stuff, thank you for considering all of these comments!

The most important thing is the custom Worlds directory bug; for some reason it does not work for me. I must be doing something wrong, as it also does not work on Windows. I set the custom directory, download a level and that directory remains empty (both on Android and Windows), while the level is downloaded to the default dir (both on Android and Windows). I can move the level from the default dir to the selected one and it will still be playable (on Windows), or it will disappear from the list of playable levels (on Android, even though the directory is on internal memory).

I don't have much time to test other things right now, will try later.

up-left commented 1 year ago

I will fix it later, I need to check read permissions on Android before setting this directory

ms2048 commented 1 year ago

Ok, so first impressions for now (f8e367f7fc50dbf0a8c30c925ac4b802d97006f9) are quite good. Especially adding the properties in green helps greatly in browsing both through downloads and level selection greatly. I would rather use the syntax like '[easy,hard] medium puzzle/env' so that the difficulties would be emphasized more, but that I have done myself with a one-line change.

The analog sticks on Switch are now usable in full. This really feels like you're some genie granting wishes left and right :).

Other things are like before, but they are correlated, so (mobile users') main inconvenience is related to actually switching between levels. When all levels are downloaded via your server, this incurs a 43 seconds penalty (measured on a Switch) each time from when the level selection starts to unlocking the filters. Download list is even worse - 65 seconds each time, or down to ~25 seconds when the 'Worlds' directory is empty. Now that the filters are locked until the list loads fully (and I understand the reason behind this, as otherwise the results of filtering were incorrect) there is no skipping this. As the game quits to the main menu instead of to the level selection, this means waiting each time. I would be able to shorten this time by dividing levels into multiple directories, but as of now this does not work - as described above.

Anyway, I understand that returning to the populated list from in-game is not easily doable in Godot, now that I started to read about it a little; from my understanding whatever scene stays in memory - even if it is hidden - is still processed with all the events and such attached, slowing down and complicating things. Seems strange to me as switching between scenes efficiently would be a common scenario for a game engine, but I'm not the one writing it, so I probably misunderstood something.

I just want you to know that for mobile users this can be a showstopper, especially for impatient ones.

Overall - considering that YKnytt is still in beta - it is much better than I expected when I first installed it.

ms2048 commented 1 year ago

... and the problem with being trapped inside a search box also got solved... nice!

ms2048 commented 1 year ago

Internal storage access finally worked in 724a62c7ee6fef6633fdbff37675b7016c7537dc! The app had the file permissions revoked somehow and I missed it, probably because I am reinstalling the .apk constantly.

Now that the access has been solved, I have an idea to overcome the performance issues: how hard would it be for YKnytt to act as 'document viewer' for .knytt.bin? That way one could easily select the level in any file manager and that level will load instantly, bypassing the level browser altogether. Cmdline parsing is there and it seems that adding 'intents' to AndroidManifest.xml in Godot just requires first to go to 'Project -> Install Android Build Template' and then the manifest appears in the 'android/build' subdir of the project. Just saying ;)

ms2048 commented 1 year ago

... and another idea, in case the previous one would be too convoluted: there already is a command 'world' that is failing when missing an argument. How about showing a file browser instead, with default location set as in settings? EDIT: (removed unimportant stuff)

ms2048 commented 1 year ago

... or even better: instead of a file browser - a very simplified level selector with just filenames and without all the extra stuff that needs cache access.

up-left commented 1 year ago

I set high priority to a thread that loads level list, so it should work better. On my device 50 levels was loaded in 3 seconds, which is pretty acceptable I think. You can also try to make level loading single-threaded: just comment lines from 69 to 74 in LevelSelection.cs. It will work even faster, but freeze the application. I assume that not many users will download more than 50 levels, so there is no big reason to optimize it. But the best way to fix it is to rewrite cache. Currently it reads from ini files, and something like sqlite should work much better.

ms2048 commented 1 year ago

Yes, SQLite seems like an obvious choice there; I've seen that there is some stable and cross platform support in Godot for it. You'd still need to store and test for timestamps to detect whether to update each entry but even then it will be much faster.

I have measured no significant improvements with the new version: for Switch it is now 42 seconds instead of 43. The commented out version is definitely faster but still over 20 seconds. I'm not sure about how you filtered these levels on your server to go down to ~900 but the full knyttlevels.com database is over 2800 files and growing. Performance would tank even further with more levels.

I would understand many different ways of reasoning behind not optimizing, or including, anything in an open source / free software project. I would understand that you yourself don't need it or don't have time for doing it. Also the approaches of 'patches are welcome' or even 'patches are not welcome' - while annoying - are all valid for many different projects.

However, the reasoning about 'not many users' doing something is so flawed, that it simply implodes upon itself, taking down the project with it. Kind of like the democracy itself :). Let me give you an example: 'not many users would [prefer KS over Mario / care enough about KS to even boot it up after so many years / play such a game for more than 10 minutes], so there is no big reason to even develop YKnytt at all'.

Another example: I remember that you're considering level editor at some point. But the level designers are a minority within a minority, so why do you even care about them? We both know the answer to that - but it stays in stark contrast with doing what 'many users' would need or use.

This very project simply is there FOR not many users. I, for one, would be glad if your userbase would grow into millions but today it didn't happen (yet! :) ).

In case of Knytt Stories, I would say that the main 'selling point' that allowed it to survive for so long, is - apart from the very good engine behind it - exactly the amount (... well, also quality ;) ) of available levels. That way you can play indefinitely. Every player that enjoys it will have their library of levels growing, not shrinking. So I would consider people going with less than 50 levels after - let's say - a month or two, are the ones that simply didn't enjoy KS enough to play it more and explore further, despite having the opportunity to do so at a click of a button (you designed this brilliantly!). They are the ones not worth optimizing for, they will not care.

If the above did not convince you, I promise to just shut up :)

P.S. There are also people - like me - hating all the 'cloud solutions' with a passion; for them downloading everything from everywhere is the only sensible way of going forward, like a (good) habit. They are definitely in the minority BUT they are usually tech savvy enough to also contribute something back :)

Seriously though, right now I can just report bugs. I would fork the project and do the optimizations myself. I cannot, though, due to real life priorities.

ms2048 commented 1 year ago

Also, a question: on a platform with costly file accesses like Android, wouldn't 'Optimize' have the opposite effect for a level? If so, simply calling it 'Unpack' would probably be better.

up-left commented 1 year ago

Yes, it might happen for some small levels which use custom objects intensively. "Optimize" unpacks a level and turns tilesets into collision polygons. So it helps not only to reduce memory use, but to decrease delays between areas. But not always. I just don't have enough motivation to optimize level list now. I don't download all the levels to my device, I don't have free 6 GB for it =) It's not obvious, but saves are not deleted when you uninstall a level, so a player can do it with no consequences. Any PRs for this are welcome, of course. A half of knyttlevels is duplicates and low quality levels, so I expect that about 1000-1500 levels can be added to the database. But I don't know which of them. I have some lists from forum and YouTube, but a lot of good levels was not taken yet.

ms2048 commented 1 year ago

Not having enough motivation is a perfect reason here. Maybe one day I will find some of my own. I was just referring to the previous reasoning. Don't worry about this. By the way, if you're saying you don't have 6 GB for the favorite game of yours that you're even developing yourself, then it is clear to me that we come from two completely different worlds. Never mind then, let's move on...

Not knowing which levels are good is enough of a reason to include some ways of rating a level. After that, just putting all the levels up for download (except old variants/versions) and letting all the players (together and also individually) a way to decide which ones are ok would be the easy route. I know there is a + / - option but the proper rating system (with comments, tags, links to forum threads, etc.) would be more effective. For now it isn't exactly obvious what is the purpose of the current one: is it to report bugs or good/bad level design? Also, I am often offline and I cannot do anything: view achievements, vote or mark level as bad, etc. Sometime in the future - after polishing up the core gameplay, improving stability, etc. - I would suggest working on an offline experience. Being dependent on access to some external server in a single player game should be eliminated whenever possible.

Doing ratings / favorites / tagging offline, pairing that with some column-based level browser with dynamic playlists (I imagine something akin to foobar2000 for audio) would also be a good way to personalize and sort through the levels the way media managers allow going though the music / movies library. My point is, I have almost exactly 1000 times more music files than there are KS levels on your server (just confirmed that :) ), yet still I find it easier to sift through the former than through the latter. It's the tools you use that are important.

As for my experience with the current version on Switch (haven't updated to the newest commit yet), it is a very good one. Still, I am experiencing strange bugs that I'd find hard to even report properly:

Overall nothing serious. The Android 11 version I am using (the only one working with OLED model for now) is also in beta, so some of these could be due to that. Will keep you posted.

ms2048 commented 1 year ago
ms2048 commented 1 year ago
ms2048 commented 1 year ago
up-left commented 1 year ago

I made one more check to disable keyboard if console is closed, so this bug should disappear. As for the lag, I think there is a bluetooth issue. I have some slight delays with it too, but not serious. Wired controller works fine. Can't reproduce 'Last Played' sorting error. Does it disappear if the library is small? Also set filter for font. '+ / -' are for your personal impressions of a level. I made hints for this, so it should be more clear. The idea is that if a level is broken, you press 'complain' button, and if a level is good, I will see your achievements. I'd like too see more options in rating system (including button 'Level is too hard for me'), but any complex system is a matter of the very distant future (at best). But thanks for suggestions!

ms2048 commented 1 year ago

Thanks for all the changes!

For a keyboard bug, I will report there if I encounter it with a new version (btw maybe make a new beta release? as it seems much better than the current one on two fronts: levels compatibility and ability to better report bugs - as saves would get sent to you automatically; it is still beta, so it shouldn't be too scary on your side)

Thanks for the filter fix. Like I said, setting the filter makes the non-smooth scaling worse (at least on a 720p screen), so I'd suggest you double check that (just switching the filter together with the scale setting should be ok I think).

I haven't said anything about a lag - the bug I am mentioning literally blocks left / right input despite me still holding the corresponding button (well maybe it would block other inputs too, but these two are the ones usually held instead of just pressed) and until I depress and press again, Juni is moving vertically. It has nothing to do with Bluetooth, as even when Joy-Cons are treated as a wired controller (with Bluetooth turned off, for good measure) I am still experiencing the bug, once per 5-10 minutes.

I cannot test for small library, as I have a big one :). Seriously, I don't know how to test this properly. Are there any timers that would time out the sorting? It takes about 5 seconds each time on ~550 levels I have now when this bug occurs.

Own categories would be nice, as everyone has their own approach to large libraries. For example, if such system was implemented, I would have following categories: own rating (0-5, with 1/2 increments), completed, backlog, too hard, not interested, bad design. I could squeeze the last 3 into a zero rating but others feel like mandatory (for me). So we would have the 'too hard for me' category in common but I doubt you would like all the other.

As a side note, Spotify does not have this feature. There is only a heart tag, which means whatever you like it should mean but that is all for tagging there. That makes my Spotify library into a big unmanageable mess. Same goes for Netflix, HBO, etc.

ms2048 commented 1 year ago
ms2048 commented 1 year ago

Both a keyboard bug and a left/right bug are still there, unfortunately.

Edit: now the 'keyboard bug' is a little different. Sometimes, instead of a keyboard, the debug console pops up instead after pressing the 'A' button (which I have defined as 'jump'). Dismissing it via 'pause' and then just pressing the 'A' button brings it up again. After pressing show_info+pause and dismissing it, the console does not come back again.

ms2048 commented 1 year ago

I think I know the reason of the bug with sorting now: I'm using the 'synchronous' variant (with the lines you suggested commented out), as this is much faster for when there are a lot of levels. This also means that the filtering buttons are immediately available the moment it stops iterating through levels. But the list of levels isn't full yet: that happens another few seconds later - I can observe that as the scroll bar on the right keeps shrinking as the list is filled. It is filling very fast but still takes a few seconds. If I try to sort while the list isn't filled up yet - then only the levels listed so far will be sorted; the remaining ones will then be added to the end. So if I played one of the last/bottom levels (by 'Default' sorting, whatever that means) - then it would stay at the bottom of the list, even when sorting by 'Last Played' which should promote it to the top.

up-left commented 1 year ago

As for keyboard bug, I think it's a hardware issue. I never experienced it, and the game release buttons programmatically only in specific places (like cutscene or pause).

Sorting bug was fixed (I think). Filter becomes enabled a little bit later now.

As for hint for first button, I did this intentionally. It's mostly for newcomers which might not understand why this text is green. Not a big issue, but I will not fix it.

The console never pops up after pressing 'ui_accept' or 'jump', so I don't know why this may happen. I will take a look.

I will make a release this week, maybe even tomorrow. Nothing really serious is left, if I haven't missed anything.

ms2048 commented 1 year ago

I believe that in the first paragraph you meant the 'left / right' bug and not the 'keyboard' one. This one is definitely software-related... well, it might be that the software would be the Android 11 itself (in beta on Switch and has a lot of problems itself) or Godot (in beta. too; I am using the exact version 3.6.beta2.mono mentioned in the readme). Both controllers (wired Joy-Cons / Bluetooth Switch Pro) are working perfectly fine everywhere else: in other Android games and in Switch-native ones, so everything is perfect hardware-wise. Also, I had the strange occurrence of this on the current version (40c034936953d2292fc5ccf5f7c5d979d6653fe5): Juni stopped mid-screen but the walking animation was still playing 'in place' (!) and I was still holding the 'right' button. This time, without releasing/re-pressing the button, Juni started walking again after about one second. It was a straight horizontal path (no slopes, etc.) and afterwards I tried to reproduce this again, to no avail. Maybe this is the same bug or maybe something else, I'm just reporting it for posterity. None of these bugs are showstoppers anyway.

Sorting bug seems fixed indeed. Thanks! It also loads levels slightly faster now. I still think that the single-threaded variant should be the default, as it is much faster. The only disadvantage to that is that the game seems frozen for some time; maybe adding some spinning wheel or progress bar would alleviate that feeling? Hopefully, all this will stop being relevant once SQLite cache gets introduced some day.

I don't understand your reasoning about newcomers... the newcomer would have - by default - multiple default levels and select one of them to play. The situation I was referring to was when there is exactly one level visible - to achieve that, filtering needs to be used in some way and I think that at that stage the user is not a newcomer anymore.

As I encountered the 'keyboard/console' bug today I tried some further actions and the game behaves like there are three 'invisible' buttons in a single row (and up / down didn't change anything, so nothing else seems 'selectable') sorted like that: [nothing] [nothing] [show_console] (isn't it the exact layout of the top row of the console itself? That might be the clue). I can move through that invisible 'menu' via left / right and (A) would show the console - but only on the third 'button', there is no effect on the other two. After dismissing it with 'pause', I can show it again with (A) or move between the three options while the game plays. After invoking the console 'properly' via 'pause' + 'show_info' and then 'pause', the effect/bug disappears, until the next time it randomly occurs.

With the newest commit 40c034936953d2292fc5ccf5f7c5d979d6653fe5 the keyboard did not pop at all, it was always the console. But I remember distinctly that it popped up twice on fa71276c04485c37f6ed473e3c242f8f61d4a1b0 that (I suppose) tried to alleviate this. I didn't mention that and maybe this is important, that when the keyboard popped up and I somehow dismissed it, I then usually had the light green border over a whole screen, like the screen itself was 'selected' and the only way to get rid of that border was to restart the whole app. The green border is not showing now when the console pops up. Another strange effect - also with a keyboard pop up and not the console - was that half of the time Juni would run blindly left or right while the keyboard was on screen and even after dismissing it - re-pressing 'left' or 'right' fixed that. I hope these would lead you to the root cause somehow.

Fingers crossed on the release!

ms2048 commented 1 year ago

The new pixel font is much better, congrats on finding it!

Btw, now that the font is scaled properly, changing the size of the smooth font from 12 to 10 allows it to fit all the categories filter entries on the default screen (on Windows), also more text now fits there horizontally (important in level descriptions). It is on a verge of being too small on Switch, so it might be a problem on phones. Maybe worth doing dpi-dependent scaling in menus? Just a thought. In game the current size is better though.

ms2048 commented 1 year ago

Also, changing font.ExtraSpacingBottom from -6 to -9 for the pixel font allows for fitting all the options in this case too. Doesn't look too bad in my opinion.

up-left commented 1 year ago

Your explanation about button row was very clear, I really forgot about a tricky call that toggles the console on the third button. So it should be fixed now.

I mean that first button always shows description instead of category when list is loaded. This is what players see when they click "Play" or "Download Levels".

I'm not sure that font size or popup item height should be decreased, on my phone they are already pretty small. So I removed "Other" option from categories for this release. Maybe later I (or someone) will have time for fine-tuning.

ms2048 commented 1 year ago

When you say about your phone - was there a problem with the "Other" option visibility? There wasn't on my phone and on Switch either. The problem occurs only for the non-mobile platforms, as they have forced aspect ratio on menus for some reasons (I hope that these quirks will disappear in the future). So you shouldn't worry about phones, where everything was fine.

up-left commented 12 months ago

But now I have the same height on all platforms, so I need different styles for this popup on desktops (decreased) and on mobiles (default height).

ms2048 commented 12 months ago

I haven't encountered 'left / right bug' and 'keyboard/console bug' for quite some time now. Maybe they were both fixed together somehow? Anyway, it feels like they were. Happy for the release happening, too - now more people will be able to try this game! Btw the last sentence (or two) in the readme is now obsolete.

Edit: the 'left / right bug' is still there. It seems to be less frequent though.

up-left commented 12 months ago

I made one more attempt to fix 'left / right bug'. Please report if you noticed it!

ms2048 commented 10 months ago

The 'left / right bug' is still there in 757e62548d074e3a12c41816b22e60cd84fbb067 but maybe it should be called differently:

ms2048 commented 10 months ago

Another thing, I've just tried running YKnytt on an old Retroid Pocket 2 (an Android 8.1 device with built-in controller but without a touchscreen). The game installs fine but does not recognize the internal dpad at all. All the other controls seems to work but the game is really only playable through an external controller which is a shame. All the other Android software I've tried detects the dpad just fine (including all the emulators it is advertised for, etc.).

This is probably a Godot problem so I expect this to be unfixable on your side.

I'm pointing this out anyway just to warn others that it will not work on all Android devices unconditionally. Some kind of compatibility table would be a nice to have.