#ifndef __DEFS_H #define __DEFS_H #include /* Macros */ //#define OPENGL // text sizes #define TEXTSIZE_HELP 20 #define TEXTSIZE_POINTS 10 #define TEXTSIZE_HURRY 50 // text delays #define TEXTSPEED 2 // how fast text zooms in // how long to keep various text on the screen #define POINTSDELAY 40 #define HURRYDELAY 50 #define LEVELDELAY 70 #define HELPDELAY 80 // Sizes #define TILEH 16 // tile width (in pixels) #define TILEW 16 // tile height (in pixels) #define LEVELW 40 // level width (in tiles) #define LEVELH 30 // level height (in tiles) // Game mechanics #define INVULNTIME 200 // how long player stays invulnerable for #define FALLSPEED 4 // terminal velocity of falling sprites #define NETSPEED 9 // how fast the player's net moves // Limits #define MAXMAPPINGS 50 #define MAXMONSTERSPERLEVEL 20 #define MAXLETTERHEIGHT 100 #define MAXFRAMES 11 // max number of frames for sprites #define MAXHELP 5 #define MAXTILEFRAMES 10 // max number of frames for animated tiles // Fixed text buffer sizes #define BUFLEN 512 #define MIDBUFLEN 64 #define SMALLBUFLEN 32 // Boolean values #define B_TRUE -1 #define B_FALSE 0 // Other #define WANTFPS 75 // try to run at this many frames per sec /* enums */ /* sounds */ #define MAXFX 9 #define FX_SHOOT 0 #define FX_SLAM 1 #define FX_KILL 2 #define FX_MULTIKILL 3 #define FX_JUMP 4 #define FX_FRUIT 5 #define FX_POWERUP 6 #define FX_DIE 7 #define FX_WINLEVEL 8 // Slope types #define S_NOTSOLID 0 #define S_SOLID 1 #define S_SLOPE 2 // Sprite types #define MAXPTYPES 19 #define P_PLAYER 0 #define P_RAT 1 #define P_CHEESE 2 #define P_SPEED 3 #define P_NUMNETS 4 #define P_BIGNET 5 #define P_BEE 6 #define P_SPIDER 7 #define P_CLOUD 8 #define P_ICECREAM 9 #define P_CHIPS 10 #define P_BURGER 11 #define P_SNAKE 12 #define P_SPIT 13 #define P_HELP 14 #define P_FLOWERYELLOW 15 #define P_FLOWERRED 16 #define P_FLOWERPURPLE 17 #define P_COKE 18 // Frame names #define F_WALK1 0 #define F_JUMP 1 #define F_FALL 2 #define F_CAUGHT 3 #define F_DEAD 4 #define F_DEAD2 5 #define F_DEAD3 6 #define F_DEAD4 7 #define F_CLIMB1 8 #define F_CLIMB2 9 #define F_SHOOT 10 // Tile types #define T_BLANK 0 #define T_LAND 1 #define T_SLOPEUP 2 #define T_SLOPEDOWN 3 #define T_FULL 4 #define T_SKY 5 #define T_LADDER 6 #define T_LADDERTOP 7 #define T_RIGHT 8 #define T_LEFT 9 #define T_SPIKES 10 #define T_TELEPORT 11 #define T_TELEPORT2 12 #define T_TELEPORTDEST 13 #define T_WATER 14 #define T_WATERTOP 15 #define T_WATERSPIKES 16 #define T_BRIDGE 17 // like land but you can drop down through it // death states #define D_INITIAL (1) // Need to trigger death sequence #define D_BOUNCING (2) // Corpse is bouncing around the screen #define D_LASTBOUNCE (3) // Final descent, about to turn to fruit(or respawn for player) #define D_FINAL (4) // ACTUALLY dead, remove the sprite // teleporting states #define TP_SHRINKING (1) // entering teleporter // caught by net states #define C_NETTING (1) // being pulled in to player #define C_NETTED (2) // being held by player // directions #define D_RIGHT (1) #define D_LEFT (-1) /* data structures */ typedef struct mapping_s { char ch; int tnum; } mapping_t; typedef struct tiletype_s { int uniqid; int id; char name[SMALLBUFLEN]; int lowness[TILEW]; int solid; int water; int spikes; SDL_Surface *img[MAXTILEFRAMES]; int numframes; int animspeed; struct tiletype_s *next; struct tiletype_s *prev; } tiletype_t; tiletype_t *tiletype; typedef struct initialmonster_s { int startx; int starty; int id; char *help; } initialmonster_t; typedef struct text_s { int x,y; int size; int maxsize; int state; int delay; // how long to stay on screen char txt[BUFLEN]; SDL_Rect bgarea; SDL_Surface *bg; SDL_Surface *img; SDL_Color *c; struct text_s *next; struct text_s *prev; } text_t; typedef struct level_s { int id; int bgtileid; char *tileset; char name[SMALLBUFLEN]; int map[LEVELW*LEVELH]; int tileframe[LEVELW*LEVELH]; // tracks frame numbers for tiles int *animtiles; // array of offsets to map positions which are animated struct level_s *next; struct level_s *prev; int p1x; /* player 1 start pos */ int p1y; int nummonsters; initialmonster_t initm[MAXMONSTERSPERLEVEL]; int hurryuptime; } level_t; level_t *level; typedef struct sprite_s { int id; // what kind of sprite? (eg. player, cheese, rat) int score; // player's score, for monsters how much they are worth // ATTRIBUTES double speed; // how fast this sprite moves // CURRENT STATE // player only int slamming; // are we slamming our net (player only) double slamangle;// are what point around is our net? int netting; // are we shooting our net out? int climbing; // are we climbing a laddder int invuln; // are we invulnerable (ie. just after player respawning) int netcaught; // how many monsters are in our net? int netmax; // how many monsters can our net hold? int netspeed; // how fast does our net shoot out? int netdir; // which way is our net going (left/right) int netlen; // how far our is our net? int netbig; // have we collected a BIG NET powerup? int nety; // y position of end of net (used when shooting >1 net) int netxstart; // x position of start of net int netystart; // y position of start of net // monster only int willbecome; // what fruit this will become when dead int angry; // is this sprite in ANGRY mode for its AI? struct sprite_s *caughtby; // who has us in their net? NULL if nobody int caughtstate; // are we caught by a net? being pulled in or caught? int jumptimer; // delay before we will jump int flies; // can we fly? double xs,ys; // bounce direction after death struct sprite_s *bullet; // pointer to our bullet struct sprite_s *owner; // if we ARE a bullet, pointer to the sprite who made us char name[MIDBUFLEN]; // Help text for help icons, otherwise not really used outside of debugging // player and monster int falling; // are we falling? int dropping; // are we purposely dropping through solid ground? int dropx,dropy;// coords of tile we dropped from int fallspeed; // how fast are we falling? int jumping; // are we jumping? int jumpdir; //which way are we jumping? int jumpspeed; // how fast we are moving upwards int teleporting;// are we inside a teleporter? >0 is entering, <0 is exitting int dead; // is this sprite dead? if so, what dying state? int bounces; // how many time have we bounced after dying int doomcount; // sprites dies when this reaches zero int moved; // did we move this loop cycle? // GAME MECHANICS double x,y; // current position int dir; // which way we are facing (1=right,-1=left) SDL_Surface *img; // current graphic image SDL_Surface *netbg; // temp storage for area behind net // LINKED LIST STUFF struct sprite_s *next; struct sprite_s *prev; } sprite_t; typedef struct imageset_s { SDL_Surface *img[MAXFRAMES*4]; int numimages; } imageset_t; imageset_t imageset[MAXPTYPES]; /* external globals */ extern SDL_Color black; extern SDL_Surface *screen, *temps; extern sprite_t *sprite, *lastsprite, *player; extern level_t *curlevel; extern tiletype_t fakeblock; extern int gtime; extern int timer; extern SDL_Color red; extern SDL_Color black; extern SDL_Color white; extern SDL_Color green; extern SDL_Color yellow; extern int vidargs; extern int toggletimer; extern TTF_Font *font[]; extern Mix_Music *music; extern Mix_Chunk *sfx[]; #endif