/* $Filename: WormWars/Source/same.h $ * $VER: WormWars 5.61 $ * $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 VERSION "$VER: Worm Wars 5.61 (26.4.00) $" /* samples */ #define FXGOATFIRE 0 #define FXPROTECTORBORN 1 #define FXTIMEBOMBTICK 2 #define FXGETGROWER 3 #define FXMISSILEACTIVE 4 #define FXGETPOWERUP 5 #define FXUSETELEPORT 6 #define FXWORMDEATH 7 #define FXGETAMMO 8 #define FXEXPLODE 9 #define FXGOATBORN 10 #define FXORBBORN 11 #define FXSHOOT 12 #define FXTITLESCREEN 13 #define FXVICTORY 14 #define FXFILENEW 15 #define FXFILEOPEN 16 #define FXFILESAVE 17 #define FXBOMBBLAST 18 #define FXDEFEAT 19 #define FXENDOFLEVEL 20 #define FXCLICK 21 #define FXUSEARMOUR 22 #define FXGETOBJECT 23 #define FXTIMEALERT 24 #define FXORBSPLIT 25 #define FXORBDEATH 26 #define FXFILESAVEAS 27 #define FXFX 28 #define FXGETNITRO 29 #define FXJUMP 30 #define FX_C 31 #define FX_O 32 #define FX_M 33 #define FX_P 34 #define FX_L 35 #define FX_E 36 #define FX_T 37 #define FXHISCORE 38 #define FXTHUD 39 #define FXGOATDEATH 40 #define FXGETSKULL 41 #define FXUSETONGUE 42 #define FXDRIPBORN 43 #define FXAMIGAN 44 #define FXPAIN 45 #define FXPENGUINBORN 49 #define FXPENGUINDEATH 50 #define FXRUNDOWN 51 #define FXEDITCUT 52 #define FXEDITCOPY 53 #define FXEDITPASTE 54 #define FXLEVELDELETE 55 #define FXCYCLONE 56 #define FXDOGAWAKENS 57 #define FXENCLOSURE 58 #define SAMPLES FXENCLOSURE #define FXSTAMPED FXBOMBBLAST #define FXUSEPROTECTOR FXPROTECTORBORN #define FXDRIP FXFX /* 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 STARTLIVES 100 #define LIVESLIMIT 200 #define MODELIMIT 100 #define MULTILIMIT 8 /* don't set >8! */ #define POWERLIMIT 6 #define SCORELIMIT 999999L /* 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 GROWER 8 #define HEALER 9 #define ICE 10 #define LIFE 11 #define LIGHTNING 12 #define MAGNET 13 #define MISSILE 14 #define MULTIPLIER 15 #define NITRO 16 #define POWER 17 #define PROTECTOR 18 #define PULSE 19 #define REMNANTS 20 #define SIDESHOT 21 #define SLAYER 22 #define SLOWER 23 #define SWITCHER 24 #define TONGUE 25 #define TREASURE 26 #define UMBRELLA 27 #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 FX /* 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 ------------------------------------------------------------- engine.c */ AGLOBAL void clearhiscores(void); AGLOBAL void enginesetup(void); AGLOBAL void gameloop(void); AGLOBAL void levelappend(void); AGLOBAL void leveldelete(void); AGLOBAL void levelerase(void); AGLOBAL void levelinsert(void); AGLOBAL void matchteleports(void); AGLOBAL void newfields(void); AGLOBAL void newgame(void); AGLOBAL void timeloop(void); AGLOBAL void align(STRPTR string, SBYTE size, TEXT filler); AGLOBAL void fillfield(SBYTE which); AGLOBAL void saylevel(COLOUR colour); AGLOBAL void setbrush(SBYTE newbrush); AGLOBAL void train(SCANCODE scancode); AGLOBAL void updatesquare(SBYTE x, SBYTE y); AGLOBAL void wormqueue(SBYTE player, SBYTE deltax, SBYTE deltay); AGLOBAL void wormscore(SBYTE player, LONG score); AGLOBAL SBYTE loadfields(STRPTR pathname); AGLOBAL SBYTE partner(SBYTE which); AGLOBAL ABOOL savefields(STRPTR pathname); AGLOBAL SBYTE valid(SBYTE x, SBYTE y); AGLOBAL SBYTE xwrap(SBYTE x); AGLOBAL SBYTE ywrap(SBYTE y); /* system.c */ AGLOBAL void celebrate(void); AGLOBAL void clearjoystick(void); AGLOBAL void clearkybd(void); AGLOBAL void clearscreen(void); AGLOBAL void datestamp(void); AGLOBAL void gameinput(void); AGLOBAL void hiscores(void); AGLOBAL void joy0(void); AGLOBAL void resettime(void); AGLOBAL void sendreadrequest(void); AGLOBAL void systemsetup(void); AGLOBAL void timing(void); AGLOBAL void titlescreen(void); AGLOBAL void turborender(void); AGLOBAL void waitasec(void); AGLOBAL void cleanexit(SLONG rc); AGLOBAL void draw(SBYTE x, SBYTE y, SBYTE image); AGLOBAL void effect(SBYTE index); AGLOBAL void fileopen(ABOOL revert); AGLOBAL void filesaveas(ABOOL flag); AGLOBAL void rundown(SBYTE player); AGLOBAL void say(STRPTR sentence, COLOUR colour); AGLOBAL void stat(SBYTE player, SBYTE line); AGLOBAL void stopfx(void); AGLOBAL ABOOL anykey(ABOOL timeout); AGLOBAL ABOOL verify(void); AGLOBAL ABOOL ZOpen(STRPTR fieldname, ABOOL write); AGLOBAL ABOOL ZRead(STRPTR IOBuffer, ULONG length); AGLOBAL ABOOL ZWrite(STRPTR IOBuffer, ULONG length); AGLOBAL ABOOL ZClose(void); /* PUBLIC STRUCTURES ------------------------------------------------------ */ AGLOBAL 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 */ }; AGLOBAL struct TeleportStruct { SBYTE x, y; ABOOL alive; }; AGLOBAL struct WormStruct { SBYTE x, y, deltax, deltay, position, victor, cause, statx, staty, pos, multi, power, mode, last, levelreached; ABOOL affixer, remnants, alive, moved, nitro, sideshot; UBYTE speed, control; SWORD armour, tongue, ammo, bias, ice, lives; SLONG score, oldscore, hiscore; ULONG causewait; TEXT name[NAMELENGTH + 1]; COLOUR colour; }; /* Must have blank line at EOF. */