have you considered making your own "virtual" joystick/buttons while we wait for a fix?
something like:
// Project: vnbutton
// Created: 2019-11-21
// show all errors
SetErrorMode(2)
// set window properties
SetWindowTitle( "vnbutton" )
SetWindowSize( 1080, 720, 0 )
SetWindowAllowResize( 1 ) // allow the user to resize the window
// set display properties
SetVirtualResolution( 1080, 720 ) // doesn't have to match the window
SetOrientationAllowed( 0,0,1,0 ) // allow both portrait and landscape on mobile devices
SetSyncRate( 30, 0 ) // 30fps instead of 60 to save battery
SetScissor( 0,0,0,0 ) // use the maximum available screen space, no black borders
UseNewDefaultFonts( 1 ) // since version 2.0.22 we can use nicer default fonts
SetPrintColor(0,0,0)
SetClearColor(255,255,255)
Device$ = GetDeviceBaseName()
If Device$ = "android" `Make VirtualStick/DPad
GLOBAL GoUP as Integer
GoUP = CreateSprite(0) : SetSpriteColor(GoUP,0,0,128,192) : SetSpriteSize(GoUP,64,64)
SetSpritePosition(GoUP,64,GetVirtualHeight()-192) : FixSpriteToScreen(GoUP,1) : SetSpriteDepth(GoUP,0)
GLOBAL GoDOWN as Integer : GoDOWN = CloneSprite(GoUP)
SetSpritePosition(GoDOWN,64,GetVirtualHeight()-64) : FixSpriteToScreen(GoDOWN,1) : SetSpriteDepth(GoDOWN,0)
GLOBAL GoLEFT as Integer : GoLEFT = CloneSprite(GoUP)
SetSpritePosition(GoLEFT,0, GetVirtualHeight()-128) : FixSpriteToScreen(GoLEFT,1) : SetSpriteDepth(GoLEFT,0)
GLOBAL GoRIGHT as Integer : GoRIGHT = CloneSprite(GoUP)
SetSpritePosition(GoRIGHT,128,GetVirtualHeight()-128) : FixSpriteToScreen(GoRIGHT,1) : SetSpriteDepth(GoRIGHT,0)
Global TouchSprite as Integer //for Collision vs Stick/Button
TouchSprite = CreateSprite(0) : SetSpriteVisible(TouchSprite,0)
Endif
Global Button as Integer
Button = CreateSprite(0) : SetSpriteColor(Button,255,0,0,192) : SetSpriteSize(Button,192,96)
SetSpritePosition(Button,GetVirtualWidth()-192,GetVirtualHeight()-96)
FixSpriteToScreen(Button,1) : SetSpriteDepth(Button,0)
PLAYER = CreateSprite(0) : SetSpriteColor(PLAYER,0,0,255,255) : SetSpriteSize(PLAYER,32,32)
PX# = 540 : PY# = 360 `Player Start Position
//Make Board
for x = 0 to 20 step 4
for y = 0 to 20 step 4
This = CreateSprite(0) : SetSpriteSize(This,64,64) : SetSpriteColor(This,0,128,0,255)
SetSpritePosition(This,x*64, y*64)
SetSpriteDepth(This,100)
next y
next x
GLOBAL LR as Integer `Left/Right
GLOBAL UD as Integer `Up/Down
do
If GetRawKeyState(27) = 1 then End `ESC to End
LR = 0 : UD = 0
If Device$ = "windows"
LR = GetRawKeyState(39) - GetRawKeyState(37) `RightKey-LeftKey
UD = GetRawKeyState(40) - GetRawKeyState(38) `DownKey-UpKey
If GetRawKeyState(16) = 1 then SetSpriteColor(Button,Random(0,255),Random(0,255),Random(0,255),192) `Shift Button
Else
Touches = GetRawTouchCount(1)
If Touches > 0
DoControls(Touches)
Endif
Print(Touches)
Endif
PX# = PX# + LR*10
PY# = PY# + UD*10
SetSpritePosition(Player,PX#,PY#)
SetViewOffset(PX#-540,PY#-360)
Sync()
loop
Function DoControls(Touches)
ThisTouch = GetRawFirstTouchEvent(1)
Repeat
SetSpritePosition(TouchSprite, ScreenToWorldX(GetRawTouchCurrentX(ThisTouch)), ScreenToWorldY(GetRawTouchCurrentY(ThisTouch)))
LR = GetSpriteCollision(TouchSprite,GoRIGHT) - GetSpriteCollision(TouchSprite,GoLEFT)
UD = GetSpriteCollision(TouchSprite,GoDOWN) - GetSpriteCollision(TouchSprite,GoUP)
If GetSpriteCollision(TouchSprite,Button) = 1 then SetSpriteColor(Button,Random(0,255),Random(0,255),Random(0,255),192)
ThisTouch = GetRawNextTouchEvent()
Until ThisTouch = 0
EndFunction
not sure why but my phone is limited to 2 touches but dunno if you might need more?
and, you can resize the TouchSprite to, say, 64x64 if you're looking for 8 direction checks. haven't played your game yet so not sure what kind of joystick/dpad you might need but you get the idea.
and, it's just 1 workaround. i'm sure there are others (here's a run at a "virtual trackball":
https://forum.thegamecreators.com/thread/224156#msg2642562 , for example, using a different method).