# DCSE:BasicLibs:GetKey

This routine is only available on Doors CSE 8.0 and later for the color-screen TI-84 Plus C Silver Edition.

## Contents

## Description

These routines have been significantly overhauled from the monochrome xLIB getKey function.

## Technical Details

### GetKey

**real(2,0,0)**: Key code stored to Ans (as per _getCSC codes)

### GetKeyCheckList

**real(2,0,GETKEY_CHECKNUM,GETKEY_KEYVAL,GETKEY_USERVAR,GETKEY_VALUE...etc)**:

GETKEY_CHECKNUM = number of checks to perform (length of list to check against)

GETKEY_KEYVAL = key value to check for

GETKEY_USERVAR = Uservar to update if key value is pressed

GETKEY_VALUE = value to update Uservar by if key is pressed

Checks for a list of keypresses and updates the appropriate user variables

### GetKeyArrows

**real(2,1,USERVAR_X,USERVAR_Y,VALUE_X,VALUE_Y)**:

USERVAR_X = user variable index holding x coordinate to update (0-255)

USERVAR_Y = user variable index holding y coordinate to update (0-255)

VALUE_X = amount to update uservar by if left/right is pressed

VALUE_Y = amount to update uservar by if up/down is pressed

Checks for up,down,left,right arrows and updates the specified user variables:

- If up is pressed then USERVAR_Y = USERVAR_Y - VALUE_Y
- If down is pressed then USERVAR_Y = USERVAR_Y + VALUE_Y
- If left is pressed then USERVAR_X = USERVAR_X - VALUE_X
- If right is pressed then USERVAR_X = USERVAR_X + VALUE_X

### GetKeyArrowsDiagonals

**real(2,2,USERVAR_X,USERVAR_Y,VALUE_X,VALUE_Y)**:

Checks for up,down,left,right and diagonal arrows and updates the specified user variables:

- If up is pressed then USERVAR_Y = USERVAR_Y - VALUE_Y
- If down is pressed then USERVAR_Y = USERVAR_Y + VALUE_Y
- If left is pressed then USERVAR_X = USERVAR_X - VALUE_X
- If right is pressed then USERVAR_X = USERVAR_X + VALUE_X
- If up+left is pressed then USERVAR_Y = USERVAR_Y - VALUE_Y, USERVAR_X = USERVAR_X - VALUE_X
- If up+right is pressed then USERVAR_Y = USERVAR_Y - VALUE_Y, USERVAR_X = USERVAR_X + VALUE_X
- If down+left is pressed then USERVAR_Y = USERVAR_Y + VALUE_Y, USERVAR_X = USERVAR_X - VALUE_X
- If down+right is pressed then USERVAR_Y = USERVAR_Y + VALUE_Y, USERVAR_X = USERVAR_X + VALUE_X

### GetKeyArrowsCheckTile

**real(2,3,USERVAR_X,USERVAR_Y,VALUE_X,VALUE_Y,USERVAR_MAPWIDTH,COLLISIONTILE,MAPSTRING,X0,Y0,X1,Y1)**:

USERVAR_MAPWIDTH = width of tilemap in tiles (uservar 0-255)

COLLISIONTILE = upper limit of walkable tiles (any tile less than this will be walkable)

MAPSTRING = string variable holding tilemap data (0-10)

X0 = left x coordinate of collision box

Y0 = top y coordinate of collision box

X1 = right x coordinate of collision box

Y1 = bottom y coordinate of collision box

This performs the same as the above GetKeyArrows function but will only update the user variables if the move is to a walkable tile in the supplied tilemap. The X0,Y0,X1,Y1 is used to specify a 'collision box' around the x/y coordinate. Anything inside this coordinate must be walkable for the function to update the user variables.

### GetKeyArrowsDiagonalsCheckTile

**real(2,4,USERVAR_X,USERVAR_Y,VALUE_X,VALUE_Y,USERVAR_MAPWIDTH,COLLISIONTILE,MAPSTRING)**:

Refer to the GetKeyArrowsCheckTile function; this adds diagonal keypresses as well.

### GetKeyArrowsCheckTileList *(DCSE8.1)*

**real(2,5,USERVAR_X,USERVAR_Y,VALUE_X,VALUE_Y,USERVAR_MAPWIDTH,COLLISIONTILE,MAPSTRING,X0,Y0,X1,Y1**

USERVAR_MAPWIDTH = width of tilemap in tiles (uservar 0-255)

COLLISIONTILE = upper limit of walkable tiles (any tile less than this will be walkable)

MAPSTRING = string variable holding tilemap data (0-10)

X0 = left x coordinate of collision box

Y0 = top y coordinate of collision box

X1 = right x coordinate of collision box

Y1 = bottom y coordinate of collision box

This function is the same as the above however it will return information regarding any keypresses and any collided tiles in a 'real list' contained in a user-defined list named "XL" with the format:

{KEY_PRESS, NUM_COLLIDED_TILES, COLLIDED_TILES_LIST} where:

KEY_PRESS = -1,0,1,2,3 = NOARROW,UP,DOWN,LEFT,RIGHT

NUM_COLLIDED_TILES = number of tiles collided against given the arguments in the call

COLLIDED_TILES_LIST = list of tiles collided against given the arguments in the call

The KEY_PRESS value is also stored to Ans for easy reference

### GetKeyArrowsDiagonalsCheckTileList *(DCSE8.1)*

**real(2,6,USERVAR_X,USERVAR_Y,VALUE_X,VALUE_Y,USERVAR_MAPWIDTH,COLLISIONTILE,MAPSTRING,X0,Y0,X1,Y1**

refer to the above function, adds diagonal keypresses as well