It sounds like you are trying to use natural time to pace game logic, at basically infinite resolution. What's usually done in games is you have a logical tick rate -- this can be quite low, for example 30 per second, or one logical tick every 40 ms, something in that ballpark. All your real game logic is doing updates discretely, per tick. E.g. if you have "upwards velocity 50," you move the character up by 50 units whenever a logical tick passes, and at no other time. Your game state is only touched by the regular logical updates.
You tie this in with monitor refresh rate by interpolating the logical state based on how far along is the next tick. So if you are at a point where 60% of the time until next tick has passed (e.g. 24ms have passed and your tickrate is 40ms), and your character has upwards velocity 50, you apply 60% of 50 = 30 units upward change of position for drawing the character. But only for drawing the character!! You do not change the logic state at all here. You calculate an ephemeral state, for means of drawing to the screen, that is an interpolation between two logical states.
This approach is kind of overkill for a point and click adventure, but it's needed as soon as you have any sort of action gameplay going on.
Here is another short post of mine where I describe one way to weave logical ticks and drawing frames: https://itch.io/post/9490552
But there's gotta be plenty tutorials on the internet, too.
ps. As for user inputs, it's cleanest and easiest to apply them only at logical ticks. If this is too laggy for you, you can just work with a higher tickrate (no issue in a simple game like yours).
pps. You can test any FPS on a 60 Hz screen, you just have to turn VSync off.