Key code table

In AGS script you have a eKeyCode enumeration that defines key codes. These key codes can be passed to on_key_press, as well as used in calls to IsKeyPressed.

Historically AGS has Ctrl+X key combinations have their own distinct keycodes. At the same time, keycodes corresponding to the modifier keys (Shift, Ctrl and Alt) were never passed to the on_key_press alone and were only allowed with IsKeyPressed.

Starting from version 3.6.0 AGS supports two "key handling modes". The old mode works as described above, according to the historical behavior. The new mode actually allows modifier keycodes in on_key_press, and disables combined keycodes like Ctrl+X: instead these are passed as two separate keycodes.

Following section lists the members of this enum, and which keys they represent.

AGS keycode Key Numeric value
eKeyNone none 0
eKeyCtrlA Ctrl+A 1
eKeyCtrlB Ctrl+B 2
eKeyCtrlC Ctrl+C 3
eKeyCtrlD Ctrl+D 4
eKeyCtrlE Ctrl+E 5
eKeyCtrlF Ctrl+F 6
eKeyCtrlG Ctrl+G 7
eKeyCtrlH Ctrl+H 8
eKeyCtrlI Ctrl+I 9
eKeyCtrlJ Ctrl+J 10
eKeyCtrlK Ctrl+K 11
eKeyCtrlL Ctrl+L 12
eKeyCtrlM Ctrl+M 13
eKeyCtrlN Ctrl+N 14
eKeyCtrlO Ctrl+O 15
eKeyCtrlP Ctrl+P 16
eKeyCtrlQ Ctrl+Q 17
eKeyCtrlR Ctrl+R 18
eKeyCtrlS Ctrl+S 19
eKeyCtrlT Ctrl+T 20
eKeyCtrlU Ctrl+U 21
eKeyCtrlV Ctrl+V 22
eKeyCtrlW Ctrl+W 23
eKeyCtrlX Ctrl+X 24
eKeyCtrlY Ctrl+Y 25
eKeyCtrlZ Ctrl+Z 26
eKey0 0 48
eKey1 1 49
eKey2 2 50
eKey3 3 51
eKey4 4 52
eKey5 5 53
eKey6 6 54
eKey7 7 55
eKey8 8 56
eKey9 9 57
eKeyA A 65
eKeyB B 66
eKeyC C 67
eKeyD D 68
eKeyE E 69
eKeyF F 70
eKeyG G 71
eKeyH H 72
eKeyI I 73
eKeyJ J 74
eKeyK K 75
eKeyL L 76
eKeyM M 77
eKeyN N 78
eKeyO O 79
eKeyP P 80
eKeyQ Q 81
eKeyR R 82
eKeyS S 83
eKeyT T 84
eKeyU U 85
eKeyV V 86
eKeyW W 87
eKeyX X 88
eKeyY Y 89
eKeyZ Z 90
eKeyAmpersand & 38
eKeyAsterisk * 42
eKeyAt @ 64
eKeyBackSlash \ 92
eKeyBackspace Backspace 8
eKeyCloseBracket ] 93
eKeyCloseParenthesis ) 41
eKeyColon : 58
eKeyComma , 44
eKeyDelete Delete 383
eKeyDollar $ 36
eKeyDoubleQuote " 34
eKeyEquals = 61
eKeyEscape Escape 27
eKeyExclamationMark ! 33
eKeyForwardSlash / 47
eKeyGreaterThan > 62
eKeyHash # 35
eKeyHyphen - 45
eKeyInsert Insert 382
eKeyLessThan < 60
eKeyOpenBracket [ 91
eKeyOpenParenthesis ( 40
eKeyPercent % 37
eKeyPeriod . 46
eKeyPlus + 43
eKeyQuestionMark ? 63
eKeyReturn Return 13
eKeySemiColon ; 59
eKeySingleQuote ' 39
eKeySpace Space 32
eKeyTab Tab 9
eKeyUnderscore _ 95
eKeyF1 F1 359
eKeyF2 F2 360
eKeyF3 F3 361
eKeyF4 F4 362
eKeyF5 F5 363
eKeyF6 F6 364
eKeyF7 F7 365
eKeyF8 F8 366
eKeyF9 F9 367
eKeyF10 F10 368
eKeyF11 F11 433
eKeyF12 F12 434
eKeyHome Home 371
eKeyUpArrow Up arrow 372
eKeyPageUp Page up 373
eKeyLeftArrow Left arrow 375
eKeyNumPad5 Numeric keypad 5 376
eKeyRightArrow Right arrow 377
eKeyEnd End 379
eKeyDownArrow Down arrow 380
eKeyPageDown Page down 381
eKeyShiftLeft Left Shift 403
eKeyShiftRight Right Shift 404
eKeyCtrlLeft Left Ctrl 405
eKeyCtrlRight Right Ctrl 406
eKeyAltLeft Left Alt 407
eKeyAltRight Right Alt 420

Use these keycodes in your on_key_press function to process player input. For example:

if (keycode == eKeyA) Display("You pressed A");
if (keycode == eKeyPlus) Display("You pressed the Plus key");

Compatibility: the mod key constants (eKeyShiftLeft to eKeyAltRight) are only supported since AGS 3.6.0. In previous versions you'd have to use corresponding numeric values.

Key modifiers

In addition, there's separate eKeyMod enumeration with modifier "flags". These values are special so that they may be combined in one variable to make a list of modifiers (like, Shift + Ctrl). This enumeration is supported since AGS 3.6.0. Following is the list of possible values:

AGS modifier Mod
eKeyModShiftLeft Left Shift
eKeyModShiftRight Right Shift
eKeyModShift any Shift
eKeyModCtrlLeft Left Ctrl
eKeyModCtrlRight Right Ctrl
eKeyModCtrl any Ctrl
eKeyModAltLeft Left Alt
eKeyModAltRight Right Alt
eKeyModAlt any Alt
eKeyModNum Num Lock
eKeyModCaps Caps Lock

You may use these mod codes in the extended variant of on_key_press function to check which mod keys were pressed along with the primary key. Remember that since these mods are "flags", they should be tested using not the regular "comparison" operator ==, but bitwise operators. For example:

if (keycode == eKeyA) {
    if (mod & eKeyModCtrl) {
        Display("Pressed Ctrl+A");
    }
}

if (mod & eKeyModAlt == 0) {
    Display("NO Alt was pressed this time");
}

In addition, there are two constants defining bitwise masks, one for key codes, and another for key modifiers:

Constant Meaning
eKeyCodeMask all key codes
eKeyModMask all key mods

If both key code and mods are combined in one integer variable, using bitwise operations, these masks may then be used to extract code and mods:

int combokey = eKeyA | eKeyModCtrlLeft;

int keycode = combokey & eKeyCodeMask; // keycode now contains only eKeyA
int keymod = combokey & eKeyModMask; // keymod now contains only eKeyModCtrlLeft

Compatibility: eKeyMod enumeration is only supported since AGS 3.6.0.