Raspberry Pi: Keyboard recognized in Menu but not in Game
Gemba opened this issue · 5 comments
Describe the bug
On a Raspberry Pi the binary can be started and shows up the menu. In the menu navigation works with keyboard controls but after starting a new game the keyboard events are no longer recognized.
Allegro Lib
Tested with 4.4.3.1 (bundled with this repo) as well as with 4.4.2.1 from Raspi OS Buster.
To Reproduce
Steps to reproduce the behavior:
- Build this repo on Raspberry Pi
- Start
headoverheels
, navigate to new game - Let game start
- Notice that no keyboard presses are recognized
Expected behavior
Keyboard should be usable in game.
Testsystem
- OS: Raspi OS Buster (Debian 10)
- Generic wired USB keyboard attached
- Reproducable on Raspberry Pi 3 or Raspberry Pi 4
Additional context
- Running from a full desktop on the Pi (lxde) or with a minimal xinit session does not make a difference
- Also posted some additional info on the RetroPie forum: https://retropie.org.uk/forum/topic/33861/head-over-heels-from-2003-would-it-work-on-retropie/13?_=1678903291603
- However: On a Desktop X11 System (Debian 11, x64, Bullseye with allegro lib from repo 4.4.3.1 or bundled with this repo) the game is fully playable.
PS: Thanks for reviving this classic game and gem.
Do you have hints/ideas how to track this down? Maybe it is also related to the allegro lib itself.
FWIW. As a workaround the allegro 5 build can be used. However, this limits the usage to the Raspberry Pi 4, as the Raspberry Pi 3 and the Head-over-Heels allegro5 binaries are not performing well together.
cf. https://gist.github.com/Gemba/f2c541f6e027d7278e948f80e311e318#file-headoverheels-sh-L46
Such “the keyboard works in menus but not in the game” I am sometimes suffering (but sometimes not, it looks really random) when I run the game thru gdb
(the debugger)
as for the issue with keyboard, that’s what I’ve got
keys are handled in two distinct threads, those which control the game and those which control the characters
so anything that treats threads unequally may broke the key handling
the good news are that since C++11 there’s std::thread
https://en.cppreference.com/w/cpp/thread/thread
does anyone want to try porting thread handling to std::thread
, maybe?