; ============================================================================== ; EBLAN ENGINE - Input System (Keyboard via GetAsyncKeyState) ; ============================================================================== .code ; ------------------------------------------------------------------------------ ; PollInput: Reads keyboard state and updates movement & action flags ; ------------------------------------------------------------------------------ PollInput PROC uses eax ebx ; 1. Forward (W / Up Arrow) invoke GetAsyncKeyState, VK_KEY_W mov bx, ax invoke GetAsyncKeyState, VK_KEY_UP or bx, ax test bx, 8000h setnz keyForward ; 2. Backward (S / Down Arrow) invoke GetAsyncKeyState, VK_KEY_S mov bx, ax invoke GetAsyncKeyState, VK_KEY_DOWN or bx, ax test bx, 8000h setnz keyBackward ; 3. Strafe Left (A) invoke GetAsyncKeyState, VK_KEY_A test ax, 8000h setnz keyStrafeLeft ; 4. Strafe Right (D) invoke GetAsyncKeyState, VK_KEY_D test ax, 8000h setnz keyStrafeRight ; 5. Turn Left (Left Arrow) invoke GetAsyncKeyState, VK_KEY_LEFT test ax, 8000h setnz keyTurnLeft ; 6. Turn Right (Right Arrow) invoke GetAsyncKeyState, VK_KEY_RIGHT test ax, 8000h setnz keyTurnRight ; 7. Action / Open Door (E / Space) invoke GetAsyncKeyState, VK_KEY_E mov bx, ax invoke GetAsyncKeyState, VK_KEY_SPACE or bx, ax test bx, 8000h setnz keyAction ; 8. Run / Sprint (Shift) invoke GetAsyncKeyState, VK_KEY_SHIFT test ax, 8000h setnz keyRun ; 9. Toggle Minimap (M - single press trigger) invoke GetAsyncKeyState, VK_KEY_M test ax, 0001h ; Check if key was pressed since last call jz @F xor keyShowMap, 1 @@: ; 10. Screenshot (F12 - single press trigger) invoke GetAsyncKeyState, VK_KEY_F12 test ax, 0001h jz @F mov keyScreenshot, 1 @@: ; 11. Escape - Exit application invoke GetAsyncKeyState, VK_KEY_ESCAPE test ax, 8000h jz @F mov isRunning, 0 @@: ret PollInput ENDP