Rev 10 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 10 | Rev 11 | ||
---|---|---|---|
Line 9... | Line 9... | ||
9 | * terms of this license. |
9 | * terms of this license. |
10 | * |
10 | * |
11 | * You must not remove this notice, or any other, from this software. |
11 | * You must not remove this notice, or any other, from this software. |
12 | */ |
12 | */ |
13 | 13 | ||
14 | #include <SDL.h> |
14 | #include <SDL2/SDL.h> |
- | 15 | #include <string.h> |
|
- | 16 | #include <ctype.h> |
|
15 | 17 | ||
16 | #include "system.h" |
18 | #include "system.h" |
17 | #include "game.h" |
19 | #include "game.h" |
18 | 20 | ||
19 | #include "control.h" |
21 | #include "control.h" |
20 | #include "draw.h" |
22 | #include "draw.h" |
21 | 23 | ||
22 | #define SYSJOY_RANGE 3280 |
24 | #define SYSJOY_RANGE 3280 |
- | 25 | ||
- | 26 | static char character_ringbuffer[16] = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; |
|
- | 27 | static int character_ringbuffer_index = 0; |
|
- | 28 | extern U8 want_infinitelives; |
|
- | 29 | extern U8 want_infiniteammo; |
|
23 | 30 | ||
24 | static SDL_Event event; |
31 | static SDL_Event event; |
25 | extern U8 want_filter; |
32 | extern U8 want_filter; |
26 | extern U8 want_fullscreen; |
33 | extern U8 want_fullscreen; |
27 | extern U8 enable_endkey; |
34 | extern U8 enable_endkey; |
28 | extern U8 recreate_screen; |
35 | extern U8 recreate_screen; |
- | 36 | ||
- | 37 | ||
- | 38 | static U8 has_accumulated (const char *str) |
|
- | 39 | { |
|
- | 40 | int len = (int) strlen (str); |
|
- | 41 | for (int i = 0; i < len; i++) |
|
- | 42 | if (character_ringbuffer[(sizeof (character_ringbuffer) + character_ringbuffer_index - len + i) % 16] != str[i]) |
|
- | 43 | return 0; |
|
- | 44 | return 1; |
|
- | 45 | } |
|
29 | 46 | ||
30 | 47 | ||
31 | /* |
48 | /* |
32 | * Process an event |
49 | * Process an event |
33 | */ |
50 | */ |
Line 50... | Line 67... | ||
50 | else if (alt_pressed && key == SDL_SCANCODE_F4) |
67 | else if (alt_pressed && key == SDL_SCANCODE_F4) |
51 | { |
68 | { |
52 | control_status |= CONTROL_EXIT; |
69 | control_status |= CONTROL_EXIT; |
53 | control_last = CONTROL_EXIT; |
70 | control_last = CONTROL_EXIT; |
54 | } |
71 | } |
55 | else if (key == SDL_SCANCODE_O || key == SDL_SCANCODE_UP) |
72 | else if ((key == SDL_SCANCODE_O || key == SDL_SCANCODE_UP) && !has_accumulated ("MAT") && !has_accumulated ("MATOSGRAT") && !has_accumulated (";QT") && !has_accumulated (";QTOSGRQT")) |
56 | { |
73 | { |
57 | control_status |= CONTROL_UP; |
74 | control_status |= CONTROL_UP; |
58 | control_last = CONTROL_UP; |
75 | control_last = CONTROL_UP; |
59 | } |
76 | } |
60 | else if (key == SDL_SCANCODE_K || key == SDL_SCANCODE_DOWN) |
77 | else if (key == SDL_SCANCODE_K || key == SDL_SCANCODE_DOWN) |
Line 70... | Line 87... | ||
70 | else if (key == SDL_SCANCODE_X || key == SDL_SCANCODE_RIGHT) |
87 | else if (key == SDL_SCANCODE_X || key == SDL_SCANCODE_RIGHT) |
71 | { |
88 | { |
72 | control_status |= CONTROL_RIGHT; |
89 | control_status |= CONTROL_RIGHT; |
73 | control_last = CONTROL_RIGHT; |
90 | control_last = CONTROL_RIGHT; |
74 | } |
91 | } |
75 | else if ((key == SDL_SCANCODE_PAUSE) || (key == SDL_SCANCODE_P)) |
92 | else if (((key == SDL_SCANCODE_PAUSE) || (key == SDL_SCANCODE_P)) && !has_accumulated ("MEME") && !has_accumulated (";E;E")) |
76 | { |
93 | { |
77 | control_status |= CONTROL_PAUSE; |
94 | control_status |= CONTROL_PAUSE; |
78 | control_last = CONTROL_PAUSE; |
95 | control_last = CONTROL_PAUSE; |
79 | } |
96 | } |
80 | else if ((key == SDL_SCANCODE_END) && enable_endkey) |
97 | else if ((key == SDL_SCANCODE_END) && enable_endkey) |
Line 146... | Line 163... | ||
146 | } |
163 | } |
147 | else if (key == SDL_SCANCODE_SPACE) |
164 | else if (key == SDL_SCANCODE_SPACE) |
148 | { |
165 | { |
149 | control_status &= ~CONTROL_FIRE; |
166 | control_status &= ~CONTROL_FIRE; |
150 | control_last = CONTROL_FIRE; |
167 | control_last = CONTROL_FIRE; |
- | 168 | } |
|
- | 169 | // cheat codes: |
|
- | 170 | // 'MEMEPASMAL' -> infinite lives |
|
- | 171 | // 'MATOSGRATOS' -> infinite ammo |
|
- | 172 | { |
|
- | 173 | const char *keyname = SDL_GetScancodeName (key); |
|
- | 174 | character_ringbuffer[character_ringbuffer_index] = toupper (keyname[0]); |
|
- | 175 | character_ringbuffer_index = (character_ringbuffer_index + 1) % 16; |
|
- | 176 | if (has_accumulated ("MEMEPASMAL") || has_accumulated (";E;EPQS;QL")) |
|
- | 177 | { |
|
- | 178 | want_infinitelives = TRUE; |
|
- | 179 | game_lives = 6; |
|
- | 180 | syssnd_play (WAV_DIE, 1); |
|
- | 181 | } |
|
- | 182 | else if (has_accumulated ("MATOSGRATOS") || has_accumulated (";QTOSGRQTOS")) |
|
- | 183 | { |
|
- | 184 | want_infiniteammo = TRUE; |
|
- | 185 | game_bullets = 6; |
|
- | 186 | game_bombs = 6; |
|
- | 187 | syssnd_play (WAV_DIE, 1); |
|
- | 188 | } |
|
151 | } |
189 | } |
152 | break; |
190 | break; |
153 | case SDL_QUIT: |
191 | case SDL_QUIT: |
154 | /* player tries to close the window -- this is the same as pressing ESC */ |
192 | /* player tries to close the window -- this is the same as pressing ESC */ |
155 | control_status |= CONTROL_EXIT; |
193 | control_status |= CONTROL_EXIT; |