home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 113 / EnigmaAmiga113CD.iso / software / giochi / wormwars / source / same.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-06-22  |  14.2 KB  |  407 lines

  1. /* $Filename:    WormWars/Source/same.h
  2.  * $VER:         WormWars 6.2
  3.  * $Description: Header file for Worm Wars
  4.  *
  5.  * © Copyright 2000 James R. Jacobs.
  6.  
  7. SAME ON EACH PLATFORM -------------------------------------------------- */
  8.  
  9. #define elif         else if
  10. #define AGLOBAL      ;       /* global (project-scope) */
  11. #define MODULE       static  /* external static (file-scope) */
  12. #define PERSIST      static  /* internal static (function-scope) */
  13. #define AUTO         auto    /* automatic (function-scope) */
  14.  
  15. /* miscellaneous */
  16.  
  17. #define CAUSEWAIT      100
  18. #define DATELENGTH       8 /* DD/MM/YY */
  19. #define TIMELENGTH       5 /* HH:MM */
  20. #define DEFAULTLEVELS    5
  21. #define ENDXPIXEL     ((STARTXPIXEL + SQUAREX * (FIELDX + 1)) - 1)
  22. #define ENDYPIXEL     ((STARTYPIXEL + SQUAREY * (FIELDY + 1)) - 1)
  23. #define FIELDX          52 /* in squares */
  24. #define FIELDY          38 /* in squares */
  25. #define HISCORES         4
  26. #define LIFEMODULO    1000
  27. #define MAXLEVELS       40 /* assert (MAXLEVELS >= 1 && MAXLEVELS <= 99); */
  28. #define NAMELENGTH      21 /* 0..20 are TEXT, 21 is NULL */
  29. #define NOMODE           0
  30. #define NUMKEYS         28
  31. #define PATIENCE        20
  32. #define SAYLIMIT      ((ENDXPIXEL - STARTXPIXEL) / FONTX)
  33. #define VERSION       "$VER: Worm Wars 6.2 (22.6.100)"
  34.  
  35. /* samples */
  36.  
  37. #define FXBORN_DOG        0
  38. #define FXBORN_DRIP       1
  39. #define FXBORN_GOAT       2
  40. #define FXBORN_MISSILE    3
  41. #define FXBORN_ORB        4
  42. #define FXBORN_PENGUIN    5
  43. #define FXBORN_PROTECTOR  6
  44. #define FXDEATH_FRAGMENT  7 // thud
  45. #define FXDEATH_GOAT      8
  46. #define FXDEATH_ORB       9
  47. #define FXDEATH_PENGUIN  10
  48. #define FXDEATH_WORM     11
  49. #define FXDO_BOMB        12 // tick
  50. #define FXDO_ENCLOSE     13
  51. #define FXDO_GOAT        14 // fire
  52. #define FXDO_JUMP        15
  53. #define FXDO_ORB         16 // split
  54. #define FXGET_AMMO       17
  55. #define FXGET_CYCLONE    18
  56. #define FXGET_DRIP       19
  57. #define FXGET_GROWER     20
  58. #define FXGET_OBJECT     21
  59. #define FXGET_NITRO      22
  60. #define FXGET_POWERUP    23
  61. #define FXGET_PULSE      24 // explode
  62. #define FXGET_SKULL      25
  63. #define FXFILENEW        26
  64. #define FXFILEOPEN       27
  65. #define FXFILESAVE       28
  66. #define FXFILESAVEAS     29
  67. #define FXEDITCUT        30
  68. #define FXEDITCOPY       31
  69. #define FXEDITPASTE      32
  70. #define FXEDITDELETE     33
  71. #define FXHELP           34
  72. #define FXUSE_AMMO       35
  73. #define FXUSE_ARMOUR     36
  74. #define FXUSE_BOMB       37
  75. #define FXUSE_TELEPORT   38
  76. #define FXUSE_TONGUE     39
  77. #define FX_C             40
  78. #define FX_O             41
  79. #define FX_M             42
  80. #define FX_P             43
  81. #define FX_L             44
  82. #define FX_E             45
  83. #define FX_T             46
  84. #define FXPAIN           47
  85. #define FXAPPLAUSE       51 // after each new hiscore
  86. #define FXGAMEOVER       52 // if all worms are dead
  87. #define FXCELEBRATE      53 // if game succeeded
  88. #define FXCLICK          54 // rundown, keypresses
  89. #define FXLAUNCH         55 // title screen
  90. #define FXRIFF           56 // after each rundown
  91. #define FXSIREN          57 // out of time
  92. #define SAMPLES          FXSIREN
  93. #define FXCENTRE         FXDEATH_PENGUIN
  94. #define FXDO_CLOUD       FXDO_GOAT
  95. #define FXFX             FXLAUNCH
  96. #define FXRUNDOWN        FXCLICK
  97. #define FXUSE_PROTECTOR  FXBORN_PROTECTOR
  98.  
  99. /* key types */
  100.  
  101. #define MOVE              0 /* not AMMO, TRAINER, ONEHUMAN */
  102. #define TRAINER           2 /* not MOVE, AMMO, ONEHUMAN */
  103. #define ONEHUMAN          3 /* not MOVE, AMMO, TRAINER */
  104.  
  105. /* speeds */
  106.  
  107. #define VERYFAST          1
  108. #define FAST              2
  109. #define NORMAL            4
  110. #define SLOW              8
  111. #define VERYSLOW         16 /* must be non-0 */
  112.  
  113. /* The constant NORMAL is used for several purposes:
  114.     a)    as a speed (therefore must not be VERYFAST, FAST, SLOW
  115.             or VERYSLOW);
  116.     b)    as a blitmode (therefore must not be BLACK or WHITE); and
  117.     c)    as a pointer (therefore must not be GOLD, SILVER, EMPTY,
  118.             WOOD or STONE).
  119.  
  120. stats */
  121.  
  122. #define AMMOLIMIT       100
  123. #define BIASLIMIT       100
  124. #define FREEDOMLIMIT    100
  125. #define STARTLIVES      100
  126. #define LIVESLIMIT      200
  127. #define MODELIMIT       100
  128. #define MULTILIMIT        8 /* don't set >8! */
  129. #define POWERLIMIT        6
  130. #define SCORELIMIT 99999999
  131.  
  132. /* Field values...
  133. These are objects. */
  134.     #define AFFIXER                 0
  135.     #define AMMO                 1
  136.     #define ARMOUR                 2
  137.     #define BIAS                 3
  138.     #define BOMB                 4
  139.     #define BONUS                 5
  140.     #define CLOCK                 6
  141.         #define CUTTER                           7
  142.         #define CYCLONE                          8
  143.         #define FREEDOM                          9
  144.         #define GROWER                          10
  145.         #define HEALER                          11
  146.         #define ICE                             12
  147.         #define LIFE                            13
  148.         #define LIGHTNING                       14
  149.         #define MAGNET                          15
  150.         #define MISSILE                         16
  151.         #define MULTIPLIER                      17
  152.         #define NITRO                           18
  153.         #define POWER                           19
  154.         #define PROTECTOR                       20
  155.         #define PULSE                           21
  156.         #define PUSHER                          22
  157.         #define REMNANTS                        23
  158.         #define SIDESHOT                        24
  159.         #define SLAYER                          25
  160.         #define SLOWER                          26
  161.         #define SWITCHER                        27
  162.         #define TONGUE                          28
  163.         #define TREASURE                        29
  164.         #define UMBRELLA                        30
  165.     #define LASTOBJECT            UMBRELLA
  166. /* These are `empty'. */
  167.         #define EMPTY                   (LASTOBJECT + 1)
  168.         #define SILVER                  (LASTOBJECT + 2)
  169.         #define GOLD                    (LASTOBJECT + 3)
  170.         #define FIRSTEMPTY              EMPTY
  171.         #define LASTEMPTY               GOLD
  172.     #define LASTGOATFIRE        LASTEMPTY
  173. /* Nothing special about the following... */
  174.         #define TELEPORT                (GOLD + 1)
  175.         #define FRAGMENT                (GOLD + 2)
  176.         #define ORB                     (GOLD + 3)
  177.     #define FIRSTPROTECTOR        (GOLD + 4)
  178.     #define LASTPROTECTOR        (GOLD + 7)
  179. /* Margins indicate `ranges' for:
  180.    n: orb bouncing, normal mode.
  181.    t: orb bouncing, tongue mode.
  182.    a: orb bouncing, armour mode.
  183.    g: goats. */
  184.         #define  GREEN_C                        (GOLD +  8)      
  185.         #define    RED_O                        (GOLD +  9)
  186.         #define   BLUE_M                        (GOLD + 10)
  187.         #define YELLOW_P                        (GOLD + 11)
  188.         #define  GREEN_L                        (GOLD + 12)
  189.         #define    RED_E                        (GOLD + 13)
  190.         #define   BLUE_T                        (GOLD + 14)
  191.         #define YELLOW_E                        (GOLD + 15)
  192.         #define SKULL                           (GOLD + 16)             /* n t a g */
  193.         #define SLIME                           (GOLD + 17)             /*     [ [ */
  194.         #define STONE                           (GOLD + 18)             /* [ [ | | */
  195.         #define GOAT                            (GOLD + 19)             /* ] | | | */
  196.         #define WOOD                            (GOLD + 20)             /*   | ] | */
  197.         #define FIRSTTAIL                       (GOLD + 21)             /*   |   | */
  198.         #define LASTTAIL                        (GOLD + 24)             /*   ]   ] */
  199.         #define FIRSTLETTER        GREEN_C
  200.         #define FIRSTNONE          STONE
  201.         #define FIRSTTONGUE        STONE
  202.         #define FIRSTARMOUR        SLIME
  203.         #define FIRSTGOAT          SLIME
  204.         #define LASTLETTER         YELLOW_E
  205.         #define LASTNONE           LASTTAIL
  206.         #define LASTTONGUE         GOAT
  207.         #define LASTARMOUR         GOAT
  208.         #define LASTGOAT           LASTTAIL
  209.         #define LETTERS            (LASTLETTER - FIRSTLETTER)
  210.  
  211.         #define ORBTONGUE          (LASTTAIL +  1)
  212.         #define ORBARMOUR          (LASTTAIL +  2)
  213.         #define FIRSTFIRE          (LASTTAIL +  3)
  214.         #define LASTFIRE           (LASTTAIL +  6)
  215.         #define FIRSTMISSILE       (LASTTAIL +  7)
  216.         #define LASTMISSILE        (LASTTAIL + 10)
  217.         #define START              (LASTTAIL + 11)
  218.         #define MUSIC              (LASTTAIL + 12)
  219.         #define FX                 (LASTTAIL + 13)
  220.         #define ZERO               (LASTTAIL + 14)
  221.         #define TIMEBOMB            ZERO
  222.         #define ONE                (ZERO + 1)
  223.         #define TWO                (ZERO + 2)
  224.         #define       HEAD         (ZERO + 10)
  225.         #define  GREENHEADUP        HEAD
  226.         #define    REDHEADUP       (HEAD +  1)
  227.         #define   BLUEHEADUP       (HEAD +  2)
  228.         #define YELLOWHEADUP       (HEAD +  3)
  229.         #define  FIRSTHEAD         GREENHEADUP
  230.         #define   LASTHEAD         YELLOWHEADUP
  231.         #define  GREENHEADDOWN     (HEAD +  4)
  232.         #define    REDHEADDOWN     (HEAD +  5)
  233.         #define   BLUEHEADDOWN     (HEAD +  6)
  234.         #define YELLOWHEADDOWN     (HEAD +  7)
  235.         #define  GREENHEADLEFT     (HEAD +  8)
  236.         #define    REDHEADLEFT     (HEAD +  9)
  237.         #define   BLUEHEADLEFT     (HEAD + 10)
  238.         #define YELLOWHEADLEFT     (HEAD + 11)
  239.         #define  GREENHEADRIGHT    (HEAD + 12)
  240.         #define    REDHEADRIGHT    (HEAD + 13)
  241.         #define   BLUEHEADRIGHT    (HEAD + 14)
  242.         #define YELLOWHEADRIGHT    (HEAD + 15)
  243.         #define  GREENMODEUP       (HEAD + 16)
  244.         #define    REDMODEUP       (HEAD + 17)
  245.         #define   BLUEMODEUP       (HEAD + 18)
  246.         #define YELLOWMODEUP       (HEAD + 19)
  247.         #define  GREENMODEDOWN     (HEAD + 20)
  248.         #define    REDMODEDOWN     (HEAD + 21)
  249.         #define   BLUEMODEDOWN     (HEAD + 22)
  250.         #define YELLOWMODEDOWN     (HEAD + 23)
  251.         #define  GREENMODELEFT     (HEAD + 24)
  252.         #define    REDMODELEFT     (HEAD + 25)
  253.         #define   BLUEMODELEFT     (HEAD + 26)
  254.         #define YELLOWMODELEFT     (HEAD + 27)
  255.         #define  GREENMODERIGHT    (HEAD + 28)
  256.         #define    REDMODERIGHT    (HEAD + 29)
  257.         #define   BLUEMODERIGHT    (HEAD + 30)
  258.         #define YELLOWMODERIGHT    (HEAD + 31)
  259.         #define METAL              (HEAD + 32)
  260.         #define FIRSTDRIP          (HEAD + 33)
  261.         #define DRIP               FIRSTDRIP
  262.         #define LASTDRIP           (HEAD + 36)
  263.         #define BLACKENED          (HEAD + 37)
  264.         #define WHITENED           (HEAD + 38)
  265.         #define PENGUIN            (HEAD + 39)
  266.         #define WHIRLWIND          (HEAD + 40)
  267.         #define DOG                (HEAD + 41) /* dog chasing */
  268.         #define DOGAWAKENING       (HEAD + 42)
  269.         #define DOGDORMANT         (HEAD + 43)
  270.         #define CLOUD              (HEAD + 44)
  271.         #define ARRAYSIZE          CLOUD
  272.  
  273.         #define ANYTHING           STONE // should be something that is valid field contents
  274.  
  275. /* These have no imagery. */
  276.     #define TEMPTAIL            (ARRAYSIZE + 1)
  277.     #define TEMPWOOD            TEMPTAIL
  278.     #define TEMPSLIME            TEMPTAIL
  279.         #define TEMPLIGHTNING                   TEMPTAIL
  280.     #define TEMPSILVER            (ARRAYSIZE + 2)
  281.     #define TEMPGOLD            (ARRAYSIZE + 3)
  282.     #define NOSQUARE            (ARRAYSIZE + 4)
  283.  
  284. /* game status
  285.  */
  286.  
  287. #define GAMEOVER        0
  288. #define PLAYGAME        1
  289. #define FIELDEDIT       2
  290. #define TITLESCREEN     3
  291.  
  292. /* indicator locations */
  293.  
  294. #define CAUSEYDISTANCE  2 /* distance from centre for cause */
  295. #define LETTERYDISTANCE 3 /* distance from centre for letters */
  296. #define ICONY           (FIELDY / 2)
  297. #define MUSICICON       (FIELDX + 2)
  298. #define CLOCKICON       (FIELDX + 3)
  299.  
  300. /* control values */
  301.  
  302. #define NONE            0 /* must be 0
  303.  */
  304. #define AMIGA           1
  305. #define HUMAN           2
  306. #define IBMPC           AMIGA
  307.  
  308. /* PROTOTYPES -------------------------------------------------------------
  309.  
  310. You could put AGLOBAL in front of these if you wanted to.
  311.  
  312. engine.c */
  313.  
  314. void clearhiscores(void);
  315. void enginesetup(void);
  316. void gameloop(void);
  317. void levelappend(void);
  318. void leveldelete(void);
  319. void levelerase(void);
  320. void levelinsert(void);
  321. void matchteleports(void);
  322. void newfields(void);
  323. void newgame(void);
  324. void timeloop(void);
  325.  
  326. void align(STRPTR string, SBYTE size, TEXT filler);
  327. void fillfield(SBYTE which);
  328. void icon(SBYTE player, UBYTE image);
  329. void saylevel(COLOUR colour);
  330. void setbrush(SBYTE newbrush);
  331. void train(SCANCODE scancode);
  332. void updatesquare(SBYTE x, SBYTE y);
  333. void wormqueue(SBYTE player, SBYTE deltax, SBYTE deltay);
  334. void wormscore(SBYTE player, LONG score);
  335.  
  336. SBYTE loadfields(STRPTR pathname);
  337. SBYTE partner(SBYTE which);
  338. ABOOL savefields(STRPTR pathname);
  339. SBYTE valid(SBYTE x, SBYTE y);
  340. SBYTE xwrap(SBYTE x);
  341. SBYTE ywrap(SBYTE y);
  342.  
  343. /* system.c */
  344.  
  345. void celebrate(void);
  346. void clearjoystick(void);
  347. void clearkybd(void);
  348. void clearscreen(void);
  349. void datestamp(void);
  350. void gameinput(void);
  351. void hiscores(void);
  352. void joy0(void);
  353. void resettime(void);
  354. void sendreadrequest(void);
  355. void systemsetup(void);
  356. void timing(void);
  357. void titlescreen(void);
  358. void turborender(void);
  359. void waitasec(void);
  360.  
  361. void cleanexit(SLONG rc);
  362. void draw(SBYTE x, SBYTE y, UBYTE image);
  363. void effect(SBYTE index);
  364. void fileopen(ABOOL revert);
  365. void filesaveas(ABOOL flag);
  366. void flash(ULONG where);
  367. void rundown(SBYTE player);
  368. void say(STRPTR sentence, COLOUR colour);
  369. void stat(SBYTE player, SBYTE line);
  370. void stopfx(void);
  371.  
  372. ABOOL anykey(ABOOL timeout);
  373. ABOOL verify(void);
  374. ABOOL ZOpen(STRPTR fieldname, ABOOL write);
  375. ABOOL ZRead(STRPTR IOBuffer, ULONG length);
  376. ABOOL ZWrite(STRPTR IOBuffer, ULONG length);
  377. ABOOL ZClose(void);
  378.  
  379. /* PUBLIC STRUCTURES ------------------------------------------------------ */
  380.  
  381. struct HiScoreStruct
  382. {   SBYTE player, level;
  383.     SLONG score;                /* the score itself */
  384.     TEXT  name[NAMELENGTH + 2];    /* name of the player */
  385.     ABOOL fresh;                /* is the entry new? */
  386.     TEXT  date[DATELENGTH + 1],    /* date of achievement */
  387.           time[TIMELENGTH + 1];    /* time of achievement */
  388. };
  389. struct TeleportStruct
  390. {   SBYTE x, y;
  391.     ABOOL alive;
  392. };
  393. struct WormStruct
  394. {   SBYTE  x, y, deltax, deltay, position, victor, cause,
  395.            statx, staty, pos, multi, power, mode, last, levelreached;
  396.     ABOOL  affixer, remnants, alive, moved, nitro, pusher,
  397.            sideshot, flashed;
  398.     UBYTE  speed, control;
  399.     SWORD  armour, tongue, ammo, bias, cutter, ice, lives, freedom;
  400.     SLONG  score, oldscore, hiscore;
  401.     ULONG  causewait;
  402.     TEXT   name[NAMELENGTH + 1];
  403.     COLOUR colour;
  404. };
  405.  
  406. /* Must have blank line at EOF. */
  407.