home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Inne / Gry / Atomic_Tanks / Atomic-Tanks-5.1.exe / src / main.h < prev    next >
C/C++ Source or Header  |  2011-06-30  |  13KB  |  475 lines

  1. #ifndef MAIN_DEFINE
  2. #define MAIN_DEFINE
  3.  
  4. /*
  5.  * atanks - obliterate each other with oversize weapons
  6.  * Copyright (C) 2003  Thomas Hudson
  7.  *
  8.  * This program is free software; you can redistribute it and/or
  9.  * modify it under the terms of the GNU General Public License
  10.  * as published by the Free Software Foundation; either version 2
  11.  * of the License, or (at your option) any later version.
  12.  *
  13.  * This program is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  * GNU General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU General Public License
  19.  * along with this program; if not, write to the Free Software
  20.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  21.  * */
  22.  
  23. #ifndef VERSION
  24. #define VERSION "5.1"
  25. #endif
  26.  
  27. #ifdef GENTOO
  28. #ifndef DATA_DIR
  29. #define DATA_DIR "/usr/share/games/atanks"
  30. #endif
  31. #endif
  32.  
  33. #ifndef BUFFER_SIZE
  34. #define BUFFER_SIZE 256
  35. #endif
  36.  
  37. #ifndef _UNUSED
  38. #define _UNUSED __attribute__ ((unused))
  39. #endif // _UNUSED
  40. #ifndef _WARNUNUSED
  41. #define _WARNUNUSED __attribute__ ((warn_unused_result))
  42. #endif // _WARNUNUSED
  43.  
  44. #include <allegro.h>
  45. #ifdef WIN32
  46. #include <winalleg.h>
  47. #endif
  48. #include <stdlib.h>
  49. #include <stdio.h>
  50. #include <math.h>
  51. #include <string.h>
  52. #include <time.h>
  53. #include "imagedefs.h"
  54.  
  55. #include <iostream>
  56. #include <fstream>
  57.  
  58. #ifdef LINUX
  59. #include <unistd.h>
  60. #endif /* LINUX */
  61.  
  62. #include <string>
  63.  
  64. #define GAME_SPEED 14000
  65.  
  66. #ifdef LINUX
  67. #define LINUX_SLEEP usleep(10000)
  68. #define LINUX_REST usleep(40000)
  69. #define LINUX_DREAMLAND sleep(5)
  70. #endif
  71.  
  72. #ifdef MACOSX
  73. #define LINUX_SLEEP usleep(10000)
  74. #define LINUX_REST usleep(40000)
  75. #define LINUX_DREAMLAND sleep(5)
  76. #endif
  77.  
  78. #ifdef WIN32
  79. #include <windows.h>
  80. #include <winbase.h>
  81. #define LINUX_SLEEP Sleep(10)
  82. #define LINUX_REST Sleep(40)
  83. #define LINUX_DREAMLAND Sleep(500)
  84. #endif
  85.  
  86. using namespace std;
  87.  
  88. // place to save config and save games
  89. #ifdef WIN32
  90. #define HOME_DIR "AppData"
  91. #endif
  92. #ifdef LINUX
  93. #define HOME_DIR "HOME"
  94. #endif
  95. #ifdef MACOSX
  96. #define HOME_DIR "HOME"
  97. #endif
  98.  
  99. #ifndef    DATA_DIR
  100. #define DATA_DIR "."
  101. #endif
  102. #define SCREEN_WIDTH    800
  103. #define SCREEN_HEIGHT    600
  104. #define HALF_WIDTH    (SCREEN_WIDTH/2)
  105. #define HALF_HEIGHT    (SCREEN_HEIGHT/2)
  106. #define    STUFF_BAR_WIDTH        400
  107. #define    STUFF_BAR_HEIGHT    35
  108.  
  109. #define    GFILE_KEY    0x14233241
  110.  
  111. #define    FRAMES_PER_SECOND    60
  112. #ifndef PI
  113. #define PI 3.1415926535897932384626433832795029L
  114. #endif // PI
  115. // #define PI 3.14
  116. #define MAXUPDATES 256 // This one needs to be watched! If the display goes bye bye, reduce the value!
  117. #define MAX_OVERSHOOT 10000
  118. #define ABSDISTANCE(x1,y1,x2,y2) abs((int)sqrt((long double)pow(((long double)x2) - ((long double)x1), 2) + (long double)pow(((long double)y2) - ((long double)y1), 2)))
  119. #define FABSDISTANCE(x1,y1,x2,y2) fabs(sqrt((long double)pow(((long double)x2) - ((long double)x1), 2) + (long double)pow(((long double)y2) - ((long double)y1), 2)))
  120. #define MAXPLAYERS 10
  121. #define MAX_POWER  2000
  122. #define MAX_OBJECTS 400
  123. #define    MAX_ROUNDS 1000
  124. #define TANKHEIGHT 20
  125. #define TANKWIDTH 15
  126. #define GUNLENGTH 16
  127. #define MENUHEIGHT 30
  128. #define SKIES 8
  129. #define LANDS 8
  130. #define ALL_SKIES 16
  131. #define ALL_LANDS 16
  132. #define    BALLISTICS 52
  133. #define    BEAMWEAPONS 3
  134. #define WEAPONS (BALLISTICS + BEAMWEAPONS)
  135. #define ITEMS 24
  136. #define THINGS (WEAPONS + ITEMS)
  137. #define    NATURALS 6
  138. #define RADII 6
  139. #define MAXRADIUS 200
  140. #define BUTTONFRAMES 2
  141. #define EXPLODEFRAMES 18
  142. #define    DISPERSEFRAMES 10
  143. #define    EXPLOSIONFRAMES    (EXPLODEFRAMES + DISPERSEFRAMES)
  144. #define TANKSAG 10
  145. #define MENUBUTTONS 7
  146. #define MISSILEFRAMES 1
  147. #define ACHANGE 256/360
  148. #define INGAMEBUTTONS 4
  149. #define MAX_MISSILES 10
  150. #define SPREAD 10
  151. #define SHIELDS 6
  152. #define WEAPONSOUNDS 4
  153. #define NAME_LENGTH 24
  154. #define ADDRESS_LENGTH 16
  155.  
  156. //Score coeficients
  157.  
  158. #define SCORE_DESTROY_UNIT_BONUS    5000
  159. #define SCORE_UNIT_SELF_DESTROY        0
  160. #define SCORE_HIT_UNIT            50
  161. #define SCORE_SELF_HIT            0
  162.  
  163. //Wind
  164. #define WIND_COEF            0.3
  165. #define    MAX_WIND            3
  166.  
  167.  
  168.  
  169. // bitmaps for tanks
  170. #define NORMAL_TANK 0
  171. #define CLASSIC_TANK 1     // really 8 in the .dat file
  172. #define BIGGREY_TANK 2
  173. #define T34_TANK 3
  174. #define HEAVY_TANK 4
  175. #define FUTURE_TANK 5
  176. #define UFO_TANK 6
  177. #define SPIDER_TANK 7
  178. #define BIGFOOT_TANK 8
  179.  
  180.  
  181. // background images
  182. #define BACKGROUND_CIRCLE 0
  183. #define BACKGROUND_LINE 1
  184. #define BACKGROUND_BLANK 2
  185.  
  186. #ifdef NEW_GAMELOOP
  187. #define WAIT_AT_END_OF_ROUND 300
  188. #else
  189. #define WAIT_AT_END_OF_ROUND 100
  190. #endif
  191.  
  192. // time between volly shots
  193. #define VOLLY_DELAY 50
  194.  
  195.  
  196. // defines for teams
  197. #define TEAM_SITH 0
  198. #define TEAM_NEUTRAL 1
  199. #define TEAM_JEDI 2
  200.  
  201.  
  202. //turns
  203. enum turnTypes
  204. {
  205.   TURN_HIGH, TURN_LOW, TURN_RANDOM, TURN_SIMUL
  206. };
  207.  
  208. class BOX
  209.   {
  210.   public:
  211.     int     x, y, w, h;
  212.   };
  213.  
  214.  
  215. typedef struct gradient_struct
  216.   {
  217.     RGB    color;
  218.     float    point;
  219.   } gradient;
  220.  
  221. class WEAPON
  222.   {
  223.   public:
  224.     char        name[128];        //name of weapon
  225.     char        description[512];
  226.     int             cost;        //$ :))
  227.     int        amt;        //number of weapons in one buying package
  228.     double        mass;
  229.     double        drag;
  230.     int        radius;        // of the explosion
  231.     int        sound;
  232.     int        etime;
  233.     int        damage;        //damage power
  234.     int        eframes;
  235.     int        picpoint;       // which picture do we show in flight?
  236.     int        spread;         // number of weapons in the shot
  237.     int        delay;        // volleys etc.
  238.     int        noimpact;
  239.     int        techLevel;
  240.     int        warhead;    // Is it a warhead?
  241.     int        numSubmunitions;// Number of submunitions
  242.     int        submunition;    // The next stage
  243.     double        impartVelocity;    // Impart velocity 0.0-1.0 to subs
  244.     int        divergence;    // Total angle for submunition spread
  245.     double        spreadVariation;// Uniform or random distribution
  246.     //   0-1.0 (0=uniform, 1.0=random)
  247.     //   divergence at centre of range
  248.     double        launchSpeed;    // Speed given to submunitions
  249.     double        speedVariation;    // Uniform or random speed
  250.     //   0-1.0 (0=uniform, 1.0=random)
  251.     //   launchSpeed at centre of range
  252.     int        countdown;    // Set the countdown to this
  253.     double        countVariation;    // Uniform or random countdown
  254.     //   0-1.0 (0=uniform, 1.0=random)
  255.     //   countdown at centre of range
  256.   };
  257.  
  258. #define    MAX_ITEMVALS    10
  259. class ITEM
  260.   {
  261.   public:
  262.     char        name[128];
  263.     char        description[256];
  264.     int        cost;
  265.     int        amt;
  266.     int        selectable;
  267.     int        techLevel;
  268.     int        sound;
  269.     double        vals[MAX_ITEMVALS];
  270.   };
  271.  
  272.  
  273. enum shieldVals
  274. {
  275.   SHIELD_ENERGY,
  276.   SHIELD_REPULSION,
  277.   SHIELD_RED,
  278.   SHIELD_GREEN,
  279.   SHIELD_BLUE,
  280.   SHIELD_THICKNESS
  281. };
  282. enum selfDestructVals
  283. {
  284.   SELFD_TYPE,
  285.   SELFD_NUMBER
  286. };
  287.  
  288. enum weaponType
  289. {
  290.   SML_MIS, MED_MIS, LRG_MIS, SML_NUKE, NUKE, DTH_HEAD,
  291.   SML_SPREAD, MED_SPREAD, LRG_SPREAD, SUP_SPREAD, DTH_SPREAD, ARMAGEDDON,
  292.   CHAIN_MISSILE, CHAIN_GUN, JACK_HAMMER,
  293.   SHAPED_CHARGE, WIDE_BOY, CUTTER,
  294.   SML_ROLLER, LRG_ROLLER, DTH_ROLLER,
  295.   SMALL_MIRV,
  296.   ARMOUR_PIERCING,
  297.   CLUSTER, SUP_CLUSTER,
  298.   FUNKY_BOMB, FUNKY_DEATH,
  299.   FUNKY_BOMBLET, FUNKY_DEATHLET,
  300.   BOMBLET, SUP_BOMBLET,
  301.   BURROWER, PENETRATOR,
  302.   SML_NAPALM, MED_NAPALM, LRG_NAPALM,
  303.   NAPALM_JELLY,
  304.   DRILLER,
  305.   TREMOR, SHOCKWAVE, TECTONIC,
  306.   RIOT_BOMB, HVY_RIOT_BOMB,
  307.   RIOT_CHARGE, RIOT_BLAST,
  308.   DIRT_BALL, LRG_DIRT_BALL, SUP_DIRT_BALL,
  309.   SMALL_DIRT_SPREAD,
  310.   CLUSTER_MIRV,
  311.   PERCENT_BOMB,
  312.   REDUCER,
  313.   SML_LAZER, MED_LAZER, LRG_LAZER, 
  314.   SML_METEOR, MED_METEOR, LRG_METEOR,
  315.   SML_LIGHTNING, MED_LIGHTNING, LRG_LIGHTNING
  316. };
  317.  
  318. // #define LAST_EXPLOSIVE    NAPALM_JELLY
  319. #define LAST_EXPLOSIVE DRILLER
  320.  
  321. #define ITEM_NO_SHIELD            -1
  322. enum itemType
  323. {
  324.   ITEM_TELEPORT,
  325.   ITEM_SWAPPER,
  326.   ITEM_MASS_TELEPORT,
  327.   ITEM_FAN,
  328.   ITEM_VENGEANCE,
  329.   ITEM_DYING_WRATH,
  330.   ITEM_FATAL_FURY,
  331.   ITEM_LGT_SHIELD,
  332.   ITEM_MED_SHIELD,
  333.   ITEM_HVY_SHIELD,
  334.   ITEM_LGT_REPULSOR_SHIELD,
  335.   ITEM_MED_REPULSOR_SHIELD,
  336.   ITEM_HVY_REPULSOR_SHIELD,
  337.   ITEM_ARMOUR,
  338.   ITEM_PLASTEEL,
  339.   ITEM_INTENSITY_AMP,
  340.   ITEM_VIOLENT_FORCE,
  341.   ITEM_SLICKP,
  342.   ITEM_DIMPLEP,
  343.   ITEM_PARACHUTE,
  344.   ITEM_REPAIRKIT,
  345.   ITEM_FUEL,
  346.   ITEM_ROCKET,
  347.   ITEM_SDI
  348. };
  349.  
  350. #define SHIELD_COUNT        6
  351.  
  352. //signals
  353. #define    SIG_QUIT_GAME        -1
  354. #define SIG_OK            0
  355. #define GLOBAL_COMMAND_QUIT        -1
  356. #define GLOBAL_COMMAND_MENU        0
  357. #define GLOBAL_COMMAND_OPTIONS         1
  358. #define GLOBAL_COMMAND_PLAYERS         2
  359. #define GLOBAL_COMMAND_CREDITS         3
  360. #define    GLOBAL_COMMAND_HELP             4
  361. #define GLOBAL_COMMAND_PLAY        5
  362. #define GLOBAL_COMMAND_DEMO        6
  363. #define GLOBAL_COMMAND_NETWORK     7
  364.  
  365.  
  366. // Classes
  367. #define    ANY_CLASS        -1
  368. #define    VIRTUAL_OBJECT_CLASS    0
  369. #define    FLOATTEXT_CLASS        1
  370. #define    PHYSICAL_OBJECT_CLASS    2
  371. #define    MISSILE_CLASS        3
  372. #define    TANK_CLASS        4
  373. #define    EXPLOSION_CLASS        5
  374. #define    TELEPORT_CLASS        6
  375. #define    BEAM_CLASS        7
  376. #define    DECOR_CLASS        8
  377.  
  378.  
  379. typedef struct
  380.   {
  381.     // DATAFILE    *M, *T, *TITLE, *S, *E, *B, *L,
  382.     // *TG, *MI, *STOCK_IMAGE;
  383.  
  384.     BITMAP        *sky_gradient_strips[ALL_SKIES];
  385.     BITMAP        *land_gradient_strips[ALL_LANDS];
  386.     // BITMAP        *circle_gradient_strip;
  387.     BITMAP        *stuff_bar_gradient_strip;
  388.     BITMAP        *topbar_gradient_strip;
  389.     BITMAP        *explosion_gradient_strip;
  390.     BITMAP        *stuff_bar[2];
  391.     BITMAP        *stuff_icon_base;
  392.     // BITMAP        *circlesBG;
  393.     BITMAP        *topbar;
  394.     BITMAP        *explosions[EXPLOSIONFRAMES];
  395.     BITMAP        *flameFront[EXPLOSIONFRAMES];
  396.   } gfxDataStruct;
  397.  
  398.  
  399.  
  400. class GLOBALDATA;
  401. class ENVIRONMENT;
  402. int drawFracture (GLOBALDATA *global, ENVIRONMENT *env, BITMAP *dest, BOX *updateArea, int x, int y, int angle, int width, int segmentLength, int maxRecurse, int recurseDepth);
  403. int setSlideColumnDimensions (GLOBALDATA *global, ENVIRONMENT *env, int x, bool reset);
  404. double Noise (int x);
  405. double Noise2D (int x, int y);
  406. double interpolate (double x1, double x2, double i);
  407. double perlin1DPoint (double amplitude, double scale, double xo, double lambda, int octaves);
  408. double perlin2DPoint (double amplitude, double scale, double xo, double yo, double lambda, int octaves);
  409.  
  410. void quickChange (GLOBALDATA *global, BITMAP *target) ;
  411. void change(GLOBALDATA *global, BITMAP *target);
  412.  
  413. int checkPixelsBetweenTwoPoints (GLOBALDATA *global, ENVIRONMENT *env, double *startX, double *startY, double endX, double endY);
  414. long int calcTotalPotentialDamage (int weapNum);
  415. long int calcTotalEffectiveDamage (int weapNum);
  416.  
  417. void close_button_handler(void);
  418.  
  419. void doLaunch(GLOBALDATA *gd, ENVIRONMENT *env);
  420.  
  421. #define GENSKY_DETAILED        1
  422. #define GENSKY_DITHERGRAD    2
  423. void generate_sky (GLOBALDATA *global, BITMAP* bmp, const gradient* grad, int flags ) ;
  424.  
  425. // load all game settings
  426. bool Load_Game_Settings(GLOBALDATA *global, ENVIRONMENT *env, char *text_file) _WARNUNUSED;
  427. bool loadPlayers(GLOBALDATA *global, ENVIRONMENT *env, ifstream &ifsFile) _WARNUNUSED;
  428. // save all game settings
  429. bool Save_Game_Settings(GLOBALDATA *global, ENVIRONMENT *env, char *text_file, bool bIsSaveGame = false) _WARNUNUSED;
  430. bool savePlayers (GLOBALDATA *global, ofstream &ofsFile) _WARNUNUSED;
  431. int Save_Game_Settings_Text(GLOBALDATA *global, ENVIRONMENT *env, char *path_to_file);
  432.  
  433. // These defines are needed to identify parts of the binary save files.
  434. #define FILEPART_ENVIRON "[Environment]"
  435. #define FILEPART_GLOBALS "[Global]"
  436. #define FILEPART_PLAYERS "[Players]"
  437. #define FILEPART_ENDSECT "[EndSection]"
  438. #define FILEPART_ENDPLYR "[EndPlayer]"
  439. #define FILEPART_ENDFILE "[EndFile]"
  440.  
  441. // methods to handle loading and saving of data
  442.  
  443. /*  --- take data out of filestream -- */
  444. bool popColo(int    &aData, ifstream &ifsFile) _WARNUNUSED;
  445. bool popData(int    &aData, ifstream &ifsFile) _WARNUNUSED;
  446. bool popData(double &aData, ifstream &ifsFile) _WARNUNUSED;
  447. bool popData(char  * aArea, bool &aIsData, ifstream &ifsFile) _WARNUNUSED;
  448. //bool popData( const char  * aArea, int    &aData, ifstream &ifsFile) _WARNUNUSED;
  449. //bool popData( const char  * aArea, double &aData, ifstream &ifsFile) _WARNUNUSED;
  450. //bool popData(char * aArea, double &aData, ifstream &ifsFile) _WARNUNUSED;
  451.  
  452. /*  --- put data into filestream -- */
  453. //bool pushData(const int     aData, ofstream &ofsFile) _WARNUNUSED;
  454. //bool pushData(const double  aData, ofstream &ofsFile) _WARNUNUSED;
  455. bool pushColo(const char  * aArea, const int    aData, ofstream &ofsFile) _WARNUNUSED;
  456. bool pushData(const char  * aData, ofstream &ofsFile) _WARNUNUSED;
  457. bool pushData(const char  * aArea, const int    aData, ofstream &ofsFile) _WARNUNUSED;
  458. //bool pushName(const char  * aData, ofstream &ofsFile) _WARNUNUSED; // Special function for name saving
  459. bool pushData(const char  * aArea, const double aData, ofstream &ofsFile) _WARNUNUSED;
  460.  
  461. /*  --- seek specific data within filestream -- */
  462. //bool seekData(const int     aData, ifstream &ifsFile) _WARNUNUSED;
  463. //bool seekData(const char  * aData, ifstream &ifsFile) _WARNUNUSED;
  464.  
  465. // handle changes to global settings
  466. int Change_Settings(double old_mouse, double old_sound, double new_mouse, double new_sound, void *mouse_image);
  467.  
  468. int *Sort_Scores(GLOBALDATA *global);
  469. int Game_Client(GLOBALDATA *global, ENVIRONMENT *env, int socket_number);
  470.  
  471. #include "externs.h"
  472.  
  473. #endif
  474.  
  475.