File: declarations.h

package info (click to toggle)
komi 1.04-4
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 1,936 kB
  • ctags: 475
  • sloc: ansic: 4,641; makefile: 75
file content (434 lines) | stat: -rw-r--r-- 14,896 bytes parent folder | download | duplicates (5)
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
/* Komi definitions, structures, and global declarations... */

/* -------------------------------------------------------------------------- */
// Definitions...

#define VERSION "1.04"
#define PREFSVERSION 1    // Increment this if prefs format changes.
#define PREFSNAME ".komirc"

// Window size.
#define WIDTH 640
#define HEIGHT 480

// Number of predefined levels.
#define DEFINEDLEVELS 30

// Delay between frames (default)
#define DEFAULT_DELAY 10

// Different enemy types. Should probably use an enum.
#define SCROLLERLEFT 0
#define SCROLLERRIGHT 1
#define ELECTRA 2
#define ACCELERATOR 3
#define ROAMER 4
#define BROWNIAN 5
#define LASERGUN 6
#define DIVER 7
#define SKULL 8
#define BOUNCER 9
#define GUNNER 10
#define DROPPER 11
#define EYEBALL 12
#define WRAPBALL 13
#define BOMBER 14
#define SNIPERLEFT 15
#define SNIPERRIGHT 16
#define ENEMYTYPES 17

// Starfield constants.
#define MAXSTARS 350
#define MAX_STARSPEED 10
#define YOUNG_STAR 45      // How long after birth do we reduce star brightness?
#define SLOWEST_STAR 0.3
#define DIM_STAR_BOUNDARY 0.5

// Starting stats.
#define START_LIVES 3
#define KOMI_SPEED 4
#define TONGUE_SPEED 6

// Tongue colour.
#define TONGUE_R 79
#define TONGUE_G 106
#define TONGUE_B 226

#define TONGUE_FAST_R 255
#define TONGUE_FAST_G 0
#define TONGUE_FAST_B 0

#define TONGUE_WIDTH 6

#define KOMI_SHOT_SPEED 3

// Size of all sprites. Mostly used for bouncing enemies off the sides.
#define SPRITE_SIZE 32

// How close to the edges Komi can go.
#define WALL 16

// Constants for the lightning.
#define FORKSTODRAW 1
#define LIGHTNINGADJUST 26             // Actual distance of start/finish from the left/right edges.
#define BOLTMAXLENGTH 30
#define LIGHTNINGVARIANCE 8            // Vertical randomness.
#define START_LIGHTNING_Y 240          // What vertical position the lightning starts at.
#define GEN_X 16                       // Location to draw the generator sprite.
#define LIGHTNINGCHECK_DEFAULT 30      // Default for how often the lightning gets moved down a pixel. Once every 30 frames.
#define FASTLIGHTNINGCHECK_DEFAULT 15  // Once it reaches the "fast" level (below) it (by default) goes once every 15 frames.
#define DEFAULT_FASTLIGHTNINGY 320

// How many arrays of structures to make (which hold stuff like location, speed, etc).
#define MAX_ENEMIES 30
#define MAX_COINS 10
#define MAX_DIAMONDS 4
#define MAX_ENEMYSHOTS 10
#define MAX_FRIENDLYSHOTS 10

#define GUNNERRELOADTIME 5           // Minimum time between shots for the Gunner.

#define BASEPOWERUPPROB 0.00005      // Default chance of a powerup appearing per frame.
#define POWERUPCUTOFFTIME 10000      // No powerups after this many ticks.

#define FREEZE_TIME 600              // How many ticks a freeze lasts.
#define FREEZE_WARN_INTERVAL 60      // Intervals between freeze warning sounds.
#define FREEZE_WARNINGS 3            // How many warnings.

// Constants for the Lasergun enemy.
#define LASERDURATION 20        // Frames the laser lasts.
#define LASERWARNTIME 60        // Give warning this many frames before.
#define LASERWIDTH 2
#define LASER_R 255             // Colours for laser.
#define LASER_G 50
#define LASER_B 0
#define WARNLASER_R 120         // Colours for warning pre-laser.
#define WARNLASER_G 50
#define WARNLASER_B 0

#define SKULLY 352              // Vertical position for Skull enemy.

// Enemy default speeds etc (can be over-ruled when levelinfo is made)
#define BROWNIAN_MAX_SPEED_DEFAULT 1.5
#define ROAMER_MIN_SPEED_DEFAULT 0.5
#define ROAMER_MAX_SPEED_DEFAULT 1
#define DROPPER_SPEEDY_DEFAULT 5
#define ELECTRA_OFFSET_DEFAULT -32
#define GUNNER_SHOOT_PROB_DEFAULT 0.01
#define DIVE_SPEEDY_DEFAULT 4
#define DIVE_SPEEDX_DEFAULT 2
#define ENEMY_SHOT_SPEED_DEFAULT 3
#define BOMB_SPEED_DEFAULT 5

#define SNIPERSHOTSPEED 3

// Points...
#define COIN_SCORE 10           // Points for a coin.
#define DIAMOND_SCORE 50        // Points for a diamond.
#define EXTRALIFEPOINTS 1000    // New life every x points.

// Locations of the various images on the title screen.
#define MAINTITLE_X 320
#define MAINTITLE_Y 60
#define GPL_X 320
#define GPL_Y 175
#define BOLTSTITLE_X 370
#define BOLTSTITLE_Y 325
#define DIAMONDTITLE_X 410
#define DIAMONDTITLE_Y 295
#define KOMITITLE_X 340
#define KOMITITLE_Y 370
#define DIVERTITLE_X 320
#define DIVERTITLE_Y 280
#define QUITBUTTON_X 585
#define QUITBUTTON_Y 385
#define STARTBUTTON_X 520
#define STARTBUTTON_Y 445
#define SPEEDTITLE_X 85
#define SPEEDTITLE_Y 445
#define SHUFFLETITLE_X 129
#define SHUFFLETITLE_Y 385

#define SPEEDRECTLEFT_X 170
#define SPEEDRECTTOP_Y 435
#define SPEEDRECTWIDTH 150
#define SPEEDRECTHEIGHT 20

#define LONGESTDELAY 20      // Delay of this or slower makes the speed rect at the title screen all black.
                             // Can still get longer delays with command line arguments.

// Return values for playlevel()
#define LEVEL_COMPLETE 1
#define DEATH 2
#define QUIT 3

// Values to differentiate between different objects caught by the tongue.
#define COIN 1
#define DIAMOND 2
#define POWERUP 3

// Different powerup types.
#define EXTRALIFE 0
#define SHOOTPOWER 1
#define GAMEMOD 2
#define DESTRUCTOR 3
#define POWERUPTYPES 4

// How many rectanges to keep track of if doing fast drawing, where only
// updated rectanges are redrawn.
#define MAXRECTS 200

#define TEXTBUFFERSIZE 1024

#define YES 1
#define NO 0

/* -------------------------------------------------------------------------- */
// Structure definitions...

struct star_struct {
   float x; float y; int brightness; int age; float speed;};

struct sprite_struct {
   SDL_Surface * pixelmap; bitmask_t * collisionmask;};

struct baddie_struct {
   int exists; int type; float x; float y; float speedx; float speedy; float floatvar; int intvar; int intvar2;};

// Note: the different enemies use the float variable ("floatvar") and the 2 int variables
// ("intvar") for different things. See comments to makelevel() in komi.c

struct coin_struct {
   int exists; float x; float y; float speedx; float speedy;};

struct diamond_struct {
   int exists; float x; float y; float speedx; float speedy;};

// The powerups.
struct goodie_struct {
   int exists; int type; float x; float y; float speedx; float speedy;};
   
struct enemyshot_struct {
   int exists; float x; float y; float speedx; float speedy;};

struct friendlyshot_struct {
   int exists; float x; float y; float speedx; float speedy;};

// Holds flags for whether these keys are down or up.
struct keymap_struct {
   int left1; int left2; int left3; int right1; int right2; int right3; int fire1; int fire2; int escape; int levelskip; int pause; int screenshot;};

// Holds flag for whether the mouse is down, and what location it clicked on.
struct mousemap_struct {
   int button; int clickx; int clicky; int currentx; int currenty;};

// Settings that may change for each level.
struct level_struct {
   int coins;                     // How many coins...
   int diamonds;                  //          diamonds...
   int enemycount[ENEMYTYPES];    //          enemies of the various types...
   
   int topdiamonds;               // Flag for whether diamonds move only along the top.
   
   int fastlightningy;            // At what position does the lightning speed up?
   int fastlightningcheck;        // Speed up to moving down a pixel once every x frames.
   
   float scrollerspeedx;          // Speed for Scroller enemy type (the rockets)
   int scrolleroffset;            // Their offset from the lightning.
   
   int diverhoverlevel;           // Where the Divers hover when not diving.
   float divespeedy;              // Diver speed during a dive.
   float divespeedx;
   
   int bomberhoverlevel;          // Y location for the Bomber enemy type.
   int bombspeed;                 // Speed its shots travel.
   
   int snipersflag;               // Are there snipers in the level?
   
   float roamerminspeed;          // Min speed for Roamers (also used for some other enemies)
   float roamermaxspeed;          // And the max speed.

   float brownianmaxspeed;        // Max speed for the Brownian motion enemy.
   
   int guardianaccels;            // Flag for whether Accelerator enemy sticks near the lightning.
   
   float gunnershootprob;         // Chance per frame of gunner shooting.
   float enemyshotbasespeed;      // Speed of shot.
   
   int electrasflag;              // Whether there are Electras in the level.
   int electraoffset;             // Their offset from the lightning.
   
   int dropperhoveroffset;        // Offset of Dropper enemies from the lightning.
   int dropperspeedy;             // Their diving speed.
   
   float powerup_prob[POWERUPTYPES];   // Probability of given powerup type appearing per frame.
   };

/* -------------------------------------------------------------------------- */
// Globals...

SDL_Surface * virtue;            // The SDL surface that we draw to.
SDL_Event event;                 // For getting the last event.

SDL_Rect updaterect[MAXRECTS];   // Array of rectanges used if --fastdraw option is on. What areas to redraw this frame.
int rects;                       // Number of rectanges to redraw this frame. Passed to SDL_UpdateRects().

int level;                       // Current level.
int lives;                       // Current lives.

int hog = 0;                     // Flag for whether to use own delaying function which doesn't give up CPU.
int delay = DEFAULT_DELAY;       // Delay between frames.

// Various options that the user can set with command line arguments.
int nostarsflag = 0;
int nosound = 0;
int nomusic = 0;
int cheats = 0;
int invincible = 0;
int shuffle = 0;
int algorithmicenemies = 0;
int fullscreen = 0;
int fastdraw = 0;
int gfxdetails = 0;

int gotdelayarg = 0;    // Flag raised if "--delay" is used; prevents delay being read from prefs file.

int shuffledlevels[DEFINEDLEVELS];

// Position of Komi.
int komix;
int komiy;

// Tongue.
int tonguelength;       // Current tongue length (0 if tongue fully retracted).
int tonguespeed;        // Speed the tongue extends/falls at.

int caughttype;         // What type of object (if any) caught by the tongue.
int caughtnumber;       // Caught object's number (ie it could be coin 3).
int caughtoffsetx;      // Its x-distance from the tongue-tip when caught.
int caughtoffsety;      // And its y-distance.

int shotsavailable;     // How many shots Komi can shoot. Usually zero.
int fastretract;        // Not currently used. Would be flag for faster tongue retraction.
int freeze;             // Freeze enemy movement.

int playedshootsound;   // Gets set to 0 every tick, then to 1 when a shot is fired. Prevents multiple playback in a single tick.

int lightningy;         // Position of lightning.
int lightningcheck;     // Should merge this into levelinfo structure. Move lightning down one pixel every x frames.

int tick;               // Current frame number.
int score;              // Current score.
int highscore = 0;      // Highest score achieved.
int lastscore = 0;      // Last score this session.

int resetmoney;         // Flag for whether to remake money at level start.
                        // Will be Yes if this is a new level, No if we're replaying one we died in.

int givelastlifewarning = 0;    // Whether to give a warning upon next start of level due to last life (if in fullscreen mode)

int havecheated;        // Whether player has cheated this game. Affects whether highscore is saved.

// Now make all the relevant structures declared above.

struct star_struct star[MAXSTARS];

struct level_struct levelinfo;

struct baddie_struct enemy[MAX_ENEMIES];
struct coin_struct coin[MAX_COINS];
struct diamond_struct diamond[MAX_DIAMONDS];
struct enemyshot_struct enemyshot[MAX_ENEMYSHOTS];
struct friendlyshot_struct friendlyshot[MAX_FRIENDLYSHOTS];

struct goodie_struct goodie;

struct keymap_struct keymap = {0,0,0,0,0,0,0,0,0,0,0,0};
struct mousemap_struct mousemap = {0,0,0,0,0};

// All the sprite types get their own structure.
struct sprite_struct komi_sprite;
struct sprite_struct tip_sprite;
struct sprite_struct fasttip_sprite;
struct sprite_struct coin_sprite;
struct sprite_struct diamond_sprite;
struct sprite_struct generator_sprite;
struct sprite_struct scrollerleft_sprite;
struct sprite_struct scrollerright_sprite;
struct sprite_struct electra_sprite;
struct sprite_struct roamer_sprite;
struct sprite_struct brownian_sprite;
struct sprite_struct lasergun_sprite;
struct sprite_struct diver_sprite;
struct sprite_struct skull_sprite;
struct sprite_struct bouncer_sprite;
struct sprite_struct gunner_sprite;
struct sprite_struct dropper_sprite;
struct sprite_struct accelerator_sprite;
struct sprite_struct eyeball_sprite;
struct sprite_struct wrapball_sprite;
struct sprite_struct bomber_sprite;
struct sprite_struct sniperleft_sprite;
struct sprite_struct sniperright_sprite;
struct sprite_struct powerup_sprite;
struct sprite_struct destructor_sprite;
struct sprite_struct shootpower_sprite;
struct sprite_struct life_sprite;
struct sprite_struct shooterkomi_sprite;
struct sprite_struct friendlyshot_sprite;
struct sprite_struct enemyshot_sprite;
struct sprite_struct electrickomi_sprite;

struct sprite_struct skullpull_sprite;

struct sprite_struct tonguemask_sprite;
struct sprite_struct pickupmask_sprite;

// Will hold pointers to the different sprites so we can access each type by number.
struct sprite_struct * spritemap[ENEMYTYPES];
struct sprite_struct * powerupspritemap[POWERUPTYPES];

struct sprite_struct maintitle_title;
struct sprite_struct bolts_title;
struct sprite_struct start_title;
struct sprite_struct quit_title;
struct sprite_struct start2_title;
struct sprite_struct quit2_title;
struct sprite_struct gpl_title;
struct sprite_struct speed_title;
struct sprite_struct shuffleoff_title;
struct sprite_struct shuffleoff2_title;
struct sprite_struct shuffleon_title;
struct sprite_struct shuffleon2_title;

// All the sounds...
Mix_Chunk * contactdeath_sound = NULL;
Mix_Chunk * destructorkill_sound = NULL;
Mix_Chunk * eat_sound = NULL;
Mix_Chunk * electricdeath_sound = NULL;
Mix_Chunk * freeze_sound = NULL;
Mix_Chunk * gameover_sound = NULL;
Mix_Chunk * laser_sound = NULL;
Mix_Chunk * laserentry_sound = NULL;
Mix_Chunk * laserpowerup_sound = NULL;
Mix_Chunk * lastlife_sound = NULL;
Mix_Chunk * lightningwarning_sound = NULL;
Mix_Chunk * oneup_sound = NULL;
Mix_Chunk * pause_sound = NULL;
Mix_Chunk * powerup_sound = NULL;
Mix_Chunk * screenshot_sound = NULL;
Mix_Chunk * shoot_sound = NULL;
Mix_Chunk * stick_sound = NULL;
Mix_Chunk * unfreezewarning_sound = NULL;

// Music...
Mix_Music * music = NULL;

// Path to the data (sound files, graphics, etc). 
#ifdef DATAPATH
char filepath[TEXTBUFFERSIZE] = DATAPATH;
char prefsdir[TEXTBUFFERSIZE] = DATAPATH;
#else
char filepath[TEXTBUFFERSIZE] = "komidata/";
char prefsdir[TEXTBUFFERSIZE] = "komidata/";
#endif