lubomyr / uae4arm

amiga emulator (android port)
GNU General Public License v2.0
61 stars 9 forks source link

Absolute mouse coordinates are displaced #42

Open arithesage opened 1 year ago

arithesage commented 1 year ago

Hi, i tried setting mouse emulation in SDL for using absolute coordinates instead relatives to play games like Dungeon Master clicking the game UI directly in my Android tablet but the mouse moves wrongly.

As you moves from the tablet center to the border, the cursor appears more and more far than it should. Is like, touching the center sets the cursor in the correct place, but touching 2 cm away sets the cursor 2X the chosen coords, touching 4 cm away places the cursor 4X far away and so.

One could thing this a callibration problem, but the config UI works fine...

Any ideas?

mike111769 commented 1 year ago

Turn the mouse sensitivity down, I have mine is at .5, works fine... Also if your doing it in the actual SDL interface, don't there are issues between the emulater and SDL layer...

Mike

mike111769 commented 1 year ago

Just tried it, setting mouse hack in my straight 3.1 install, and my fully decked out scalos, mui, and Picasso, both worked fine.

arithesage commented 1 year ago

I will try. Thanks!

Also, i would love a way to switch between absolute/laptop mode without having to enter into SDL settings.

I have been playing a bit with Magic DOSBox and there are two things i love of it: the possibility of easily switch mouse modes in any time and the "Target" feature for setting custom touch controls to send mouse cursor to a coordinate and perform a clic.

I would love seeing these in uae4arm, but i suppose they would require a lot of work...

mike111769 commented 1 year ago

Lol, ya I have MDB .85 it's got scripts for DS settings....

but ya I have a fully touchscreen setup for daggerfall, I uploaded it to his website...

and agreed, there is a lot that can make it better, assign keyboard to joystick movements, for games like ultima exodus, that uses keys to move.....

as I see it, it's an Emulator, it should take advantage of today's technology to make it easier to play then back in the day...

hell even back then it got me I couldn't use the curser keys to move... but using a separate keyboard, it was livable. using an on screen keyboard makes it worthless ...

Mike

mike111769 commented 1 year ago

And as far as the SDL goes.... set as much as you can in the app itself, then when you run into a block, try the SDL, but be advised that that can screw the app settings and you'll get lost, at least I did...

Have to clear data in app info more times then I want to remember...

Mike

arithesage commented 1 year ago

I have done the test of enabling mouse hack and setting the sensivity to .5.

After loading Dungeon Master, for example, while i'm in Amiga DOS, or Workbench, the mouse works perfectly, but when the game itself load... something seems to break because i can't move the cursor anymore.

The curious part is that, at the game main menu, the cursor is set at the "New game" button and i can click, but once the dungeon has loaded, i can't move it anymore.

I have tested launching Populous with same results: While in Workbench the mouse is fine, but at the main menu i can't click the "Campaign" option. The mouse cursor is just unresponsive.

mike111769 commented 1 year ago

Hmm I've had issues with games too, are you using WHDLoad? just curious...

I've noticed that the games don't use the same display layout as the desktop, and I've had the same issue.

And could not figure a work around, the games play at lower resolution then the desktop..

that was my guess anyway...

And NO Calibration in SDL did NOT work, it actually screwed my desktop calibration...

So my only suggestion is to use the regular mouse movements... your not gonna get any better....

I've never tried, but if you can find a game that uses the desktop resolution? maybe it'd work? it's worth a debug test....

Mike

mike111769 commented 1 year ago

OK just tried my Ultima 3 with the mouse hack, it's off to the bottom left, but I'm thinking that's so you can see the pointer... and ya I can see in some games that'd be an issue...

Not sure, there are a lot of quirks and bugs, unfortunately it's stll the best Amiga emulater out... lol I still use the old Vice64! buggy as hell but still the best.

Mike

mike111769 commented 1 year ago

And on a side note, I disabled the on screen left click, annoying as hell, and in the SDL I assigned my volume up to left click and volume down to right...

made playing a lot easie.

Mike

arithesage commented 1 year ago

I'm not using WHDLoad, only ADFs.

What seems strange to me is that, if the mouse cursor works in Amiga DOS, it should works also in the game.

I mean... in a standard A500 setup, you are always in the same resolution, nothing changes, and the emulator is doing the same things in Amiga DOS and in ingame... isn't it?

I think that, it there are any problems with the mouse getting unresponsive, it should happen in Amiga DOS also...

P.D: I'm using the A500 setup that you get by default once the emulator opens the config GUI. Tomorrow will check the mouse configuration in SDL. I remember having all things disabled...

mike111769 commented 1 year ago

Ya I would agree with that 100% but unless I have something configured in my bare 3.1 install...

But it was perfect, in bare 3.1 and in my tweaked setup. ..

Ijust tried the a500 quick set, and booted WB from the adf and it worked fine...

And I have nothing set in mouse settings, check advanced, make sure the laptop part is checked..

Lastly, go into android/data rename the UAE folder go to app info clear the data, rename the original back, then try it without changing anything, especially mouse calibration, And do the quick set, pop WB adf in and see what happens....

If it works go from there....

arithesage commented 1 year ago

Well... after doing some testing, the problem seems to be game dependant, or maybe is a matter of the game being programmed with the Amiga DOS API or assembly...

I have deleted uae4arm folder, and also wiped app cache. The only SDL config done is switching from laptop (relative) cursor mode yo absolute.

And the only mouse config done un the emulator is enabling mousehack and setting mouse speed to 0.5.

With these settings, and a A500 setup (Kickstart 1.3) i have these results:

Eye of the beholder: no problems SimEarth Lores: same Battle Chess: same Missile Command v2.0: same

Lemmings: cursor is responsive but displaced Hero Quest: same as Lemmings

Dungeon Master: the mouse cursor is locked in place but you can still perform clicks (starts at the "New game" button coords, so you can just start the game)

Kult: same as Dungeon Master, but the cursor starts at the top-left corner of the screen.

Any ideas? 🤷🏼‍♂️

mike111769 commented 1 year ago

Well my first guess is you set it to absolute in the SDL, mine is set to relative...

your messing with the SDL before your trying to get a solution in the app...

The only thing I've done in SDL is change the buttons to numbers and make my volume keys left up right down clicks... and I'm not sure where but I disabled the left click hold to select multiple files, it got in the way...

mike111769 commented 1 year ago

And ya some do not go by the mouse hack I've had 15 different configurations for different games......

Why I always wantex an on screen joystick that I could add CRSR key up to.... but you can't, not in the app or SDL.

arithesage commented 1 year ago

I was trying that with SDL because is the only place where you can change that setting if you want absolute mouse...

If i leave the mouse with relative configuration (laptop mode), surely it will work (at least as i remember), but the thing i wanted to achieve was playing these games as if the game was touch screen compatible.

What surprises me if the different behaviour between games... Some works perfectly, with others the mouse coords are messed, and with others the mouse simply get stuck in place.

If it were fault of the mouse config in SDL i suppose ALL would have the same problem, but this is strange...

I will test again with relative mouse tomorrow.

mike111769 commented 1 year ago

Ya I get it, back in the day I had atkeast 100 games installed (WHDLoad games) and Ive haven't had an issue with the mouse hack enabled and no change in the SDL.... maybe it's a phone thing.. not sure but while your doing that I'll download some games, give me one that is giving you issues so I can can test it... one of the worst! lol I'll let know what I find.

as I said I've cleared data more then I'd like to admit, so I basically now have my tweaked and basic installs with only a couple programs...

mike111769 commented 1 year ago

just tried Elite it worked fine too, it was off until I put my finger on the pointer.... just trying to break it down to the actual issue.

arithesage commented 1 year ago

Well... i'm surprised now.

I was absolutely sure that absolute mouse was only possible disabling laptop mode in SDL config, but it seems that mousehack has the same effect. I have done a reset of the SDL config and leaved "laptop mode" enabled.

I'm using now the plain quickstart A500 configuration. Yesterday i tried enabling the native status line and disabling all touch controls except keyboard one. Now the status line is disabled and all touch controls visible, but i get the same results.

I have tested a new game, Death Knights of Krynn, and i get the same results as with Battle Chess and SimEarth Lores: The mouse works perfect, you can touch any element of the game and the cursor moves exactly to that place.

I would love be able to debug the emulator myself, but don't know how to debug the app while running in the device. I know how to debug in Android Studio, but i think the emulator will run poorly in the emulated device.

I have also some experience debugging C++ with GDB command line.

P.D: Also, i think if "mousehack" has something to do with absolute coordinates, it should be named that way because the current name is confusing, you don't have any clue of what kind of "hack" performs, and i would love if it could be enabled/disabled without restarting the emulator.

arithesage commented 1 year ago

just tried Elite it worked fine too, it was off until I put my finger on the pointer.... just trying to break it down to the actual issue.

Mmm... but Elite is a joystick/relative mouse controlled game, i think. I mean that, even if absolute mouse works perfect, i think would be a pain to control the spaceship...

I could test some WHDLoad games, but i need to create the WHDLoad "environment" first because i usually play with A500 config (and, if i play HD games, i use the 2.04 Kickstart and install them in the normal way).

I have testing games like Hero Quest, Lemmings, Dungeon Master, etc. because all of them are purely point-and-click games, that are the ones that would benefit more of being played in a tablet.

mike111769 commented 1 year ago

Lol ya, agreed on the restart and android studio....

OK I downloaded lemmings to test, I believe it set that way intentionally, so you can see the pointer that's not under your finger... I did move the speed down to .25 and it seemed the space between finger and pointer was less...

And I just tried the mouse calibration and it totally screwed UAE, couldn't even click start... So now I gotta do what I originally told you to do! lol I'm accustomed to it...

As for Elite that was just a test, no the game really can't be played with mouse hack...

arithesage commented 1 year ago

I would understand that the curso don't appears just below your finger to be able to see it... but the offset in some games is too much...

In the games that i reported to work fine, like Eye of the Beholder, when you touch the screen, the cursor appears just at nail side, and you can perfectly see it.

And i have no idea what's the matter with mousehack and the games where the cursor is totally locked in a point...

Test Dungeon Master if you can, because one thing i have noticed with this one is that the keyboard cursor arrows, that should allow you to move without clicking the arrow icons with the mouse, don't work as intended (or that is what ia think).

Surely, laptop mode is the most recommended mode in many games, but those where you need to react quickly, Lemmings and dungeon-crawlers, for example, are more playable imho with absolute coords mouse.

mike111769 commented 1 year ago

Ya that's already a known issue someone postedti here a few weeks, something about it being hard coded to joystick controls.

If you look under input you'll see that CRSR keys aren't even listed under keyboard...

But if you press 1 in the drop-down your able to assign the CRSR keys, but not in the keyboard list...

HenrikErlandsson commented 1 year ago

That was me. The problem I'm having is using a keyboard fully. The joystick I can use fully with a joystick. The mouse I can use fully with a mouse or touchpad. But there are some keys used for non-keyboard actions and which are not changeable. I know the cursor keys don't work, but there may be more e.g. Ctrl and Alt. Maybe this comes from WinUAE where there's a config to map the joystick port to cursor keys+right Ctrl+right Alt.

There are plenty of emus that are only good for games. This seems better, but not there yet. It would be awesome if a dev connected just a normal BT keyboard and tested applications and text editing to check the keyboard reading. Plenty of games that need the keyboard too: flight sims, Elite, Frontier, pinball games to name a few.

HenrikErlandsson commented 1 year ago

p.s. if the keyboard is working AmigaOS can already move the mouse Pointer with left Amiga + cursor keys. But in applications the mouse already works with mouse, touchpad, and phone screen touch.

mike111769 commented 1 year ago

ya I know, I don't get it....

I've used the SDL to assign the CRSR keys for some games, in the bottom-left I'd have:

     1  up

2 lft 5 actn 3 rgt 4 dwn

why I had different configurations for each game.

instead of having A500 or a 4000

i had elite, Ultima, elite, pool of radiance.. etc.

And I've tried messing with the configuration for UAE I didn't get anywhere, hell went as far as downloading the hex key map for the Amiga to edit the assignments in the configuration...

I haven't ever used a real joystick or keyboard if that what you meant there... so I know nothing about that...

dunno why it's blocking that 1 but you get the idea...

mike111769 commented 1 year ago

And to add your not going to get a touchscreen experience with UAE..... I've spent many an hour trying....

It's not like Magic Dosbox, I've invested over 3 months making daggerfall (elderscrolls) fully touchscreen.... believe, I se it as your running an Emulator on an advanced decice, it should utilize both... make it 1000x better....

mike111769 commented 1 year ago

here's my Picasso 96 install configuration may help...

config_description= config_hardware=true config_host=true config_version=4.5.0 pandora.rom_path=/storage/emulated/0/Android/data/atua.anddev.uae4arm/UAE/kickstarts/ pandora.floppy_path=/storage/emulated/0/Android/data/atua.anddev.uae4arm/UAE/disks/ pandora.hardfile_path=/storage/emulated/0/Android/data/atua.anddev.uae4arm/UAE/ pandora.cd_path=/storage/emulated/0/Android/data/atua.anddev.uae4arm/UAE/cd32/ ; host-specific pandora.cpu_speed=0 pandora.tap_delay=10 pandora.onscreen=1 pandora.onscreen_textinput=1 pandora.onscreen_dpad=0 pandora.onscreen_button1=0 pandora.onscreen_button2=0 pandora.onscreen_button3=0 pandora.onscreen_button4=0 pandora.onscreen_button5=0 pandora.onscreen_button6=0 pandora.custom_position=1 pandora.pos_x_textinput=0 pandora.pos_y_textinput=0 pandora.pos_x_dpad=4 pandora.pos_y_dpad=215 pandora.pos_x_button1=445 pandora.pos_y_button1=246 pandora.pos_x_button2=430 pandora.pos_y_button2=248 pandora.pos_x_button3=411 pandora.pos_y_button3=150 pandora.pos_x_button4=182 pandora.pos_y_button4=243 pandora.pos_x_button5=366 pandora.pos_y_button5=88 pandora.pos_x_button6=293 pandora.pos_y_button6=207 pandora.floating_joystick=0 pandora.disable_menu_vkeyb=1 ; common use_gui=yes kickstart_rom_file=/storage/emulated/0/Android/data/atua.anddev.uae4arm/UAE/OS/KSs/Kickstart-v3.1-rev40.68 (1993-Commodore-A4000.rom kickstart_rom_file_id=D6BAE334,KS ROM v3.1 (A4000) kickstart_ext_rom_file= flash_file= cart_file= floppy_volume=0 floppy0= floppy0sound=1 floppy0soundvolume_disk=0 floppy0soundvolume_empty=0 floppy1= floppy1sound=1 floppy1soundvolume_disk=0 floppy1soundvolume_empty=0 floppy2= floppy2type=0 floppy2sound=1 floppy2soundvolume_disk=0 floppy2soundvolume_empty=0 floppy3= floppy3type=0 floppy3sound=1 floppy3soundvolume_disk=0 floppy3soundvolume_empty=0 nr_floppies=4 floppy_speed=800 cd_speed=100 scsi=false sound_output=exact sound_channels=stereo sound_stereo_separation=7 sound_stereo_mixing_delay=0 sound_frequency=44100 sound_interpol=none sound_filter=off sound_filter_type=enhanced sound_volume_paula=0 sound_volume_cd=0 compfpu=false cachesize=0 joyport0=mouse joyport0autofire=none joyport0mode=mouse joyportfriendlyname0=Nubs as mouse joyportname0=MOUSE0 joyport1=joy0 joyport1autofire=none joyportfriendlyname1=dPad as joystick joyportname1=JOY0 bsdsocket_emu=false uaeboard=min gfx_framerate=0 gfx_width=768 gfx_height=216 gfx_top_windowed=15 gfx_left_windowed=0 gfx_refreshrate=60 gfx_refreshrate_rtg=60 gfx_lores=false gfx_resolution=hires gfx_linemode=none immediate_blits=false fast_copper=true ntsc=true show_leds=true show_leds_rtg=true chipset=aga chipset_refreshrate=59.826099 collision_level=full chipset_compatible=A2000 ciaatod=60hz rtc=MSM6242B cia_todbug=true unmapped_address_space=zero z3mapping=real fastmem_size=0 a3000mem_size=64 mbresmem_size=128 z3mem_size=128 z3mem_start=0x40000000 bogomem_size=7 gfxcard_size=16 gfxcard_type=ZorroIII chipmem_size=16 cpu_speed=max cpu_type=68020/68881 cpu_model=68030 fpu_model=68882 cpu_compatible=false cpu_24bit_addressing=false cpu_cycle_exact=false cpu_memory_cycle_exact=false blitter_cycle_exact=false cycle_exact=false fpu_no_unimplemented=true fpu_strict=true rtg_modes=0x502 kbd_lang=us filesystem2=rw,DH0:System:/storage/emulated/0/Android/data/atua.anddev.uae4arm/UAE/HDD/P96/System/,0 uaehf0=dir,rw,DH0:System:/storage/emulated/0/Android/data/atua.anddev.uae4arm/UAE/HDD/P96/System/,0 filesystem2=rw,DH1:Games:/storage/emulated/0/Android/data/atua.anddev.uae4arm/UAE/HDD/Games/,0 uaehf1=dir,rw,DH1:Games:/storage/emulated/0/Android/data/atua.anddev.uae4arm/UAE/HDD/Games/,0 filesystem2=rw,DH2:Unzips:/storage/emulated/0/Android/data/atua.anddev.uae4arm/UAE/Unzips/,0 uaehf2=dir,rw,DH2:Unzips:/storage/emulated/0/Android/data/atua.anddev.uae4arm/UAE/Unzips/,0 input.config=1 input.joymouse_speed_analog=5 input.joymouse_speed_digital=10 input.joymouse_deadzone=33 input.joystick_deadzone=33 input.analog_joystick_multiplier=18 input.analog_joystick_offset=-5 input.mouse_speed=100 input.autofire_speed=600 input.1.joystick.0.friendlyname=dPad as joystick input.1.joystick.0.name=JOY0 input.1.joystick.0.empty=true input.1.joystick.1.empty=true input.1.joystick.2.empty=true input.1.joystick.3.empty=true input.1.joystick.4.empty=true input.1.joystick.5.empty=true input.1.joystick.6.empty=true input.1.joystick.7.empty=true input.1.mouse.0.friendlyname=Nubs as mouse input.1.mouse.0.name=MOUSE0 input.1.mouse.0.empty=true input.1.mouse.1.friendlyname=dPad as mouse input.1.mouse.1.name=MOUSE1 input.1.mouse.1.empty=true input.1.mouse.2.empty=true input.1.mouse.3.empty=true input.1.mouse.4.empty=true input.1.mouse.5.empty=true input.1.mouse.6.empty=true input.1.mouse.7.empty=true input.1.keyboard.0.friendlyname=Keyboard input.1.keyboard.0.name=KBD0 input.1.keyboard.0.empty=false input.1.keyboard.0.disabled=false input.1.keyboard.1.empty=true input.1.keyboard.2.empty=true input.1.keyboard.3.empty=true input.1.keyboard.4.empty=true input.1.keyboard.5.empty=true input.1.keyboard.6.empty=true input.1.keyboard.7.empty=true input.1.internal.0.friendlyname=Internal events input.1.internal.0.name=INTERNALEVENTS1 input.1.internal.0.empty=true input.2.joystick.0.friendlyname=dPad as joystick input.2.joystick.0.name=JOY0 input.2.joystick.0.empty=true input.2.joystick.1.empty=true input.2.joystick.2.empty=true input.2.joystick.3.empty=true input.2.joystick.4.empty=true input.2.joystick.5.empty=true input.2.joystick.6.empty=true input.2.joystick.7.empty=true input.2.mouse.0.friendlyname=Nubs as mouse input.2.mouse.0.name=MOUSE0 input.2.mouse.0.empty=true input.2.mouse.1.friendlyname=dPad as mouse input.2.mouse.1.name=MOUSE1 input.2.mouse.1.empty=true input.2.mouse.2.empty=true input.2.mouse.3.empty=true input.2.mouse.4.empty=true input.2.mouse.5.empty=true input.2.mouse.6.empty=true input.2.mouse.7.empty=true input.2.keyboard.0.friendlyname=Keyboard input.2.keyboard.0.name=KBD0 input.2.keyboard.0.empty=false input.2.keyboard.0.disabled=false input.2.keyboard.1.empty=true input.2.keyboard.2.empty=true input.2.keyboard.3.empty=true input.2.keyboard.4.empty=true input.2.keyboard.5.empty=true input.2.keyboard.6.empty=true input.2.keyboard.7.empty=true input.2.internal.0.friendlyname=Internal events input.2.internal.0.name=INTERNALEVENTS1 input.2.internal.0.empty=true input.3.joystick.0.friendlyname=dPad as joystick input.3.joystick.0.name=JOY0 input.3.joystick.0.empty=true input.3.joystick.1.empty=true input.3.joystick.2.empty=true input.3.joystick.3.empty=true input.3.joystick.4.empty=true input.3.joystick.5.empty=true input.3.joystick.6.empty=true input.3.joystick.7.empty=true input.3.mouse.0.friendlyname=Nubs as mouse input.3.mouse.0.name=MOUSE0 input.3.mouse.0.empty=true input.3.mouse.1.friendlyname=dPad as mouse input.3.mouse.1.name=MOUSE1 input.3.mouse.1.empty=true input.3.mouse.2.empty=true input.3.mouse.3.empty=true input.3.mouse.4.empty=true input.3.mouse.5.empty=true input.3.mouse.6.empty=true input.3.mouse.7.empty=true input.3.keyboard.0.friendlyname=Keyboard input.3.keyboard.0.name=KBD0 input.3.keyboard.0.empty=false input.3.keyboard.0.disabled=false input.3.keyboard.1.empty=true input.3.keyboard.2.empty=true input.3.keyboard.3.empty=true input.3.keyboard.4.empty=true input.3.keyboard.5.empty=true input.3.keyboard.6.empty=true input.3.keyboard.7.empty=true input.3.internal.0.friendlyname=Internal events input.3.internal.0.name=INTERNALEVENTS1 input.3.internal.0.empty=true input.4.keyboard.0.friendlyname=Keyboard input.4.keyboard.0.name=KBD0 input.4.keyboard.0.custom=true

mike111769 commented 1 year ago

as an example get elite and set it for mouse hack, although it's fully not Playable it works perfectly.....

dunno why other games don't...

you have to work within the emulater itself, and yes it's a PITA.

arithesage commented 1 year ago

For curiosity sake, i decided to try running the ancient Fellow DOS Amiga emulator with Magic DOSBox.

I have to say that the performance is a lot better than expected having in mind that i was emulating Damocles and the tablet isn't a high end device at all. I have to test point-and-click games with MDB's absolute mouse config yet.

And i think yes, uae4arm, besides being a great emulator, would surely need a lot of work to put it at MDB level in order to achieve same features with touch controls and absolute mouse coordinates.

I would like to do some tests tweaking things in code, but first i have to properly setup a debug environment...

mike111769 commented 1 year ago

oh wow the MDB especially the new one allows Java code to the deadly strike settings, I have it you click left side of camp icon and it'll ask for how long right side is till your healthy....

left mouse down LOCK to attack touchscreen for the settings....

I'll check with the MDB DEV and see if it's OK to send you the .85 version.... and I'll give you the touch setup, I love it!

Googles new rules with access to storage screwed the app speed made it worthless, why it's not out.

but I'll ask. you can see what a truly touch is!

it even has a pixel trap, where yo uan change the Java code by what's on the screen... brilliant!

altharic commented 4 months ago

Whilst I understand Googles rules on storage make it hard to release on the play store is there any way an apk can be compiled for the changes to date?

I use a handheld running 8.1 and it runs very well

lubomyr commented 4 months ago

message from google: Issue found: Missing Data safety form

Your app is missing a Data safety form in the Play Console. All apps are required to complete an accurate Data safety form in Play Console that discloses their data collection and sharing practices - this is required even if your app does not collect any user data.

It can be related with new storage access, but also can be related with changed assets extract rules, or with very old android api used to build app, or something new rule not approved in gooogle play app console.

if this related with assets extraction, then sdl long time already supported this changes, but uae4arm was builded before this changes was added in sdl tree. New storage access not suppported by libSdl, but probably it's not hard to implement.

The difficulty of it, if it try to re-build, it will need to fix a lot of another problems:

The problem that I last 5 or more years working only with web-development (in my official work), and didn't follow to changes in native android development. Also partially lost interest to porting of apps, and when have some free time want to spend time to other things.

altharic commented 4 months ago

No problem I thought it was just a case of needing a compile with the latest code I had no idea of the extra work involved thanks for an excellent emulator none the less :)