// The Universal FPS script // ------------------------------ // This script can be used in FPS games where the main character can be in one of the following // states: standing, jumping, crouching or being prone. Many games define a separate key for // each of these actions, which makes it less intuitive than using only an up and a down key. // // This script makes it possible to use only two keys for cycling from one state to another, // namely the up key (space) and the down key (left ctrl), in a logical order. For instance, // when standing, the main character can either jump (the up key) or crouch (the down key), when // crouching, the character can either go prone (the down key) or stand up (the up key). When // lying prone, the down key does nothing, so the character can only crouch (the up key), while // after having jumped, the main character automatically returns to the standing state. // // It is assumed that the game allows assigning a key to the following actions: jump, crouch and // prone. We will use the following (usually unused) keys for these actions: kp_up for jump, // kp_center (also called kp_5) for crouch and kp_down for prone. Note that the actual keys you // will press are space for the up key and left ctrl for the down key, so you need to make sure // that they are not assigned to anything in the game settings. // // This script also provides support for a sprint key and toggling the lean left and lean right // actions. Using these is optional. It is assumed that the game allows assigning a key to the // following actions: sprint, lean right, lean left. It is also assumed that the leaning keys // are not toggles in the game. The leaning toggles work as follows: to start leaning right, // press the lean right key (c), to stop leaning right, press the lean left key (z) or the // sprint key (left shift). Similarly, to start leaning left, press the lean left key (z), // to stop leaning left, press the lean right key (c) or the sprint key (left shift). The // leaning also stops when the character goes prone. Make sure that in the game settings // the shift, z and c keys are not assigned to anything, while kp_ins is assigned to the sprint // action, kp_end to the lean left action and kp_pgDn to the lean right action. // // Note: if the main character dies while being prone, the character is usually respawned in // the standing state. This can lead to the character crouching instead of jumping the first // time the up key is pressed. When that happens however, one more key press of the up key or // the sprint key will automatically return the key bindings to the correct state. Furthermore, // a single key press of the sprint key any time during the game will make sure all the key // bindings are reset to the correct state. // // Tip: to test this script without generating any actual key strokes, try the following: // // On Linux: key-scripter -i=/dev/input/event2 -c=universal-fps-script -d // On Windows: key-scripter -i -c=universal-fps-script -d // // Feel free to adapt this script to your needs. /////// Binds /////// // The scroll_lock key will act as a toggle to disable or enable Key Scripter // (useful when typing a message for example) bind p78 { if disabled enable else disable; toggle disabled } // scroll_lock pressed // The actual keys for you to use are space and left ctrl // Note: make sure that space and ctrl are not assigned to anything in the game settings bind p65 $press_up // space pressed bind r65 $release_up // space released bind p37 $press_down // left ctrl pressed bind r37 $release_down // left ctrl released // The keys to use for sprinting and leaning (optional) // Note: if you use these, make sure that shift, z and c are not assigned in the game bind p50 $press_sprint // left shift pressed bind r50 $release_sprint // left shift released bind p52 $press_lean_left // z pressed bind r52 $release_lean_left // z released bind p54 $press_lean_right // c pressed bind r54 $release_lean_right // c released /////// Game keys /////// // In the game settings, assign kp_up, kp_center (also called kp_5) and kp_down to the // up, crouch and prone actions respectively set press_jump_key p80 // press kp_up set release_jump_key r80 // release kp_up set press_crouch_key p84 // press kp_center set release_crouch_key r84 // release kp_center set press_prone_key p88 // press kp_down set release_prone_key r88 // release kp_down // When using the sprint key and the leaning toggles, in the game settings assign kp_ins, // kp_end and kp_pgDn to the sprint, lean left and lean right actions respectively. Also // make sure that shift, z and c are not assigned to anything in the game settings set press_sprint_key p90 // press kp_ins set release_sprint_key r90 // release kp_ins set press_lean_left_key p87 // press kp_end set release_lean_left_key r87 // release kp_end set press_lean_right_key p89 // press kp_pgDn set release_lean_right_key r89 // release kp_pgDn /////// Scripts /////// // settings reset set press_reset_scripts { $press_reset_up_down; $stop_leaning } set release_reset_scripts { $release_reset_up_down } // sprinting with settings reset set press_sprint { $press_sprint_key; $press_reset_scripts } set release_sprint { $release_sprint_key; $release_reset_scripts } // lean left & lean right toggles set press_lean_left $lean_left set release_lean_left { /* not releasing */ } set press_lean_right $lean_right set release_lean_right { /* not releasing */ } set stop_leaning { /* initially nothing */ } set lean_left { $press_lean_left_key; set stop_leaning $stop_leaning_left; set press_lean_right $stop_leaning } set stop_leaning_left { $release_lean_left_key; set press_lean_right $lean_right; clear stop_leaning } set lean_right { $press_lean_right_key; set stop_leaning $stop_leaning_right; set press_lean_left $stop_leaning } set stop_leaning_right { $release_lean_right_key; set press_lean_left $lean_left; clear stop_leaning } // up/down cycling set press_up $up_from_stand set release_up { /* set by press_up */ } set press_down $crouch_from_stand set release_down { /* set by press_down */ } set press_reset_up_down { /* initially nothing */ } set release_reset_up_down { /* set by press_reset_up_down */ } set up_from_stand { $release_reset_up_down; $press_jump_key; $stop_leaning; set release_up { $release_jump_key; clear release_up } } set crouch_from_stand { $release_up; $release_reset_up_down; $press_crouch_key; set press_up $stand_from_crouch; clear release_up; clear press_down; set release_down set press_down $prone_from_crouch; set press_reset_up_down $reset_up_down_from_crouch; clear release_reset_up_down } set prone_from_crouch { $release_up; $release_crouch_key; $press_prone_key; $stop_leaning; set press_up $crouch_from_prone; clear press_down; set release_down { $release_prone_key; clear release_down }; set press_reset_up_down $reset_up_down_from_prone } set crouch_from_prone { $release_down; $press_prone_key; $press_crouch_key; clear press_up; set release_up { $release_prone_key; set press_up $stand_from_crouch; clear release_up }; set press_down $prone_from_crouch; set press_reset_up_down $reset_up_down_from_crouch } set stand_from_crouch { $release_up; $release_crouch_key; clear press_up; set release_up set press_up $up_from_stand; set press_down $crouch_from_stand; clear release_down; clear press_reset_up_down } set reset_up_down_from_crouch { $release_up; $release_crouch_key; set press_up $up_from_stand; set press_down $crouch_from_stand; clear release_down; clear press_reset_up_down; clear release_reset_up_down } set reset_up_down_from_prone { $release_down; $press_jump_key; set press_up $up_from_stand; set press_down $crouch_from_stand; clear press_reset_up_down; set release_reset_up_down { $release_jump_key; clear release_reset_up_down } } // Note: uncomment the following section if the crouch key is a toggle in the game /* set up_from_stand { $release_reset_up_down; $press_jump_key; $stop_leaning; set release_up { $release_jump_key; clear release_up } } set crouch_from_stand { $release_up; $release_reset_up_down; $press_crouch_key; set press_up $stand_from_crouch; clear press_down; set release_down { $release_crouch_key; set press_down $prone_from_crouch; clear release_down }; set press_reset_up_down $reset_up_down_from_crouch } set prone_from_crouch { $release_up; $press_prone_key; $stop_leaning; set press_up $crouch_from_prone; clear press_down; set release_down { $release_prone_key; clear release_down }; set press_reset_up_down $reset_up_down_from_prone } set crouch_from_prone { $release_down; $press_crouch_key; clear press_up; set release_up { $release_crouch_key; set press_up $stand_from_crouch; clear release_up }; set press_down $prone_from_crouch; set press_reset_up_down $reset_up_down_from_crouch } set stand_from_crouch { $release_up; $release_down; $press_jump_key; clear press_up; set release_up { $release_jump_key; set press_up $up_from_stand; clear release_up }; set press_down $crouch_from_stand; clear press_reset_up_down } set reset_up_down_from_crouch { $release_up; $release_down; $press_jump_key; clear press_up; set press_down $crouch_from_stand; clear press_reset_up_down; set release_reset_up_down { $release_jump_key; set press_up $up_from_stand; clear release_reset_up_down } } set reset_up_down_from_prone { $release_down; $press_jump_key; set press_up $up_from_stand; set press_down $crouch_from_stand; clear press_reset_up_down; set release_reset_up_down { $release_jump_key; clear release_reset_up_down } } */