home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 2 / AACD 2.iso / AACD / Games / WormWars / Source / same.h < prev    next >
Encoding:
C/C++ Source or Header  |  1992-11-09  |  13.7 KB  |  463 lines

  1. /* $Filename:    WormWars/Source/same.h $
  2.  * $VER:         WormWars 4.4 $
  3.  * $Description: Header file for Worm Wars 4.4 $
  4.  *
  5.  * © Copyright 1999 James R. Jacobs.
  6.  *
  7.  * This file is used by most files on Amiga and IBM-PC
  8.  
  9. SAME ON EACH PLATFORM -------------------------------------------------- */
  10.  
  11. #define elif                else if
  12.  
  13. // miscellaneous
  14.  
  15. #define CAUSEWAIT              80
  16. #define DEFAULTLEVELS           5
  17. #define ENDXPIXEL            ((STARTXPIXEL + SQUAREX * (FIELDX + 1)) - 1)
  18. #define ENDYPIXEL            ((STARTYPIXEL + SQUAREY * (FIELDY + 1)) - 1)
  19. #define FIELDX                  52                // in squares
  20. #define FIELDY                  38                // in squares
  21. #define HISCORES               4
  22. #define ILLEGAL                ((APTR) 0xA9A9)        // debugging value
  23. #define LIFEMODULO            1000
  24. #define MAXLEVELS              30                // 2K per level. <=99!
  25. #define NAMELENGTH              22                // 0..21 are TEXT, 22 is NULL
  26. #define NUMKEYS                  29
  27. #define PATIENCE              20
  28. #define SAYLIMIT            ((ENDXPIXEL - STARTXPIXEL) / FONTX)
  29. #define VERSION                "$VER: Worm Wars 4.4 (22.9.99) $"
  30.  
  31. // samples
  32.  
  33. #define FXKILLERFIRE     0
  34. #define FXPROTECTORBORN     1
  35. #define FXTIMEBOMBTICK     2
  36. #define FXGETGROWER         3
  37. #define FXMISSILEACTIVE     4
  38. #define FXGETPOWERUP     5
  39. #define FXUSETELEPORT     6
  40. #define FXWORMDEATH         7
  41. #define FXGETAMMO         8
  42. #define FXEXPLODE         9
  43. #define FXKILLERBORN    10
  44. #define FXORBBORN        11
  45. #define FXSHOOT            12
  46. #define FXTITLESCREEN    13
  47. #define FXVICTORY        14
  48. #define FXFILENEW        15
  49. #define FXFILEOPEN        16
  50. #define FXFILESAVE        17
  51. #define FXBOMBBLAST        18
  52. #define FXDEFEAT        19
  53. #define FXENDOFLEVEL    20
  54. #define FXCLICK            21
  55. #define FXUSEARMOUR        22
  56. #define FXGETOBJECT        23
  57. #define FXTIMEALERT        24
  58. #define FXORBSPLIT        25
  59. #define FXORBDEATH      26
  60. #define FXFILESAVEAS    27
  61. #define FXFX            28
  62. #define FXGETNITRO        29
  63. #define FXJUMP            30
  64. #define FX_C            31
  65. #define FX_O            32
  66. #define FX_M            33
  67. #define FX_P            34
  68. #define FX_L            35
  69. #define FX_E            36
  70. #define FX_T            37
  71. #define FXHISCORE        38
  72. #define FXTHUD            39
  73. #define FXKILLERDEATH    40
  74. #define FXGETSKULL        41
  75. #define FXUSETONGUE        42
  76. #define FXDRIPBORN        43
  77. #define FXAMIGAN        44
  78. #define FXPAIN            45
  79. #define SAMPLES            48
  80.  
  81. #define FXSTAMPED        FXBOMBBLAST
  82. #define FXUSEPROTECTOR  FXPROTECTORBORN
  83. #define FXDRIP            FXFX
  84.  
  85. // frequencies
  86.  
  87. #define   DRIPFREQ_MAX         30        // starting frequency (level 0)
  88. #define   DRIPFREQ_DEC          2        // minus level * DRIPDECREASE
  89. #define   DRIPFREQ_MIN         10        // but always at least DRIPFREQ_MIN
  90. #define KILLERFREQ_MAX        120
  91. #define KILLERFREQ_DEC          5
  92. #define KILLERFREQ_MIN         20
  93. #define    ORBFREQ_MAX        220
  94. #define    ORBFREQ_DEC         10
  95. #define    ORBFREQ_MIN         20
  96. #define  SLIMEFREQ_MAX        200
  97. #define  SLIMEFREQ_DEC         30
  98. #define  SLIMEFREQ_MIN         50
  99.  
  100. #define KILLERFIREFREQ         10
  101. #define TELFREQ                240
  102.  
  103. // key types
  104.  
  105. #define MOVE                  0    // not AMMO, TRAINER, ONEHUMAN
  106. #define TRAINER                  2    // not MOVE, AMMO, ONEHUMAN
  107. #define ONEHUMAN              3    // not MOVE, AMMO, TRAINER
  108.  
  109. // speeds
  110.  
  111. #define VERYFAST                 1
  112. #define FAST                     2
  113. #define NORMAL                   4
  114. #define SLOW                     8
  115. #define VERYSLOW                16      // must be non-0
  116.  
  117. #define   DRIPSPEED_MAX          SLOW
  118. #define   DRIPSPEED_DIV             2
  119. #define   FRAGSPEED_MAX        NORMAL
  120. #define   FRAGSPEED_DIV          2      // must be non-0
  121. #define    ORBSPEED_MAX          SLOW
  122. #define    ORBSPEED_DIV          3      // must be non-0
  123. #define KILLERSPEED_MAX          SLOW
  124. #define KILLERSPEED_DIV          2      // must be non-0
  125.  
  126. #define TIMEBOMBSPEED             4
  127. #define MISSILESPEED          FAST
  128.  
  129. /* The constant NORMAL is used for several purposes:
  130.     a)    as a speed (therefore must not be VERYFAST, FAST, SLOW
  131.             or VERYSLOW);
  132.     b)    as a blitmode (therefore must not be BLACK or WHITE); and
  133.     c)    as a pointer (therefore must not be GOLD, SILVER, EMPTY,
  134.             WOOD or STONE).
  135.  
  136. stats */
  137.  
  138. #define AMMOLIMIT       100
  139. #define BIASLIMIT       100
  140. #define STARTLIVES       100
  141. #define LIVESLIMIT       200
  142. #define MODELIMIT       100
  143. #define MULTILIMIT       8      // don't set >8!
  144. #define POWERLIMIT         6
  145. #define SCORELIMIT    999999L
  146.  
  147. /* Field values...
  148. These are objects. */
  149.     #define AFFIXER                 0
  150.     #define AMMO                 1
  151.     #define ARMOUR                 2
  152.     #define BIAS                 3
  153.     #define BOMB                 4
  154.     #define BONUS                 5
  155.     #define CLOCK                 6
  156.     #define GROWER                 7
  157.     #define HEALER                 8
  158.     #define ICE                     9
  159.     #define LIFE                10
  160.     #define MISSILE                11
  161.     #define MULTIPLIER            12
  162.     #define NITRO                13
  163.     #define POWER                14
  164.     #define PROTECTOR            15
  165.     #define SLAYER                16
  166.     #define SLOWER                17
  167.     #define SWITCHER            18
  168.     #define TONGUE                19
  169.     #define TREASURE            20
  170.     #define UMBRELLA            21
  171.     #define LASTOBJECT            UMBRELLA
  172. // These are `empty'.
  173.     #define EMPTY                (LASTOBJECT + 1)
  174.     #define SILVER                (LASTOBJECT + 2)
  175.     #define GOLD                (LASTOBJECT + 3)
  176.     #define FIRSTEMPTY            EMPTY
  177.     #define LASTEMPTY            GOLD
  178.     #define LASTKILLERFIRE        LASTEMPTY
  179. // Nothing special about the following...
  180.     #define TELEPORT            (GOLD + 1)
  181.     #define FRAGMENT            (GOLD + 2)
  182.     #define ORB                    (GOLD + 3)
  183.     #define FIRSTPROTECTOR        (GOLD + 4)
  184.     #define LASTPROTECTOR        (GOLD + 7)
  185. /* Margins indicate `ranges' for:
  186.     l:    letters.
  187.     n:    orb bouncing, normal mode.
  188.     t:    orb bouncing, tongue mode.
  189.     a:    orb bouncing, armour mode.
  190.     f:    fragment death.
  191.     k:    killers.                                   l n t a f k */
  192.     #define  GREEN_C            (GOLD +  8)        // [       [
  193.     #define    RED_O            (GOLD +  9)        // |       |
  194.     #define   BLUE_M            (GOLD + 10)        // |       |
  195.     #define YELLOW_P            (GOLD + 11)        // |       |
  196.     #define  GREEN_L            (GOLD + 12)        // |       |
  197.     #define    RED_E            (GOLD + 13)        // |       |
  198.     #define   BLUE_T            (GOLD + 14)        // |       |
  199.     #define YELLOW_E            (GOLD + 15)        // ]       |
  200.     #define SKULL                (GOLD + 16)        //         |
  201.     #define SLIME                (GOLD + 17)        //       [ | [
  202.     #define STONE                (GOLD + 18)        //   [ [ | | |
  203.     #define KILLER                (GOLD + 19)        //   ] | | | |
  204.     #define WOOD                (GOLD + 20)        //     | ] ] |
  205.     #define FIRSTTAIL            (GOLD + 21)        //     |     |
  206.     #define LASTTAIL            (GOLD + 24)        //     ]     ]
  207.     #define FIRSTLETTER            GREEN_C
  208.     #define FIRSTNONE            STONE
  209.     #define FIRSTTONGUE            STONE
  210.     #define FIRSTARMOUR            SLIME
  211.     #define FIRSTFRAGDEATH        FIRSTLETTER
  212.     #define FIRSTKILLER            SLIME
  213.     #define LASTLETTER            YELLOW_E
  214.     #define LASTNONE            LASTTAIL
  215.     #define LASTTONGUE            KILLER
  216.     #define LASTARMOUR            KILLER
  217.     #define LASTFRAGDEATH        WOOD
  218.     #define LASTKILLER            LASTTAIL
  219.     #define LETTERS                (LASTLETTER - FIRSTLETTER)
  220.  
  221. /* These are never part of the field[][] or board[][][] arrays
  222. (except METAL) */
  223.     #define ORBTONGUE            (LASTTAIL +  1)
  224.     #define ORBARMOUR            (LASTTAIL +  2)
  225.     #define FIRSTFIRE            (LASTTAIL +  3)
  226.     #define LASTFIRE            (LASTTAIL +  6)
  227.     #define FIRSTMISSILE        (LASTTAIL +  7)
  228.     #define LASTMISSILE            (LASTTAIL + 10)
  229.     #define START                (LASTTAIL + 11)
  230.     #define MUSIC                (LASTTAIL + 12)
  231.     #define STICKY                (LASTTAIL + 13)
  232.     #define FX                    (LASTTAIL + 14)
  233.     #define ZERO                (LASTTAIL + 15)
  234.     #define ONE                    (ZERO + 1)
  235.     #define TWO                    (ZERO + 2)
  236.     #define       HEAD            (ZERO + 10)
  237.     #define  GREENHEADUP         HEAD
  238.     #define    REDHEADUP        (HEAD +  1)
  239.     #define   BLUEHEADUP        (HEAD +  2)
  240.     #define YELLOWHEADUP        (HEAD +  3)
  241.     #define  FIRSTHEAD            GREENHEADUP
  242.     #define   LASTHEAD            YELLOWHEADUP
  243.     #define  GREENHEADDOWN        (HEAD +  4)
  244.     #define    REDHEADDOWN        (HEAD +  5)
  245.     #define   BLUEHEADDOWN        (HEAD +  6)
  246.     #define YELLOWHEADDOWN        (HEAD +  7)
  247.     #define  GREENHEADLEFT        (HEAD +  8)
  248.     #define    REDHEADLEFT        (HEAD +  9)
  249.     #define   BLUEHEADLEFT        (HEAD + 10)
  250.     #define YELLOWHEADLEFT        (HEAD + 11)
  251.     #define  GREENHEADRIGHT        (HEAD + 12)
  252.     #define    REDHEADRIGHT        (HEAD + 13)
  253.     #define   BLUEHEADRIGHT        (HEAD + 14)
  254.     #define YELLOWHEADRIGHT        (HEAD + 15)
  255.     #define  GREENMODEUP        (HEAD + 16)
  256.     #define    REDMODEUP        (HEAD + 17)
  257.     #define   BLUEMODEUP        (HEAD + 18)
  258.     #define YELLOWMODEUP        (HEAD + 19)
  259.     #define  GREENMODEDOWN        (HEAD + 20)
  260.     #define    REDMODEDOWN        (HEAD + 21)
  261.     #define   BLUEMODEDOWN        (HEAD + 22)
  262.     #define YELLOWMODEDOWN        (HEAD + 23)
  263.     #define  GREENMODELEFT        (HEAD + 24)
  264.     #define    REDMODELEFT        (HEAD + 25)
  265.     #define   BLUEMODELEFT        (HEAD + 26)
  266.     #define YELLOWMODELEFT        (HEAD + 27)
  267.     #define  GREENMODERIGHT        (HEAD + 28)
  268.     #define    REDMODERIGHT        (HEAD + 29)
  269.     #define   BLUEMODERIGHT        (HEAD + 30)
  270.     #define YELLOWMODERIGHT        (HEAD + 31)
  271.     #define METAL                (HEAD + 32)
  272.     #define FIRSTDRIP            (HEAD + 33)
  273.     #define LASTDRIP            (HEAD + 36)
  274.     #define BLACKENED            (HEAD + 37)
  275.     #define WHITENED            (HEAD + 38)
  276.     #define ARRAYSIZE            WHITENED
  277.  
  278.     #define ANYTHING            FX
  279.  
  280. // These have no imagery.
  281.     #define TEMPTAIL            (ARRAYSIZE + 1)
  282.     #define TEMPWOOD            TEMPTAIL
  283.     #define TEMPSLIME            TEMPTAIL
  284.     #define TEMPSILVER            (ARRAYSIZE + 2)
  285.     #define TEMPGOLD            (ARRAYSIZE + 3)
  286.     #define NOSQUARE            (ARRAYSIZE + 4)
  287.  
  288. // game status
  289.  
  290. #define GAMEOVER        0
  291. #define PLAYGAME        1
  292. #define FIELDEDIT        2
  293. #define TITLESCREEN        3
  294.  
  295. // indicator locations
  296.  
  297. #define CAUSEYDISTANCE    2    // distance from centre for cause
  298. #define LETTERYDISTANCE    3    // distance from centre for letters
  299. #define ICONY            (FIELDY / 2)
  300. #define MUSICICON        (FIELDX + 2)
  301. #define CLOCKICON        (FIELDX + 5)
  302. #define STICKYICON        (FIELDX + 8)
  303.  
  304. // control values
  305.  
  306. #define NONE            0   // must be 0
  307. #define AMIGA           1
  308. #define HUMAN           2
  309. #define IBMPC            AMIGA
  310.  
  311. /* PROTOTYPES -------------------------------------------------------------
  312.  
  313. engine.c(pp) */
  314.  
  315. void align(STRPTR string, SBYTE size, TEXT filler);
  316.                                     // right-justify a string within another string
  317. SWORD atleast(SWORD value, SWORD minimum);
  318. ABOOL blocked(SBYTE which, SBYTE deltax, SBYTE deltay);
  319. void bombblast(SBYTE triggerer, SBYTE player, SBYTE centrex, SBYTE centrey);
  320. void bouncekiller(SBYTE which, SBYTE x, SBYTE y);
  321. ABOOL bounceorb(SBYTE which, SBYTE x, SBYTE y);
  322. SBYTE bsign(SBYTE value);
  323. void changefield(void);
  324. void clearhiscores(void);
  325. void clearletters(void);
  326. void copyfield(SBYTE source, SBYTE destination);
  327. void death(void);
  328. void drawcause(SBYTE player, SBYTE state);
  329. void drawletter(SBYTE player, SBYTE letter, SBYTE state);
  330. void driploop(void);
  331. void enginesetup(void);                // once-only initialization of engine variables
  332. void fastloop(void);                // things done often
  333. void fillfield(SBYTE which);
  334. ABOOL findempty(SBYTE* x, SBYTE* y, SBYTE first, SBYTE last);
  335. void fragloop(void);                // controls fragments
  336. void gameloop(void);
  337. void killall(void);
  338. void killerloop(void);
  339. void levelappend(void);                // Level|Append function
  340. void leveldelete(void);                // Level|Delete function
  341. void levelerase(void);                // Level|Erase function
  342. void levelinsert(void);                // Level|Insert function
  343. ABOOL loadfields(STRPTR pathname);
  344. void matchteleports(void);
  345. void missileloop(void);                // controls missiles
  346. void newfield(void);
  347. void newfields(void);
  348. void newgame(void);
  349. void newhiscores(void);
  350. void newlevel(SBYTE player);
  351. void orbexplosion(SBYTE which);
  352. void orbloop(SBYTE which);            // controls orbs
  353. void orbscore(SBYTE which, ULONG score);
  354. void orbsplit(SBYTE which);
  355. void orientworms(void);
  356. SBYTE partner(SBYTE which);
  357. void putletter(SBYTE player);
  358. void queue(SBYTE player, SBYTE deltax, SBYTE deltay);
  359. void ramming(SBYTE player);
  360. void reflect(SBYTE which, SBYTE iwhich);
  361. void renderboard(void);
  362. ABOOL savefields(STRPTR pathname);
  363. void saylevel(COLOUR colour);
  364. void setbrush(SBYTE newbrush);
  365. SBYTE slowdown(SBYTE speed);        // halve worm's speed
  366. void slowloop(void);                // things done rarely
  367. SBYTE speedup(SBYTE speed, ABOOL nitro);
  368. LONG squareblast(SBYTE type, SBYTE player, SBYTE thissy, SBYTE x, SBYTE y);
  369. void timeloop(void);
  370. void train(SCANCODE scancode);
  371. void turnworm(SBYTE player, SBYTE deltax, SBYTE deltay);
  372. void updatesquare(SBYTE x, SBYTE y);
  373. SBYTE valid(SBYTE x, SBYTE y);
  374. void whichfrag(SBYTE x, SBYTE y, SBYTE* whichptr, SBYTE* iwhichptr);
  375. SBYTE whichdrip(SBYTE x, SBYTE y);
  376. SBYTE whichkiller(SBYTE x, SBYTE y);
  377. SBYTE whichorb(SBYTE x, SBYTE y);
  378. SBYTE whichteleport(SBYTE x, SBYTE y);
  379. SBYTE whichtimebomb(SBYTE x, SBYTE y);
  380. void wormbullet(SBYTE player);
  381. void wormletter(SBYTE player, SBYTE thissy);
  382. void wormloop(SBYTE player);            // controls worms and protectors
  383. void wormscore(SBYTE player, LONG score);
  384. SWORD wsign(SWORD value);
  385. SWORD xpixeltosquare(SWORD x);
  386. SWORD ypixeltosquare(SWORD y);
  387. SBYTE xwrap(SBYTE x);
  388. SBYTE ywrap(SBYTE y);
  389.  
  390. // system.c(pp)
  391.  
  392. ABOOL anykey(ABOOL timeout);
  393. ABOOL beginfx(void);
  394. void celebrate(void);
  395. void cleanexit(SLONG rc);
  396. void clearjoystick(void);
  397. void clearkybd(void);
  398. void clearstats(void);
  399. void dot(SBYTE x, SBYTE y);
  400. void draw(SBYTE x, SBYTE y, SBYTE image);
  401. ULONG effect(SBYTE index);
  402. void fileabout(void);                // File|About... function
  403. void fileopen(void);                // File|Open... function
  404. void filesaveas(ABOOL flag);         // File|Save, File|Save As... functions
  405. void freefx(void);
  406. void gameinput(void);
  407. void hiscores(void);
  408. void loadthefx(void);
  409. void loadthemusic(void);
  410. void preserve(SWORD x, SBYTE row, SBYTE image, UWORD amount);
  411. void resettime(void);
  412. void rundown(SBYTE player);
  413. void say(STRPTR sentence, COLOUR colour);
  414. void sendreadrequest(void);
  415. void setpointer(SBYTE brush);
  416. void stat(SBYTE player, SBYTE line);
  417. void stopfx(ULONG receipt);
  418. void systemsetup(void);
  419. void timing(void);
  420. void titlescreen(void);                // the title screen
  421. void toggle(SBYTE key);
  422. void underline(SBYTE brush);
  423. ABOOL verify(void);
  424. void waitasec(void);
  425. ABOOL ZOpen(STRPTR fieldname, ABOOL write);
  426. ABOOL ZRead(STRPTR IOBuffer, ULONG length);
  427. ABOOL ZWrite(STRPTR IOBuffer, ULONG length);
  428. ABOOL ZClose(void);
  429.  
  430. // PUBLIC STRUCTURES ------------------------------------------------------
  431.  
  432. AGLOBAL struct HiScoreStruct
  433. {    SBYTE    player,    level;
  434.     SLONG    score;                    // the score itself
  435.     TEXT    name[NAMELENGTH + 1];    // name of the player
  436.     ABOOL    fresh;                    // is the entry new?
  437. };
  438. AGLOBAL struct OrbStruct
  439. {    SBYTE        x, y, deltax, deltay, oldx, oldy;
  440.     ABOOL        alive, moved, explode;
  441.     SBYTE        speed, mode, multi, last;
  442.     SWORD        armour, tongue;
  443.     SLONG        score;
  444. };
  445. AGLOBAL struct TeleportStruct
  446. {    SBYTE        x, y;
  447.     ABOOL        alive;
  448. };
  449. AGLOBAL struct WormStruct
  450. {   SBYTE       x, y, deltax, deltay, posidir, position, victor, cause,
  451.                 statx, staty, pos, multi, power, mode, last,
  452.                 levelreached;
  453.     ABOOL        affixer, alive, moved, nitro;
  454.     UBYTE        speed, control;
  455.     SWORD        armour, tongue, ammo, bias, ice, lives;
  456.     SLONG        score, oldscore;
  457.     ULONG        causewait;
  458.     TEXT        name[NAMELENGTH + 1];
  459.     COLOUR        colour;
  460. };
  461.  
  462. // Must have blank line at EOF.
  463.