deathkiller / jazz2-native

🎮 · Jazz² Resurrection: Native C++ reimplementation of Jazz Jackrabbit 2
https://deat.tk/jazz2/
GNU General Public License v3.0
549 stars 37 forks source link

Issue with bluetooth gamepad #56

Closed altamir-uab-ufscar closed 6 months ago

altamir-uab-ufscar commented 7 months ago

Jazz² Resurrection version

2.6.1

System information

Raspberry Pi 4, Raspbian 64-bit

Issue description

Hi. It seems there is something messing with the input. Wherever I play Jazz 2 with a Bluetooth gamepad and with the default assignment, Jazz keeps going left. Workaround is to unmap the default controls for the gamepad.

Steps to reproduce

Build Jazz² Ressurrection as usual and start the game with default controls assigned to a bluetooth gamepad.

deathkiller commented 7 months ago

It depends on your bluetooth gamepad. Please attach game log (from terminal), so I can take a look.

altamir-uab-ufscar commented 7 months ago

Partial log follows:

void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Cache/Animations/Spring/spring_red_hor.aura" opened virtual void Death::IO::FileStream::Close() #> File "Cache/Animations/Spring/spring_red_hor.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Cache/Animations/Spring/spring_green_hor.aura" opened virtual void Death::IO::FileStream::Close() #> File "Cache/Animations/Spring/spring_green_hor.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Cache/Animations/Spring/spring_blue_hor.aura" opened virtual void Death::IO::FileStream::Close() #> File "Cache/Animations/Spring/spring_blue_hor.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Cache/Animations/Spring/spring_red_ver_reverse.aura" opened virtual void Death::IO::FileStream::Close() #> File "Cache/Animations/Spring/spring_red_ver_reverse.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Cache/Animations/Spring/spring_green_ver_reverse.aura" opened virtual void Death::IO::FileStream::Close() #> File "Cache/Animations/Spring/spring_green_ver_reverse.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Cache/Animations/Spring/spring_blue_ver_reverse.aura" opened virtual void Death::IO::FileStream::Close() #> File "Cache/Animations/Spring/spring_blue_ver_reverse.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Cache/Animations/Spring/spring_2.wav" opened virtual void Death::IO::FileStream::Close() #> File "Cache/Animations/Spring/spring_2.wav" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Cache/Animations/Spring/spring_ver_down.wav" opened virtual void Death::IO::FileStream::Close() #> File "Cache/Animations/Spring/spring_ver_down.wav" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Cache/Animations/Spring/spring.wav" opened virtual void Death::IO::FileStream::Close() #> File "Cache/Animations/Spring/spring.wav" closed virtual void Death::IO::FileStream::Close() #> File "Content/Metadata/Object/Spring.res" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Metadata/Object/Checkpoint.res" opened void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Cache/Animations/Object/checkpoint.aura" opened virtual void Death::IO::FileStream::Close() #> File "Cache/Animations/Object/checkpoint.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Cache/Animations/Object/checkpoint_open.wav" opened virtual void Death::IO::FileStream::Close() #> File "Cache/Animations/Object/checkpoint_open.wav" closed virtual void Death::IO::FileStream::Close() #> File "Content/Metadata/Object/Checkpoint.res" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Metadata/Collectible/Carrot.res" opened void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Cache/Animations/Pickup/carrot.aura" opened virtual void Death::IO::FileStream::Close() #> File "Cache/Animations/Pickup/carrot.aura" closed virtual void Death::IO::FileStream::Close() #> File "Content/Metadata/Collectible/Carrot.res" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Metadata/Collectible/Coins.res" opened void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Cache/Animations/Pickup/coin_gold.aura" opened virtual void Death::IO::FileStream::Close() #> File "Cache/Animations/Pickup/coin_gold.aura" closed virtual void Death::IO::FileStream::Close() #> File "Content/Metadata/Collectible/Coins.res" closed virtual void Death::IO::FileStream::Close() #> File "./Source/Menu.j2b" closed virtual void Death::IO::FileStream::Close() #> File "/home/altamir/.config/Jazz² Resurrection/Jazz2.resume" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Metadata/UI/MainMenu.res" opened void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/logo.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/logo.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/line.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/line.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/line_arrow.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/line_arrow.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/glow.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/glow.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/episode_complete.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/episode_complete.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Cache/Animations/UI/character_art_difficulty_jazz.aura" opened virtual void Death::IO::FileStream::Close() #> File "Cache/Animations/UI/character_art_difficulty_jazz.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Cache/Animations/UI/character_art_difficulty_spaz.aura" opened virtual void Death::IO::FileStream::Close() #> File "Cache/Animations/UI/character_art_difficulty_spaz.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/character_art_difficulty_lori.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/character_art_difficulty_lori.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/uac.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/uac.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/storage.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/storage.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_a.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_a.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_b.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_b.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_x.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_x.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_y.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_y.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_left.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_left.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_right.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_right.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_up.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_up.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_down.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_down.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_guide.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_guide.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_back.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_back.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_start.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_start.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_lb.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_lb.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_ls.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_ls.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_lt.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_lt.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_rb.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_rb.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_rs.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_rs.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_rt.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_rt.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_alt_a.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_alt_a.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_alt_b.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_alt_b.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_alt_x.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_alt_x.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_alt_y.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_alt_y.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_alt_left.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_alt_left.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_alt_right.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_alt_right.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_alt_up.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_alt_up.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_alt_down.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_alt_down.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_alt_guide.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_alt_guide.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_alt_back.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_alt_back.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_alt_start.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_alt_start.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/gamepad_alt_misc1.aura" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/gamepad_alt_misc1.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Cache/Animations/UI/menu16.aura" opened virtual void Death::IO::FileStream::Close() #> File "Cache/Animations/UI/menu16.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Cache/Animations/UI/menu32.aura" opened virtual void Death::IO::FileStream::Close() #> File "Cache/Animations/UI/menu32.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Cache/Animations/UI/menu128.aura" opened virtual void Death::IO::FileStream::Close() #> File "Cache/Animations/UI/menu128.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Cache/Animations/Lori/corpse.aura" opened virtual void Death::IO::FileStream::Close() #> File "Cache/Animations/Lori/corpse.aura" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Cache/Animations/UI/select_1.wav" opened virtual void Death::IO::FileStream::Close() #> File "Cache/Animations/UI/select_1.wav" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Cache/Animations/UI/select_2.wav" opened virtual void Death::IO::FileStream::Close() #> File "Cache/Animations/UI/select_2.wav" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Cache/Animations/UI/select_3.wav" opened virtual void Death::IO::FileStream::Close() #> File "Cache/Animations/UI/select_3.wav" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Cache/Animations/UI/select_4.wav" opened virtual void Death::IO::FileStream::Close() #> File "Cache/Animations/UI/select_4.wav" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Cache/Animations/UI/select_5.wav" opened virtual void Death::IO::FileStream::Close() #> File "Cache/Animations/UI/select_5.wav" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Cache/Animations/UI/select_6.wav" opened virtual void Death::IO::FileStream::Close() #> File "Cache/Animations/UI/select_6.wav" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Cache/Animations/UI/select_7.wav" opened virtual void Death::IO::FileStream::Close() #> File "Cache/Animations/UI/select_7.wav" closed virtual void Death::IO::FileStream::Close() #> File "Content/Metadata/UI/MainMenu.res" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/font_medium.png.font" opened void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "Content/Animations/UI/font_medium.png" opened virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/font_medium.png" closed virtual void Death::IO::FileStream::Close() #> File "Content/Animations/UI/font_medium.png.font" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "/home/altamir/.config/Jazz² Resurrection/Jazz2.config" opened for write virtual void Death::IO::FileStream::Close() #> File "/home/altamir/.config/Jazz² Resurrection/Jazz2.config" closed void Death::IO::FileStream::Open(Death::IO::FileAccessMode) #> File "/home/altamir/.config/Jazz² Resurrection/Jazz2.config" opened for write virtual void Death::IO::FileStream::Close() #> File "/home/altamir/.config/Jazz² Resurrection/Jazz2.config" closed

I did another remap of the buttons and the issue seemed to wane off, but this ensued:

https://github.com/deathkiller/jazz2-native/assets/13582164/8c0f7f2f-d602-4725-9653-58fc7f6c364e

Some more info:

20240419_22h16m03s_grim 20240419_22h16m07s_grim 20240419_22h16m09s_grim

deathkiller commented 7 months ago

It seems to be caused by your PG-90215 Keyboard and Usb Keyboard Usb Keyboard Consumer Control which report a0 axis as -1.0 (which by default means go left). I would need the log from the beginning, partial log is not enough. I can then add these devices to blacklist to ignore it. I don't know what causes the game to detect these 3 devices though.

altamir-uab-ufscar commented 7 months ago

Thanks. Here the complete log is: session.log

deathkiller commented 7 months ago

It should be fixed in the latest experimental build. There are a lot of other untested changes though.