Implement script-configured input bindings
This commit is contained in:
@@ -2273,7 +2273,8 @@ poll/dispatch ops `0xff` and `0x100`. These calls are effectful engine configura
|
||||
|
||||
- `op_0xfe_set_input_action_count@0x421390` stores an unsigned count below 32 at EngineCtx `+0x814` and
|
||||
throws script error `0x10005` for an invalid count. SYSTEM4 sets 10, so callback dispatch scans actions
|
||||
0 through 9.
|
||||
0 through 9. If the polled mask is empty, `op_0x100_dispatch_joy_callbacks@0x416f00` instead invokes
|
||||
callback slot 10 and resumes after itself; that slot is the native no-input/release path, not action 10.
|
||||
- `op_0x107_map_joystick_button@0x421550` writes physical joystick button numbers into the 32-entry
|
||||
EngineCtx `+0x89c` table. Joystick axes directly emit actions 0=up, 1=right, 2=down, 3=left; table slot
|
||||
N emits action N+4. SYSTEM4 maps physical buttons 0,3,2,1,6,7 to actions 4 through 9.
|
||||
@@ -2282,22 +2283,25 @@ poll/dispatch ops `0xff` and `0x100`. These calls are effectful engine configura
|
||||
making left mouse action 4 by default; SYSTEM4 `(3,1)` maps right mouse to action 7.
|
||||
- `op_0x10c_map_keyboard_scancode@0x421730` translates a DirectInput DIK scan code through EngineCtx
|
||||
`+0x1828` to a Win32 virtual key, then writes the action into the 256-entry table at `+0x1428`.
|
||||
Initialization prebinds the arrow keys to actions 0=up, 1=right, 2=down, 3=left. SYSTEM4 adds action 4
|
||||
= Z/Enter, 5 = Space, 6 = C/LeftCtrl, 7 = X, 8 = PageUp, and 9 = PageDown.
|
||||
Initialization sets count 7 and prebinds 0=up, 1=right, 2=down, 3=left, 4=Enter, 5=Space, and
|
||||
6=Backspace. SYSTEM4 raises the count to 10 and adds Z to action 4, C/LeftCtrl to action 6, X to action
|
||||
7, PageUp to action 8, and PageDown to action 9; the earlier Enter/Space/Backspace mappings remain.
|
||||
|
||||
`input_poll_action_mask@0x4608b0` combines
|
||||
`input_poll_keyboard_action_bits@0x4601a0`, `input_poll_mouse_action_bits@0x460240`, and
|
||||
`input_poll_joystick_action_bits@0x460380`. The first three logical actions are therefore not a generic
|
||||
Godot UI ordering; they are the native engine ABI established by the input manager and refined by scripts.
|
||||
|
||||
The current port bypasses this configuration. `godot/Main.cs` feeds `ui_down`, `ui_left`, `ui_up`, and
|
||||
`ui_right` directly into indices 0,1,2,3, then maps `ui_accept`/`ui_cancel` to 4/5. The VM also scans all
|
||||
32 callback indices instead of the configured count. As a result the directional ordering differs from
|
||||
native, auxiliary actions 6 through 9 and native right-mouse action 7 are not physically reachable through
|
||||
the SYSTEM4 bindings, and the four configuration opcodes still fall back. A faithful implementation should
|
||||
add one engine-owned input-binding model shared by these four handlers and `0xff`/`0x100`, then translate
|
||||
Godot key, mouse, and joy events through it. This is frontend input configuration only: it needs no profile
|
||||
storage, boot seed, or game-specific conditional.
|
||||
The port now models this as one process-owned `InputBindings` service. It starts with the native seven
|
||||
keyboard defaults, the four configuration handlers mutate it, and `0xff` combines live keyboard-VK,
|
||||
left/right mouse, joystick-axis, and joystick-button state with the narrow logical injection used by tests.
|
||||
`0x100` scans only actions below the configured count, resumes on itself for simultaneous held actions, and
|
||||
uses callback slot `count` only for an empty mask. Godot translates layout-independent physical keys to the
|
||||
native Win32 VK namespace and sends physical mouse/standard joy events through the service; it no longer
|
||||
assigns Godot's `ui_*` actions directly to AGE indices. Direct-scene diagnostics replay the same 16 immediate
|
||||
SYSTEM4 configuration calls through `InputBindingBootstrap`, while natural boot executes the real opcodes.
|
||||
This remains frontend input configuration only: it needs no profile storage, boot seed, or game-specific
|
||||
conditional.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user