/* $Filename: WormWars/Source/same.h * $VER: WormWars 6.0 * $Description: Header file for Worm Wars * * © Copyright 2000 James R. Jacobs. SAME ON EACH PLATFORM -------------------------------------------------- */ #define elif else if #define AGLOBAL ; /* global (project-scope) */ #define MODULE static /* external static (file-scope) */ #define PERSIST static /* internal static (function-scope) */ #define AUTO auto /* automatic (function-scope) */ /* miscellaneous */ #define CAUSEWAIT 100 #define DATELENGTH 8 /* DD/MM/YY */ #define TIMELENGTH 5 /* HH:MM */ #define DEFAULTLEVELS 5 #define ENDXPIXEL ((STARTXPIXEL + SQUAREX * (FIELDX + 1)) - 1) #define ENDYPIXEL ((STARTYPIXEL + SQUAREY * (FIELDY + 1)) - 1) #define FIELDX 52 /* in squares */ #define FIELDY 38 /* in squares */ #define HISCORES 4 #define LIFEMODULO 1000 #define MAXLEVELS 40 /* assert (MAXLEVELS >= 1 && MAXLEVELS <= 99); */ #define NAMELENGTH 21 /* 0..20 are TEXT, 21 is NULL */ #define NUMKEYS 28 #define PATIENCE 20 #define SAYLIMIT ((ENDXPIXEL - STARTXPIXEL) / FONTX) #define VERSION "$VER: Worm Wars 6.0 (1.6.100)" /* samples */ #define FXBORN_DOG 0 #define FXBORN_DRIP 1 #define FXBORN_GOAT 2 #define FXBORN_MISSILE 3 #define FXBORN_ORB 4 #define FXBORN_PENGUIN 5 #define FXBORN_PROTECTOR 6 #define FXDEATH_FRAGMENT 7 // thud #define FXDEATH_GOAT 8 #define FXDEATH_ORB 9 #define FXDEATH_PENGUIN 10 #define FXDEATH_WORM 11 #define FXDO_BOMB 12 // tick #define FXDO_ENCLOSE 13 #define FXDO_GOAT 14 // fire #define FXDO_JUMP 15 #define FXDO_ORB 16 // split #define FXGET_AMMO 17 #define FXGET_CYCLONE 18 #define FXGET_DRIP 19 #define FXGET_GROWER 20 #define FXGET_OBJECT 21 #define FXGET_NITRO 22 #define FXGET_POWERUP 23 #define FXGET_PULSE 24 // explode #define FXGET_SKULL 25 #define FXFILENEW 26 #define FXFILEOPEN 27 #define FXFILESAVE 28 #define FXFILESAVEAS 29 #define FXEDITCUT 30 #define FXEDITCOPY 31 #define FXEDITPASTE 32 #define FXEDITDELETE 33 #define FXHELP 34 #define FXUSE_AMMO 35 #define FXUSE_ARMOUR 36 #define FXUSE_BOMB 37 #define FXUSE_TELEPORT 38 #define FXUSE_TONGUE 39 #define FX_C 40 #define FX_O 41 #define FX_M 42 #define FX_P 43 #define FX_L 44 #define FX_E 45 #define FX_T 46 #define FXPAIN 47 #define FXAPPLAUSE 51 // after each new hiscore #define FXGAMEOVER 52 // if all worms are dead #define FXCELEBRATE 53 // if game succeeded #define FXCLICK 54 // rundown, keypresses #define FXLAUNCH 55 // title screen #define FXRIFF 56 // after each rundown #define FXSIREN 57 // out of time #define SAMPLES FXSIREN #define FXCENTRE FXDEATH_PENGUIN #define FXDO_CLOUD FXDO_GOAT #define FXFX FXLAUNCH #define FXRUNDOWN FXCLICK #define FXUSE_PROTECTOR FXBORN_PROTECTOR /* key types */ #define MOVE 0 /* not AMMO, TRAINER, ONEHUMAN */ #define TRAINER 2 /* not MOVE, AMMO, ONEHUMAN */ #define ONEHUMAN 3 /* not MOVE, AMMO, TRAINER */ /* speeds */ #define VERYFAST 1 #define FAST 2 #define NORMAL 4 #define SLOW 8 #define VERYSLOW 16 /* must be non-0 */ /* The constant NORMAL is used for several purposes: a) as a speed (therefore must not be VERYFAST, FAST, SLOW or VERYSLOW); b) as a blitmode (therefore must not be BLACK or WHITE); and c) as a pointer (therefore must not be GOLD, SILVER, EMPTY, WOOD or STONE). stats */ #define AMMOLIMIT 100 #define BIASLIMIT 100 #define FREEDOMLIMIT 100 #define STARTLIVES 100 #define LIVESLIMIT 200 #define MODELIMIT 100 #define MULTILIMIT 8 /* don't set >8! */ #define POWERLIMIT 6 #define SCORELIMIT 99999999 /* Field values... These are objects. */ #define AFFIXER 0 #define AMMO 1 #define ARMOUR 2 #define BIAS 3 #define BOMB 4 #define BONUS 5 #define CLOCK 6 #define CYCLONE 7 #define FREEDOM 8 #define GROWER 9 #define HEALER 10 #define ICE 11 #define LIFE 12 #define LIGHTNING 13 #define MAGNET 14 #define MISSILE 15 #define MULTIPLIER 16 #define NITRO 17 #define POWER 18 #define PROTECTOR 19 #define PULSE 20 #define PUSHER 21 #define REMNANTS 22 #define SIDESHOT 23 #define SLAYER 24 #define SLOWER 25 #define SWITCHER 26 #define TONGUE 27 #define TREASURE 28 #define UMBRELLA 29 #define LASTOBJECT UMBRELLA /* These are `empty'. */ #define EMPTY (LASTOBJECT + 1) #define SILVER (LASTOBJECT + 2) #define GOLD (LASTOBJECT + 3) #define FIRSTEMPTY EMPTY #define LASTEMPTY GOLD #define LASTGOATFIRE LASTEMPTY /* Nothing special about the following... */ #define TELEPORT (GOLD + 1) #define FRAGMENT (GOLD + 2) #define ORB (GOLD + 3) #define FIRSTPROTECTOR (GOLD + 4) #define LASTPROTECTOR (GOLD + 7) /* Margins indicate `ranges' for: n: orb bouncing, normal mode. t: orb bouncing, tongue mode. a: orb bouncing, armour mode. g: goats. */ #define GREEN_C (GOLD + 8) #define RED_O (GOLD + 9) #define BLUE_M (GOLD + 10) #define YELLOW_P (GOLD + 11) #define GREEN_L (GOLD + 12) #define RED_E (GOLD + 13) #define BLUE_T (GOLD + 14) #define YELLOW_E (GOLD + 15) #define SKULL (GOLD + 16) /* n t a g */ #define SLIME (GOLD + 17) /* [ [ */ #define STONE (GOLD + 18) /* [ [ | | */ #define GOAT (GOLD + 19) /* ] | | | */ #define WOOD (GOLD + 20) /* | ] | */ #define FIRSTTAIL (GOLD + 21) /* | | */ #define LASTTAIL (GOLD + 24) /* ] ] */ #define FIRSTLETTER GREEN_C #define FIRSTNONE STONE #define FIRSTTONGUE STONE #define FIRSTARMOUR SLIME #define FIRSTGOAT SLIME #define LASTLETTER YELLOW_E #define LASTNONE LASTTAIL #define LASTTONGUE GOAT #define LASTARMOUR GOAT #define LASTGOAT LASTTAIL #define LETTERS (LASTLETTER - FIRSTLETTER) #define ORBTONGUE (LASTTAIL + 1) #define ORBARMOUR (LASTTAIL + 2) #define FIRSTFIRE (LASTTAIL + 3) #define LASTFIRE (LASTTAIL + 6) #define FIRSTMISSILE (LASTTAIL + 7) #define LASTMISSILE (LASTTAIL + 10) #define START (LASTTAIL + 11) #define MUSIC (LASTTAIL + 12) #define FX (LASTTAIL + 13) #define ZERO (LASTTAIL + 14) #define TIMEBOMB ZERO #define ONE (ZERO + 1) #define TWO (ZERO + 2) #define HEAD (ZERO + 10) #define GREENHEADUP HEAD #define REDHEADUP (HEAD + 1) #define BLUEHEADUP (HEAD + 2) #define YELLOWHEADUP (HEAD + 3) #define FIRSTHEAD GREENHEADUP #define LASTHEAD YELLOWHEADUP #define GREENHEADDOWN (HEAD + 4) #define REDHEADDOWN (HEAD + 5) #define BLUEHEADDOWN (HEAD + 6) #define YELLOWHEADDOWN (HEAD + 7) #define GREENHEADLEFT (HEAD + 8) #define REDHEADLEFT (HEAD + 9) #define BLUEHEADLEFT (HEAD + 10) #define YELLOWHEADLEFT (HEAD + 11) #define GREENHEADRIGHT (HEAD + 12) #define REDHEADRIGHT (HEAD + 13) #define BLUEHEADRIGHT (HEAD + 14) #define YELLOWHEADRIGHT (HEAD + 15) #define GREENMODEUP (HEAD + 16) #define REDMODEUP (HEAD + 17) #define BLUEMODEUP (HEAD + 18) #define YELLOWMODEUP (HEAD + 19) #define GREENMODEDOWN (HEAD + 20) #define REDMODEDOWN (HEAD + 21) #define BLUEMODEDOWN (HEAD + 22) #define YELLOWMODEDOWN (HEAD + 23) #define GREENMODELEFT (HEAD + 24) #define REDMODELEFT (HEAD + 25) #define BLUEMODELEFT (HEAD + 26) #define YELLOWMODELEFT (HEAD + 27) #define GREENMODERIGHT (HEAD + 28) #define REDMODERIGHT (HEAD + 29) #define BLUEMODERIGHT (HEAD + 30) #define YELLOWMODERIGHT (HEAD + 31) #define METAL (HEAD + 32) #define FIRSTDRIP (HEAD + 33) #define DRIP FIRSTDRIP #define LASTDRIP (HEAD + 36) #define BLACKENED (HEAD + 37) #define WHITENED (HEAD + 38) #define PENGUIN (HEAD + 39) #define WHIRLWIND (HEAD + 40) #define DOG (HEAD + 41) /* dog chasing */ #define DOGAWAKENING (HEAD + 42) #define DOGDORMANT (HEAD + 43) #define CLOUD (HEAD + 44) #define ARRAYSIZE CLOUD #define ANYTHING STONE // should be something that is valid field contents /* These have no imagery. */ #define TEMPTAIL (ARRAYSIZE + 1) #define TEMPWOOD TEMPTAIL #define TEMPSLIME TEMPTAIL #define TEMPLIGHTNING TEMPTAIL #define TEMPSILVER (ARRAYSIZE + 2) #define TEMPGOLD (ARRAYSIZE + 3) #define NOSQUARE (ARRAYSIZE + 4) /* game status */ #define GAMEOVER 0 #define PLAYGAME 1 #define FIELDEDIT 2 #define TITLESCREEN 3 /* indicator locations */ #define CAUSEYDISTANCE 2 /* distance from centre for cause */ #define LETTERYDISTANCE 3 /* distance from centre for letters */ #define ICONY (FIELDY / 2) #define MUSICICON (FIELDX + 2) #define CLOCKICON (FIELDX + 3) /* control values */ #define NONE 0 /* must be 0 */ #define AMIGA 1 #define HUMAN 2 #define IBMPC AMIGA /* PROTOTYPES ------------------------------------------------------------- You could put AGLOBAL in front of these if you wanted to. engine.c */ void clearhiscores(void); void enginesetup(void); void gameloop(void); void levelappend(void); void leveldelete(void); void levelerase(void); void levelinsert(void); void matchteleports(void); void newfields(void); void newgame(void); void timeloop(void); void align(STRPTR string, SBYTE size, TEXT filler); void fillfield(SBYTE which); void icon(SBYTE player, UBYTE image); void saylevel(COLOUR colour); void setbrush(SBYTE newbrush); void train(SCANCODE scancode); void updatesquare(SBYTE x, SBYTE y); void wormqueue(SBYTE player, SBYTE deltax, SBYTE deltay); void wormscore(SBYTE player, LONG score); SBYTE loadfields(STRPTR pathname); SBYTE partner(SBYTE which); ABOOL savefields(STRPTR pathname); SBYTE valid(SBYTE x, SBYTE y); SBYTE xwrap(SBYTE x); SBYTE ywrap(SBYTE y); /* system.c */ void celebrate(void); void clearjoystick(void); void clearkybd(void); void clearscreen(void); void datestamp(void); void gameinput(void); void hiscores(void); void joy0(void); void resettime(void); void sendreadrequest(void); void systemsetup(void); void timing(void); void titlescreen(void); void turborender(void); void waitasec(void); void cleanexit(SLONG rc); void draw(SBYTE x, SBYTE y, UBYTE image); void effect(SBYTE index); void fileopen(ABOOL revert); void filesaveas(ABOOL flag); void flash(ULONG where); void rundown(SBYTE player); void say(STRPTR sentence, COLOUR colour); void stat(SBYTE player, SBYTE line); void stopfx(void); ABOOL anykey(ABOOL timeout); ABOOL verify(void); ABOOL ZOpen(STRPTR fieldname, ABOOL write); ABOOL ZRead(STRPTR IOBuffer, ULONG length); ABOOL ZWrite(STRPTR IOBuffer, ULONG length); ABOOL ZClose(void); /* PUBLIC STRUCTURES ------------------------------------------------------ */ struct HiScoreStruct { SBYTE player, level; SLONG score; /* the score itself */ TEXT name[NAMELENGTH + 2]; /* name of the player */ ABOOL fresh; /* is the entry new? */ TEXT date[DATELENGTH + 1], /* date of achievement */ time[TIMELENGTH + 1]; /* time of achievement */ }; struct TeleportStruct { SBYTE x, y; ABOOL alive; }; struct WormStruct { SBYTE x, y, deltax, deltay, position, victor, cause, statx, staty, pos, multi, power, mode, last, levelreached; ABOOL affixer, remnants, alive, moved, nitro, pusher, sideshot, flashed; UBYTE speed, control; SWORD armour, tongue, ammo, bias, ice, lives, freedom; SLONG score, oldscore, hiscore; ULONG causewait; TEXT name[NAMELENGTH + 1]; COLOUR colour; }; /* Must have blank line at EOF. */