-
Notifications
You must be signed in to change notification settings - Fork 0
/
controls.c
75 lines (62 loc) · 1.4 KB
/
controls.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/* $Id: controls.c,v 1.7 2003/02/14 17:52:28 eric Exp $
*
* AUTHOR : M. Bilderbeek & E. Boon
*
* DESCRIPTION :
* contains functions to control controls. Yup. That's it.
*/
/*
* INCLUDES
*/
#include "types.h"
#include "msxbios.h"
#include "ship.h" // for the shield_energy variable in the_ship
#include "controls.h"
/*
* DEFINES
*/
#define NEWKEY 0xFBE5
#define CHECK_KEYBMX(row, col) !(*((char *)(NEWKEY + row)) & (1<<col))
#define CHECK_KEYROW(row) ~(*((char *)(NEWKEY + row)))
#define ESC_PRESSED CHECK_KEYBMX(7,2)
#define SHIFT_PRESSED CHECK_KEYBMX(6,0)
char check_quit()
{
return(ESC_PRESSED);
}
void check_controls(rotdir_t *rotdir, onoff_t *boost, onoff_t *shield, onoff_t *fire)
{
static int old_strig;
int new_strig;
*boost=OFF;
*shield=OFF;
*rotdir=ROT_NONE;
switch (gtstck(0))
{
case 1: *boost=ON; break;
case 2: *boost=ON; *rotdir=CLOCKWISE; break;
case 3: *rotdir=CLOCKWISE; break;
case 7: *rotdir=COUNTERCLOCKWISE; break;
case 8: *boost=ON; *rotdir=COUNTERCLOCKWISE; break;
default: break;
}
new_strig = gttrig(0);
if (new_strig != old_strig)
{
old_strig = new_strig;
if(new_strig)
*fire = ON;
}
else
*fire = OFF;
*shield=(SHIFT_PRESSED || the_ship.shield_energy > AUTOSHIELD_THRESHOLD)
&& the_ship.shield_energy > 0;
}
char keypressed()
{
char pressed=0;
char row;
for (row=0; row<11; row++)
pressed |= CHECK_KEYROW(row);
return(pressed);
}