Wiki

Clone wiki

NuclearThroneTogether / Scripting / API / Input

Button inputs

Due to implementation details (both need for gamepad support and networking functions), mods do not have direct access to keyboard-polling functions. They do, however, have access to a set of wrapper functions that the game itself uses:

button_check(player, button)
button_pressed(player, button)
button_released(player, button)
In these, player is a 0-based player index (0 for P1, 1 for P2), while button is to be one of the following string constants:

  • nort: North/Up
  • sout: South/Down
  • west: West/Left
  • east: East/Right
  • fire: Button used for shooting (default: left mouse button)
  • spec: Button used for active ability (default: right mouse button)
  • swap: Button used to swap weapons (default: space; mouse wheel)
  • pick: Button used to pick up weapons (default: E)
  • paus: Button used to pause the game (default: P; Esc)
  • okay: Button used to confirm actions in menu (default: Enter)
  • exit: Button used to close menus (default: Esc)
  • horn: Button used for airhorn[.wav] (default: B)
  • talk: Not an actual button - returns whether the player has chat open.
  • key1: Button for picking mutation/emoticon 1 (default: 1)
  • key2: Button for picking mutation/emoticon 2 (default: 2)
  • key3: Button for picking mutation/emoticon 3 (default: 3)
  • key4: Button for picking mutation/emoticon 4 (default: 4)
  • key5: Button for picking mutation/emoticon 5 (default: 5)
  • key6: Button for picking mutation/emoticon 6 (default: 6)
  • key7: Button for picking mutation 7 (default: 7)
  • key8: Button for picking mutation 8 (default: 8)
  • key9: Button for picking mutation 9 (default: 9)

So, if you were to display a chat message whenever any player presses the airhorn button, you would do

#!js
with (Player) if (button_pressed(index, "horn")) {
    trace("P" + string(index + 1) + " pressed airhorn!");
}

Aiming

Aiming is a little more familiar - you still have access to mouse_x and mouse_y variables, but there's a catch - these now accept a player index exactly like view_ variables do.

Therefore, mouse_x[1] will return in-room mouse coordinate for second player.

If you need to find coordinates relative to view, view_xview and view_yview are also exposed, and accept player indexes as well.

As an example, the following code will create an explosion wherever players place emoticon #1 (digit key 1):

#!js
with (Player) if (button_pressed(index, "key1")) {
    instance_create(mouse_x[index], mouse_y[index], Explosion);
}

Updated