ratcatcher/defs.h

337 lines
7.9 KiB
C

#ifndef __DEFS_H
#define __DEFS_H
#include <SDL_mixer.h>
/* Macros */
//#define OPENGL
// channel numbers
#define CH_LASTCHANNEL 21
#define CH_HURRYUP 20
// size of flower straem when getting last flower
// (number of gems on each side)
#define STREAMWID 6
// puff of smoke
#define PUFFFRAMES 6
#define PUFFSPEED 4 // how fast it animates (smaller = faster)
#define PUFFAPPEAR 4 // frame at which puff will turn into a gem
// text sizes
#define TEXTSIZE_HELP 20
#define TEXTSIZE_POINTS 10
#define TEXTSIZE_BONUS 20
#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 BONUSDELAY 50
#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 40
#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 12
#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
#define FX_HURRYUP 9
#define FX_TOOSLOW 10
#define FX_BONUS 11
// Slope types
#define S_NOTSOLID 0
#define S_SOLID 1
#define S_SLOPE 2
// Sprite types
#define MAXPTYPES 23
#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
#define P_GEMRED 19
#define P_PUFF 20
#define P_GEMYELLOW 21
#define P_GEMPURPLE 22
// 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?
int timer1; //
int timer2; //
int timer3; //
// 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 int musicplaying;
extern Mix_Music *music, *normalmusic, *fastmusic;
extern Mix_Chunk *sfx[];
#endif