home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / games / volume13 / dominion / part24 / dominion.h next >
C/C++ Source or Header  |  1992-02-11  |  14KB  |  395 lines

  1.   /* dominion.h -- general include file for dominion */
  2.  
  3. /*
  4.  * Copyright (C) 1990 Free Software Foundation, Inc.
  5.  * Written by the dominion project.
  6.  *
  7.  * This file is part of dominion.
  8.  *
  9.  * dominion is free software; you can redistribute it and/or
  10.  * modify it under the terms of the GNU General Public License as published
  11.  * by the Free Software Foundation; either version 1, or (at your option)
  12.  * any later version.
  13.  *
  14.  * This software is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this software; see the file COPYING.  If not, write to
  21.  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  22.  */
  23.  
  24. #include <curses.h>
  25.  
  26.   /* user-definable params */
  27. #define WORLD_FILE "world"
  28. #define REF_CARD_FILE "doc/refcard" /* basic reference card */
  29. #define INFO_FILE "doc/dominion.info" /* complete documentation */
  30. #define RACES_FILE "misc/races"
  31. #define DIPLO_FILE "dom_diplo"    /* diplomacy matrix stored here */
  32. #define INIT_DIPLO_FILE "init_diplo" /* remember initial diplomacy matrix */
  33. #define CARGO_FILE "misc/cargo" /* stores cargo exchanges */
  34. #define HANGING_SPELLS_FILE "hanging_spells" /* currently active spells */
  35.   /* any file that starts with the MAG_PREFIX is a description
  36.      of a magical order.  the name of the order follows the prefix.
  37.      a list of possible magic orders is in mag_orders.
  38.    */
  39. #define MAG_ORDERS "magic/mag_orders"
  40. #define MAG_PREFIX "magic/mag_"
  41. #define TECHNO_FILE "misc/techno_levels"
  42.  
  43. #define MAIL_DIR   "mail"    /* Which dir (in lib) to place mail */
  44. #define NEWS_DIR   "news"       /* Which dir (in lib) to keep news */
  45. #define NGDB_FILE  "groups"     /* What file in NEWS_DIR to hold the news
  46.                    groups database */
  47. #define OPT_DIR    "options"    /* Which dir (in lib) to keep options */
  48. #define TRADES_FILE "trades"    /* file where trade info is kept */
  49. #define BIDS_FILE  "bids"    /* file where bids on trades are kept */
  50. #define ARMY_TYPES_FILE "misc/army_types" /* army type descriptions are here */
  51.  /* spirit type descriptions are here */
  52. #define SPIRIT_TYPES_FILE "misc/spirit_types"
  53. #define NPC_FILE   "misc/npcs"    /* file where npc info is kept */
  54. #define MAXTRADES  100          /* maximum amount of trades on board */
  55. #define NATIONS 50        /* max # of nations; to be removed some day */
  56.  
  57.   /* now some defines for how the NPCs move */
  58. #define NPC_FIGHT TRUE        /* if this is TRUE, NPCs fight each other */
  59. #define NPC_VIEW 4        /* how far NPC armies look to move */
  60. #define NPC_SIDE (NPC_VIEW*2+3)    /* length of the side of the "looking" array */
  61. #define MAX_TYPES 100        /* maximum number of armies NPC considers */
  62. #define DIP_CHANGE 75        /* Percent chance for npc diplomacy change */
  63.  
  64.   /* tunable parameters */
  65. #define OCCUPYING_SOLDIERS 100    /* min. soldiers to occupy a sector */
  66. /*#define POP_REFINERY 100    /* min. population for a refinery to work */
  67. #define REFINERY_FACT (12.0/100.0) /* percent added by an active refinery */
  68. #define FOOD_PROD 4        /* production of food/farmer : tons */
  69. #define EAT 1.3            /* how much a person eats in 1 thon : tons */
  70. #define SOLD_EAT_FACTOR 1.2    /* multiplies the eat rate */
  71.  
  72. #define CARAVAN_CAPACITY 250    /* how many civilians on 1 caravan unit */
  73.  
  74. #define JEWEL_WEIGHT 0.01    /* the next four are in relation to one */
  75. #define MONEY_WEIGHT 0.01    /* person's weight (i.e. jewels weigh */
  76. #define METAL_WEIGHT 0.1    /* 1/100th of a person) */
  77. #define FOOD_WEIGHT  0.05
  78.  
  79. #define DISBAND_RETURN (0.5)    /* what fraction metal is returned w/disband */
  80.  
  81. /* how much do money/metal/jewels affect R&D */
  82. #define TECH_MONEY_FACTOR 1.0/10.0
  83. #define TECH_METAL_FACTOR 1.0/40.0
  84. #define MAG_MONEY_FACTOR 1.0/5.0
  85. #define MAG_JEWEL_FACTOR 1.0/200.0
  86. #define SPY_MONEY_FACTOR 1.0/200.0
  87. #define SPY_SECRECY_FACTOR 1.0/2000.0
  88.  
  89.   /* these parameters determine how far you can see */
  90. #define LAND_SIGHT 3        /* how far you see from an owned sector */
  91. #define WATER_SIGHT 2        /* ...             across water */
  92. #define ARMY_SIGHT 2        /* ...                  an army */
  93.  
  94.   /* end of user-defined parameters */
  95.  
  96. #define NOT_NPC 0        /* values of the Snation.npc_flag */
  97. #define NPC_NOMAIL 1        /* NPC that does not get mail */
  98. #define NPC_MAIL 2        /* NPC that gets mail */
  99.   /* now a macro that allows us to quickly see if an NPC should get mail */
  100. #define gets_mail(np) ((np)->npc_flag == NOT_NPC || (np)->npc_flag == NPC_MAIL)
  101.  
  102. #define NAMELEN 20        /* length of most names */
  103. #define PASSLEN 15
  104. #define PATHLEN 200        /* length of directory paths */
  105.  
  106. #ifdef CURSES
  107.   typedef char Symbol;        /* just a char for curses */
  108. #endif
  109.     /* should typedef mark for X and other windows... */
  110.  
  111. struct pt {
  112.   int x, y;
  113. };
  114. typedef struct pt Pt;
  115.  
  116.   /* this structure identifies an army by its owner and id.
  117.      it is used in the list of armies present in each sector.
  118.    */
  119. struct armyid {
  120.   int owner, id;
  121.   struct armyid *next;
  122. };
  123.  
  124.   /* defines a cargo carried by some moving object (caravan or navy) */
  125. struct scargo {
  126.   int money, metal, jewels, food, people, army;
  127.   Pt title;
  128. };
  129.  
  130. typedef struct scargo Scargo;
  131.  
  132. struct sarmy {
  133.   char type[NAMELEN],        /* string (i.e. "Infantry","ent")   */
  134.        name[NAMELEN];        /* the army's name */
  135.   int  n_soldiers,        /* number of soldiers in the army   */
  136.        status,            /* ATACK|DEFEND|OCCUPY|...          */
  137.        id,            /* army number                      */
  138.        owner,            /* nation number of army owner      */
  139.        mvpts,            /* move points                      */
  140.        mvratio;            /* fraction of movement used        */
  141.        long flags;        /* bitmap, fields defined in army.h */
  142.   Pt   pos;            /* where the army is                */
  143.   int  sp_bonus;          /* extra bonus, on top of basic nation bonus */
  144.     /* the maintainance costs are all per-soldier, except the
  145.        spell points, which apply to the entire army.
  146.      */
  147.   int  money_maint, metal_maint, jewel_maint, spell_pts_maint;
  148.   Scargo cargo;
  149.   struct sarmy *next;        /* pointer to next army             */
  150. };
  151. typedef struct sarmy Sarmy;
  152.  
  153. struct pt_list {
  154.   Pt pt;            /* list of owned sectors */
  155.   struct pt_list *next;
  156. };
  157.  
  158.   /* this contains the basic properties of a race, which are read in
  159.      from the "races" file.  this does NOT include other attributes
  160.      gained later by a nation.
  161.    */
  162. struct srace {
  163.   char name[NAMELEN];
  164.   char mark;            /* to represent them on map */
  165.   int strength, repro, mortality, intel, speed, stealth;
  166.   int pref_alt, pref_terrain, pref_climate;
  167.   int mag_apt, farming, mining;
  168. };
  169. typedef struct srace Srace;
  170.  
  171. struct race_list {
  172.   Srace race;
  173.   struct race_list *next;
  174. };
  175.  
  176. /* This structures stores a nations options */
  177. struct soptions {
  178.   int expert_mode;
  179.   int civ_movemode;
  180.   char *mail_forward;
  181.   char *mail_reader;
  182. };
  183. typedef struct soptions Soptions;
  184.  
  185. struct snation {
  186.   int id;            /* for quick search */
  187.   char name[NAMELEN];
  188.   char leader[NAMELEN];
  189.   char passwd[PASSLEN];        /* encrypted, of course */
  190.   Pt capital;            /* coordinates of main city */
  191.   Srace race;
  192.   Symbol mark;            /* nation mark */
  193.     /* parameters that influence the economy */
  194.   int taxes, taxtype, charity, money, jewels, metal, food, n_sects,
  195.       tech_r_d, tech_r_d_metal, mag_r_d, mag_r_d_jewels, spy_r_d,
  196.       npc_flag, npc_agg, npc_exp, npc_iso; /* NPC performance values */
  197.   
  198.   char mag_order[NAMELEN];    /* which magical order they belong to */
  199.   int tech_skill, mag_skill, farm_skill, mine_skill; /* skills */
  200.   int spell_pts;        /* available spell points */
  201.     /* military stuff */
  202.   int attack, defense, spy, secrecy;
  203.   int n_armies;
  204.   Sarmy *armies;        /* linked list of armies */
  205.   struct pt_list *ptlist;    /* list of owned points */
  206.   int cur_mag_r_d, cur_mag_r_d_jewels;
  207.   int cur_tech_r_d, cur_tech_r_d_metal;
  208.   int cur_spy_r_d;
  209.   Soptions *opts;
  210. };
  211. typedef struct snation Snation;
  212.  
  213. #define NORMAL_MAP  0        /* map_style: non-compact map display */
  214. #define COMPACT_MAP 1        /* map_style: compact map display */
  215. #define DESIGNATION 0        /* display: show sector designation */
  216. #define NATION_MARK 1        /* display: show nation mark */
  217. #define SOIL        2        /* display: show vegetation */
  218. #define METAL        3        /* etc... */
  219. #define JEWELS      4
  220. #define ALTITUDE    5
  221. #define CLIMATE     6
  222. #define POPULATION  7
  223. #define MOVECOST    8
  224. #define TERRAIN     9
  225. #define ARMY_MOVECOST 10
  226.  
  227. #define H_NONE        0        /*            don't highlight */
  228. #define H_OWNED       1        /* highlight: if you own sector */
  229. #define H_ARMIES      2        /*            if there are armies */
  230. #define H_YOUR_ARMIES 3        /*            if they are your armies */
  231. #define H_OTHER_ARMIES 4    /*            if they are not yours */
  232. #define H_MOVE_LEFT   5        /*            if armies can move */
  233. #define H_UNEMP       6        /*            if there are civ's unemployed */
  234. #define H_HOSTILE     7        /*            if the sector is hostile */
  235.  
  236.   /* the following prepare the ground for the exec list array */
  237. #define N_EXEC_ARGS 12        /* for now, exec has 8 args */
  238. #define N_EXECS     2        /* # of exec commands before we save to file */
  239. #define EXECLEN     100        /* max length of exec string */
  240.  
  241.   /* spell structure, used for describing a spell, and also
  242.      for giving each user a list of available spells
  243.    */
  244. struct sspell {
  245.   char name[NAMELEN];        /* name of spell */
  246.   int cost, duration;
  247. /*  int (*spell_func)();          /* pointer to function that does the work */
  248.   struct sspell *next;        /* for a linked list */
  249. };
  250. typedef struct sspell Sspell;
  251.  
  252. struct sh_spell {
  253.   int nat_id;
  254.   char name[NAMELEN];
  255.   int thons_left;
  256.   int n_lines;
  257.   char **lines;
  258.   struct sh_spell *next;
  259. };
  260. typedef struct sh_spell Sh_spell;
  261.  
  262.   /* avail army structure, used for describing available armies */
  263. struct savail_army {
  264.   char type[NAMELEN];        /* type of army */
  265.   struct savail_army *next;    /* for a linked list */
  266. };
  267. typedef struct savail_army Savail_army;
  268.  
  269.   /* spirit structure, used for describing available spirits */
  270. struct sspirit {
  271.   char type[NAMELEN];        /* type of spirit */
  272.     /* cost can be different for different
  273.        mag orders, even if it is the same
  274.        spirit
  275.      */
  276.   int cost;
  277.   struct sspirit *next;        /* for a linked list */
  278. };
  279. typedef struct sspirit Sspirit;
  280.  
  281. /* the following structure is the matrix used for diplomacy */
  282. /* for more info, see diplomacy.c */
  283. struct sdiplo {
  284.   int self_id, neighbor_id;  /* player, and his neighbor */
  285.   int status;                /* status from player to neighbor */
  286. };
  287. typedef struct sdiplo Sdiplo;
  288.  
  289.   /* this structure describes run-time information for the user
  290.      currently playing.  It is contains their nation struct.
  291.    */
  292. struct suser {
  293.   int id;            /* nation id */
  294.   Snation *np;            /* describe her/his nation */
  295.   Pt cursor, center;        /* current sector and middle of screen */
  296.   char help_char;        /* char used to get help */
  297.     /* display styles */
  298.   int map_style, display, highlight, underwater;
  299.   int **visible_sectors;    /* which sectors can the user see? */
  300.   Sdiplo **diplo_matrix;    /* fast-access diplo matrix */
  301.   int n_execs;            /* how many exec lines already there */
  302.   char exec_lines[N_EXECS][EXECLEN];
  303.   int current_army;        /* army that has been picked */
  304.   int just_moved;        /* has the user just moved? */
  305.     /* how much did we have at the start of the turn */
  306.   int init_money, init_metal, init_jewels, init_food;
  307. /*should have other run-time info, taken from world parameters, like date*/
  308.     /* available types armies to that user */
  309.   Savail_army *avail_armies;
  310.     /* this is read in at the beginning of a session, and has a
  311.        list of spells available to this user.  same thing for spirits.
  312.      */
  313.   Sspell *spell_list;
  314.   Sh_spell *h_spells;
  315.   Sspirit *spirit_list;
  316.     /* this is a funny global variable, needed for
  317.        consistency in drawing the army list
  318.      */
  319.   int last_n_armies;
  320.     /* number of army/spirit types there are */
  321.   int n_army_types, n_spirit_types;
  322.     /* now some user-configurable options */
  323.   int xmode, show_sect_win;
  324. };
  325. typedef struct suser Suser;
  326.  
  327. struct ssector {
  328.   Pt loc;        /* x, y coords */
  329.     /* if terrain is water, some of these don't apply */
  330.         /* a lot must be re-considered here */
  331.   int terrain, altitude, climate, designation, soil, metal, jewels;
  332.   int defense;            /* defense bonus in sector */
  333.   int roads;            /* how easy to travel */
  334.   int owner;            /* index of sector's owner */
  335.   int n_people;            /* civilians in that sector */
  336.   long flags;            /* sector flags */
  337.   char name[NAMELEN];        /* you can name a sector!!! */
  338.     /* the sector has a list of army id's, where the owner and army
  339.        id are stored, so the army can be obtained from the nation's
  340.        army list.
  341.      */
  342.   struct armyid *alist;
  343. };
  344. typedef struct ssector Ssector;
  345.  
  346.   /* world topology type */
  347. #define TORUS 0
  348.  
  349. /* extern Pt wrap();        /* this func. determines topology */
  350.  
  351. struct sworld {
  352.   int turn;
  353.   int xmax, ymax;
  354.   Ssector **map;
  355.   struct {
  356.     int topology;        /* topology type */
  357.     int pwater;            /* % water in world */
  358.     double metal_avg, jewel_avg, soil_avg; /* averages for the world */
  359.   } geo;            /* geography */
  360.   int n_nations;        /* how many nations are actually there? */
  361.   Snation nations[NATIONS];
  362. };
  363. typedef struct sworld Sworld;
  364.  
  365. struct argument {
  366.   int type;
  367.   union {
  368.     int num;
  369.     char str[20];
  370.   } data;
  371. };
  372.  
  373. #define NUM 0    /* values for -type- field of above structure */
  374. #define TXT 1
  375.  
  376. #define NUMCMDS 200
  377.  
  378.   /* declare malloc() as returning a void *.  Don't even
  379.      try including malloc.h, since it is not there on very
  380.      many systems.  If you don't have type "void", then
  381.      you can make it be "char *malloc()".
  382.    */
  383. void *malloc();
  384.  
  385. #ifndef max
  386. #define max(a,b) ((a)<(b) ? (b) : (a))
  387. #endif
  388. #ifndef min
  389. #define min(a,b) ((a)>(b) ? (b) : (a))
  390. #endif
  391.  
  392. #ifdef PMAX
  393. #define mvwprintw mymvwprintw
  394. #endif
  395.