home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Games / Xconq 7.1.0 / src / xconq-7.1.0 / kernel / side.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-07-07  |  21.7 KB  |  521 lines  |  [TEXT/R*ch]

  1. /* Definitions for sides in Xconq.
  2.    Copyright (C) 1987, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996
  3.    Stanley T. Shebs.
  4.  
  5. Xconq is free software; you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation; either version 2, or (at your option)
  8. any later version.  See the file COPYING.  */
  9.  
  10. /* A side mask is a bit vector, where the bit position corresponds to the
  11.    side number. */
  12.  
  13. #if MAXSIDES < 31
  14. typedef int SideMask;
  15. #define NOSIDES (0)
  16. #define ALLSIDES (-1)
  17. #define add_side_to_set(side,mask) ((mask) | (1 << ((side) ? (side)->id : 0)))
  18. #define side_in_set(side,mask) ((mask) & (1 << ((side) ? (side)->id : 0)))
  19. #else
  20. not implemented yet
  21. #endif /* MAXSIDES */
  22.  
  23. /* Doctrine is policy info that units and players use to help decide
  24.    behavior. */
  25.  
  26. typedef struct a_doctrine {
  27.     short id;            /* a unique id */
  28.     char *name;            /* a distinguishing name for the doctrine */
  29.     short everaskside;        /* should this unit ever ask for orders? */
  30.     short *construction_run;
  31.     short locked;
  32.     struct a_doctrine *next;
  33. } Doctrine;
  34.  
  35. typedef struct a_standing_order {
  36.     char *types;        /* unit types to which order applies */
  37.     char etype;            /* type of event to trigger on */
  38.     int a1, a2, a3;        /* parameters to test (x, y, etc) */
  39.     struct a_task *task;    /* task to perform */
  40.     struct a_standing_order *next;
  41. } StandingOrder;
  42.  
  43. /* Each Xconq player is a "side" - more or less one country.  A side may or
  44.    may not be played by a person, and may or may not have a display attached
  45.    to it.  Each side has a different view of the world.  */
  46.  
  47. typedef struct a_side {
  48.     int id;            /* a unique id */
  49.     Obj *symbol;        /* a symbol bound to side's id */
  50.     /* Name-related slots. */
  51.     char *name;            /* proper name of this side */
  52.     char *longname;        /* the long name of this side */
  53.     char *shortname;        /* the long name of this side */
  54.     char *noun;            /* the noun describing a member of this side */
  55.     char *pluralnoun;        /* the noun describing several members */
  56.     char *adjective;        /* adjective for members of this side */
  57.     char *colorscheme;        /* names of the side's characteristic colors */
  58.     char *emblemname;        /* name of the side's emblem */
  59.     char **unitnamers;
  60.     Obj *featurenamers;
  61.     short nameslocked;        /* true if names may not be changed by player */
  62.     char *sideclass;        /* general type or class description */
  63.     /* Relationships with other sides, types, etc. */
  64.     struct a_unit *self_unit;    /* unit that embodies side */
  65.     short self_unit_id;        /* id of unit that embodies side */
  66.     struct a_side *controlled_by; /* side controlling this one */
  67.     short controlled_by_id;    /* id of controlling side */
  68.     SideMask knows_about;    /* true if side knows about another side */
  69.     short *trusts;        /* true if side trusts another side */
  70.     short *trades;
  71.     short *startwith;        /* how many units of each type at start of game */
  72.     short *counts;        /* array of numbers for identifying units */
  73.     short *tech;        /* tech level for each unit type */
  74.     short *inittech;        /* tech level at beginning of turn */
  75.     Doctrine *default_doctrine;    /* fallback doctrine */
  76.     Doctrine **udoctrine;    /* array of per-unit-type doctrines */
  77.     short doctrines_locked;
  78.     StandingOrder *orders;    /* list of standing orders for the side */
  79.     StandingOrder *last_order;
  80.     char *uorders;        /* bit vector of types that have orders */
  81.     /* View layers. */
  82.     char *terrview;        /* ptr to view of terrain */
  83.     char **auxterrview;        /* ptr to view of aux terrain */
  84.     short *terrviewdate;    /* ptr to dates of view of terrain */
  85.     short **auxterrviewdate;    /* ptr to dates of view of aux terrain */
  86.     short *unitview;        /* ptr to view of units */          
  87.     short *unitviewdate;    /* ptr to dates of view of units */          
  88.     short **materialview;    /* ptr to view of cell materials */
  89.     short **materialviewdate;    /* ptr to dates of view of cell materials */
  90.     short *tempview;        /* ptr to view of temperature */
  91.     short *tempviewdate;    /* ptr to dates of view of temperature */
  92.     short *cloudview;        /* ptr to view of clouds */
  93.     short *cloudbottomview;    /* ptr to view of cloud bottoms */
  94.     short *cloudheightview;    /* ptr to view of cloud heights */
  95.     short *cloudviewdate;    /* ptr to dates of view of clouds */
  96.     short *windview;        /* ptr to view of winds */
  97.     short *windviewdate;    /* ptr to dates of view of winds */
  98.     /* Progress and status within game. */
  99.     short ingame;        /* true if side participating in game */
  100.     short everingame;        /* true if side ever participated in a turn */
  101.     short priority;        /* overall action priority of this side */
  102.     short status;        /* -1/0/1 for lost/draw/won */
  103.     short *scores;        /* an array of scores managed by scorekeepers */
  104.     Obj *rawscores;        /* score data as read from file */
  105.     short willingtodraw;    /* will this side go along with quitters? */
  106.     short autofinish;        /* turn done when all units acted */
  107.     short finishedturn;        /* true when side wants to go to next turn */
  108.     short turntimeused;        /* seconds used this turn */
  109.     short totaltimeused;    /* total seconds used */
  110.     short timeouts;        /* total timeouts used */
  111.     short timeoutsused;        /* total timeouts used */
  112.     /* Setup. */
  113.     short advantage;        /* actual advantage */
  114.     short minadvantage;        /* max advantage requestable during init */
  115.     short maxadvantage;        /* min of same */
  116.     Obj *instructions;        /* notes to player about the game */
  117.     /* Other. */
  118.     short last_notice_date;    /* last turn during which notice was posted */
  119.     short realtimeout;        /* how long to wait before just going ahead */
  120.     long startbeeptime;        /* after this time, beep to signal next turn */
  121.     short *gaincounts;
  122.     short *losscounts;
  123.     long **atkstats;
  124.     long **hitstats;
  125.     /* Pointers to the other major structures of a side. */
  126.     struct a_player *player;    /* pointer to data about the player */
  127.     short playerid;        /* numeric id of the player */
  128.     struct a_ui *ui;        /* pointer to all the user interface data */
  129.     Obj *uidata;        /* readable/writable form of user interface state */
  130.     short aitype;        /* type of AI making decisions */        
  131.     struct a_ai *ai;        /* pointer to the AI making decisions */
  132.     Obj *aidata;        /* readable/writable form of AI state */
  133.     /* Misc working slots, never saved. */
  134.     short startx, starty;    /* approx center of side's "country" */
  135.     short busy;            /* true when side state not saveable */
  136.     short finalradius;
  137.     short willingtosave;    /* will this side go along with saving the game? */
  138.     short see_all;        /* true if this side sees everything */
  139.     short may_set_see_all;    /* true if player can ask to see everything */
  140. #ifdef DESIGNERS
  141.     short designer;        /* true if side is doing scenario design */
  142. #endif /* DESIGNERS */
  143.     /* Various caches, should be possible to recalc as needed. */
  144.     short *uavail;        /* vector of which types allowed on this side */
  145.     struct a_unit *unithead;    /* points to list of all units on this side */
  146.     struct a_unitvector *actionvector;  /* vector of acting units */
  147.     short numwaiting;        /* number of units waiting to get orders */
  148.     short *coverage;        /* indicates how many looking at this cell */
  149.     short *alt_coverage;    /* indicates minimum altitude visible */
  150.     short *numunits;        /* number of units the side has */
  151.     short *numlive;        /* number of live & in-play units the side has */
  152.     short numacting;        /* number of units that can do things */
  153.     short numfinished;        /* number of units that have finished acting */
  154.     long turnstarttime;        /* real time at start of turn */
  155.     long lasttime;        /* when clock started counting down again */
  156.     long turnfinishtime;    /* real time when we've finished interacting */
  157.     long laststarttime;        /* ? */
  158.     int point_value_cache;
  159.     int point_value_valid;
  160.     /* Links. */
  161.     struct a_side *next;    /* pointer to next in list */
  162. } Side;
  163.  
  164. /* Some convenient macros. */
  165.  
  166. #define side_in_play(side) (side == NULL || side->ingame)
  167.  
  168. /* Iteration over all sides. */
  169.  
  170. /* The first "side" is just the independent units, don't usually look at it. */
  171.  
  172. #define for_all_sides(v) for (v = sidelist->next; v != NULL; v = v->next)
  173.  
  174. /* But sometimes we need to treat independents if they were on a side. */
  175.  
  176. #define for_all_sides_plus_indep(v)  \
  177.   for (v = sidelist; v != NULL; v = v->next)
  178.  
  179. /* Macros for accessing and setting a side's view data.  In general, interfaces
  180.    should go through these macros instead of accessing the world's state
  181.    directly. */
  182.  
  183. #define terrain_view(s,x,y)  \
  184.   ((s)->terrview ? aref((s)->terrview, x, y) : buildtview(terrain_at(x, y)))
  185.  
  186. #define set_terrain_view(s,x,y,v)  \
  187.   ((s)->terrview ? aset((s)->terrview, x, y, v) : 0)
  188.  
  189. #define buildtview(t) ((t) + 1)
  190.  
  191. #define vterrain(v) ((v) - 1)
  192.  
  193. #define UNSEEN (0)
  194.  
  195. #define terrain_view_date(s,x,y)  \
  196.   ((s)->terrviewdate ? aref((s)->terrviewdate, x, y) : (-1))
  197.  
  198. #define set_terrain_view_date(s,x,y,v)  \
  199.   ((s)->terrviewdate ? aset((s)->terrviewdate, x, y, v) : 0)
  200.  
  201. #define aux_terrain_view(s,x,y,t)  \
  202.   (((s)->auxterrview && (s)->auxterrview[t]) ? aref((s)->auxterrview[t], x, y) : (aux_terrain_defined(t) ? aux_terrain_at(x, y, t) : 0))
  203.  
  204. #define set_aux_terrain_view(s,x,y,t,v)  \
  205.   (((s)->auxterrview && (s)->auxterrview[t]) ? aset((s)->auxterrview[t], x, y, v) : 0)
  206.  
  207. #define aux_terrain_view_date(s,x,y,t)  \
  208.   (((s)->auxterrviewdate && (s)->auxterrviewdate[t]) ? aref((s)->auxterrviewdate[t], x, y) : (-1))
  209.  
  210. #define set_aux_terrain_view_date(s,x,y,t,v)  \
  211.   (((s)->auxterrviewdate && (s)->auxterrviewdate[t]) ? aset((s)->auxterrviewdate[t], x, y, v) : 0)
  212.  
  213. /* Basic view is encoded as hhhhsssssuuuuuuu + 1, where the u's are the unit
  214.    type, s's are the side number, and h's are approx hp/size.  0 == empty. */
  215.    
  216. #define unit_view(s,x,y)  \
  217.   ((s)->unitview ? aref((s)->unitview, x, y) : EMPTY)
  218.  
  219. #define set_unit_view(s,x,y,v)  \
  220.   ((s)->unitview ? aset((s)->unitview, x, y, v) : 0)
  221.  
  222. #define builduview(s,u) (((((s) & 0x1f) << 7) | ((u) & 0x7f)) + 1)
  223.  
  224. #define vside(v) ((((v) - 1) >> 7) & 0x1f)
  225.  
  226. #define vtype(v) (((v) - 1) & 0x7f)
  227.  
  228. #define builduviewhp(s,u,hp)  \
  229.   (((((hp) & 0x0f) << 12) | (((s) & 0x1f) << 7) | ((u) & 0x7f)) + 1)
  230.  
  231. #define vhp(v) ((((v) - 1) >> 12) & 0x0f)
  232.  
  233. #define EMPTY (0)
  234.  
  235. #define appears_empty(v) ((v) == EMPTY)
  236.  
  237. #define vside_indep(v) (vside(v) == 0)
  238.  
  239. #define unit_view_date(s,x,y)  \
  240.   ((s)->unitviewdate ? aref((s)->unitviewdate, x, y) : (-1))
  241.  
  242. #define set_unit_view_date(s,x,y,v)  \
  243.   ((s)->unitviewdate ? aset((s)->unitviewdate, x, y, v) : 0)
  244.  
  245. /* Manipulation of view of cell materials. */
  246.  
  247. #define material_view(s,x,y,m)  \
  248.   (((s)->materialview && (s)->materialview[m]) ? aref((s)->materialview[m], x, y) : (cell_material_defined(m) ? material_at(x, y, m) : 0))
  249.  
  250. #define set_material_view(s,x,y,m,v)  \
  251.   (((s)->materialview && (s)->materialview[m]) ? aset((s)->materialview[m], x, y, v) : 0)
  252.  
  253. #define material_view_date(s,x,y,m)  \
  254.   (((s)->materialviewdate && (s)->materialviewdate[m]) ? aref((s)->materialviewdate[m], x, y) : (-1))
  255.  
  256. #define set_material_view_date(s,x,y,m,v)  \
  257.   (((s)->materialviewdate && (s)->materialviewdate[m]) ? aset((s)->materialviewdate[m], x, y, v) : 0)
  258.  
  259. /* Manipulation of view of weather. */
  260.  
  261. #define temperature_view(s,x,y)  \
  262.   ((s)->tempview ? aref((s)->tempview, x, y) : (temperatures_defined() ? temperature_at(x, y) : 0))
  263.  
  264. #define set_temperature_view(s,x,y,v)  \
  265.   ((s)->tempview ? aset((s)->tempview, x, y, v) : 0)
  266.  
  267. #define temperature_view_date(s,x,y)  \
  268.   ((s)->tempviewdate ? aref((s)->tempviewdate, x, y) : (-1))
  269.  
  270. #define set_temperature_view_date(s,x,y,v)  \
  271.   ((s)->tempviewdate ? aset((s)->tempviewdate, x, y, v) : 0)
  272.  
  273. #define cloud_view(s,x,y)  \
  274.   ((s)->cloudview ? aref((s)->cloudview, x, y) : (clouds_defined() ? raw_cloud_at(x, y) : 0))
  275.  
  276. #define set_cloud_view(s,x,y,v)  \
  277.   ((s)->cloudview ? aset((s)->cloudview, x, y, v) : 0)
  278.  
  279. #define cloud_view_date(s,x,y)  \
  280.   ((s)->cloudviewdate ? aref((s)->cloudviewdate, x, y) : (-1))
  281.  
  282. #define set_cloud_view_date(s,x,y,v)  \
  283.   ((s)->cloudviewdate ? aset((s)->cloudviewdate, x, y, v) : 0)
  284.  
  285. #define cloud_bottom_view(s,x,y)  \
  286.   ((s)->cloudbottomview ? aref((s)->cloudbottomview, x, y) : (cloud_bottoms_defined() ? raw_cloud_bottom_at(x, y) : 0))
  287.  
  288. #define set_cloud_bottom_view(s,x,y,v)  \
  289.   ((s)->cloudbottomview ? aset((s)->cloudbottomview, x, y, v) : 0)
  290.  
  291. #define cloud_bottom_view_date(s,x,y)  \
  292.   ((s)->cloudbottomviewdate ? aref((s)->cloudbottomviewdate, x, y) : (-1))
  293.  
  294. #define set_cloud_bottom_view_date(s,x,y,v)  \
  295.   ((s)->cloudbottomviewdate ? aset((s)->cloudbottomviewdate, x, y, v) : 0)
  296.  
  297. #define cloud_height_view(s,x,y)  \
  298.   ((s)->cloudheightview ? aref((s)->cloudheightview, x, y) : (cloud_heights_defined() ? raw_cloud_height_at(x, y) : 0))
  299.  
  300. #define set_cloud_height_view(s,x,y,v)  \
  301.   ((s)->cloudheightview ? aset((s)->cloudheightview, x, y, v) : 0)
  302.  
  303. #define cloud_height_view_date(s,x,y)  \
  304.   ((s)->cloudheightviewdate ? aref((s)->cloudheightviewdate, x, y) : (-1))
  305.  
  306. #define set_cloud_height_view_date(s,x,y,v)  \
  307.   ((s)->cloudheightviewdate ? aset((s)->cloudheightviewdate, x, y, v) : 0)
  308.  
  309. #define wind_view(s,x,y)  \
  310.   ((s)->windview ? aref((s)->windview, x, y) : (winds_defined() ? raw_wind_at(x, y) : CALM))
  311.  
  312. #define set_wind_view(s,x,y,v)  \
  313.   ((s)->windview ? aset((s)->windview, x, y, v) : 0)
  314.  
  315. #define wind_view_date(s,x,y)  \
  316.   ((s)->windviewdate ? aref((s)->windviewdate, x, y) : (-1))
  317.  
  318. #define set_wind_view_date(s,x,y,v)  \
  319.   ((s)->windviewdate ? aset((s)->windviewdate, x, y, v) : 0)
  320.  
  321. /* Basic manipulation of vision coverage cache layer. */
  322.  
  323. #define cover(s,x,y)  \
  324.   ((s)->coverage ? aref((s)->coverage, x, y) : 0)
  325.  
  326. #define set_cover(s,x,y,v)  \
  327.   ((s)->coverage ? aset((s)->coverage, x, y, v) : 0)
  328.  
  329. #define add_cover(s,x,y,v)  \
  330.   ((s)->coverage ? (aref((s)->coverage, x, y) += (v)) : 0)
  331.  
  332. #define alt_cover(s,x,y)  \
  333.   ((s)->alt_coverage ? aref((s)->alt_coverage, x, y) : 0)
  334.  
  335. #define set_alt_cover(s,x,y,v)  \
  336.   ((s)->alt_coverage ? aset((s)->alt_coverage, x, y, v) : 0)
  337.  
  338. /* Tests of who/what runs the side. */
  339.  
  340. #define side_wants_display(s) ((s)->player && (s)->player->displayname)
  341.  
  342. #define side_wants_ai(s) ((s)->player && (s)->player->aitypename)
  343.  
  344. #define side_has_display(s) (((s)->ui) != NULL)
  345.  
  346. #define side_has_ai(s) (((s)->ai) != NULL)
  347.  
  348. #define side_lost(s) ((s) != NULL && !(s)->ingame && (s)->status < 0)
  349.  
  350. #define side_drew(s) ((s) != NULL && !(s)->ingame && (s)->status == 0)
  351.  
  352. #define side_won(s) ((s) != NULL && !(s)->ingame && (s)->status > 0)
  353.  
  354. #define side_gain_count(s,u,r) (((s)->gaincounts)[num_gain_reasons*(u)+(r)])
  355.  
  356. #define side_loss_count(s,u,r) (((s)->losscounts)[num_loss_reasons*(u)+(r)])
  357.  
  358. #define side_atkstats(s,a,d) ((s)->atkstats[a] ? ((s)->atkstats[a])[d] : 0)
  359.  
  360. #define side_hitstats(s,a,d) ((s)->hitstats[a] ? ((s)->hitstats[a])[d] : 0)
  361.  
  362. #define terrain_visible(side, x, y)  \
  363.   (all_see_all || (side)->see_all || (terrain_view((side), wrapx(x), (y)) != UNSEEN))
  364.  
  365. #define borders_visible(side, x, y, d)  \
  366.   (all_see_all || (side)->see_all || seen_border((side), (x), (y), (d)))
  367.  
  368. #define units_visible(side, x, y)  \
  369.   (all_see_all || (side)->see_all || (cover((side), wrapx(x), (y)) >= 1))
  370.  
  371. /* Side-related variables. */
  372.  
  373. extern Side *sidelist;
  374. extern Side *lastside;
  375. extern Side *indepside;
  376. extern Side *curside;
  377. extern Side *tmpside;
  378.  
  379. extern int numsides;
  380. extern int numplayers;
  381. #ifdef DESIGNERS
  382. extern int numdesigners;
  383. #endif
  384.  
  385. extern int all_see_all;
  386. extern int all_see_all_terrain;
  387.  
  388. /* Definition of an agreement between sides. */
  389.  
  390. typedef struct a_agreement {
  391.     short id;                 /* a unique id */
  392.     char *typename;           /* a descriptive general name */
  393.     char *name;               /* the specific name of this agreement */
  394.     int state;                /* is this agreement in effect */
  395.     SideMask drafters;        /* sides drafting the agreement */
  396.     SideMask proposers;       /* sides ready to propose the draft agreement */
  397.     SideMask signers;         /* proposed list of signers */
  398.     SideMask willing;         /* sides that have indicated agreement so far */
  399.     SideMask knownto;         /* sides that are aware of the signed agreement */
  400.     struct a_obj *terms;      /* list of specific terms */
  401.     short enforcement;        /* true if program should attempt to enforce terms */
  402.     struct a_agreement *next;
  403. } Agreement;
  404.  
  405. enum {
  406.     draft,                    /* agreement is circulating among drafters */
  407.     proposed,                 /* agreement is proposed to prospective signers */
  408.     in_force,                 /* agreement is active */
  409.     moribund                  /* agreement has expired */
  410. };
  411.  
  412. /* Iteration over all agreements in the game. */
  413.  
  414. #define for_all_agreements(v) for (v = agreementlist; v != NULL; v = v->next)
  415.  
  416. #define any_agreements() (agreementlist != NULL)
  417.  
  418. #define side_signed_agreement(side,ag) ((ag)->signers[side_n(side)])
  419.  
  420. #define side_willing_agreement(side,ag) ((ag)->willing[side_n(side)])
  421.  
  422. #define side_knows_about_agreement(side,ag) ((ag)->knownto[side_n(side)])
  423.  
  424. /* Agreement-related variables. */
  425.  
  426. extern int numagreements;
  427.  
  428. extern Agreement *agreementlist;
  429. extern Agreement *lastagreement;
  430.  
  431. /* Note: Can't use the "Unit" typedef below, must use "struct a_unit". */
  432.  
  433. extern void init_sides PARAMS ((void));
  434. extern Side *create_side PARAMS ((void));
  435. extern void init_side_unithead PARAMS ((Side *side));
  436. extern int side_has_units PARAMS ((Side *side));
  437. extern void init_doctrine PARAMS ((Side *side));
  438. extern void init_self_unit PARAMS ((Side *side));
  439. extern int init_view PARAMS ((Side *side));
  440. extern void calc_start_xy PARAMS ((Side *side));
  441. extern char *side_name PARAMS ((Side *side));
  442. extern char *side_adjective PARAMS ((Side *side));
  443. extern int side_number PARAMS ((Side *side));
  444. extern Side *side_n PARAMS ((int n));
  445. extern Side *find_side_by_name PARAMS ((char *str));
  446. extern int side_controls_side PARAMS ((Side *side, Side *side2));
  447. extern int side_controls_unit PARAMS ((Side *side, struct a_unit *unit));
  448. extern int side_sees_unit PARAMS ((Side *side, struct a_unit *unit));
  449. extern int side_sees_image PARAMS ((Side *side, struct a_unit *unit));
  450. extern int num_units_in_play PARAMS ((Side *side, int u));
  451. extern int num_units_incomplete PARAMS ((Side *side, int u));
  452. extern struct a_unit *find_next_unit PARAMS ((Side *side, struct a_unit *prevunit));
  453. extern struct a_unit *find_prev_unit PARAMS ((Side *side, struct a_unit *nextunit));
  454. extern struct a_unit *find_next_actor PARAMS ((Side *side, struct a_unit *prevunit));
  455. extern struct a_unit *find_prev_actor PARAMS ((Side *side, struct a_unit *nextunit));
  456. extern struct a_unit *find_next_mover PARAMS ((Side *side, struct a_unit *prevunit));
  457. extern struct a_unit *find_prev_mover PARAMS ((Side *side, struct a_unit *nextunit));
  458. extern struct a_unit *find_next_awake_mover PARAMS ((Side *side, struct a_unit *prevunit));
  459. extern struct a_unit *find_prev_awake_mover PARAMS ((Side *side, struct a_unit *nextunit));
  460. extern int side_initacp PARAMS ((Side *side));
  461. extern int side_acp PARAMS ((Side *side));
  462. extern int side_acp_reserved PARAMS ((Side *side));
  463. extern int using_tech_levels PARAMS ((void));
  464. extern void remove_side_from_game PARAMS ((Side *side));
  465. extern int num_displayed_sides PARAMS ((void));
  466. extern void set_side_name PARAMS ((Side *side, Side *side2, char *newname));
  467. extern void become_designer PARAMS ((Side *side));
  468. extern void become_nondesigner PARAMS ((Side *side));
  469. extern int trusted_side PARAMS ((Side *side1, Side *side2));
  470. extern void set_trust PARAMS ((Side *side, Side *side2, int val));
  471. extern void set_mutual_trust PARAMS ((Side *side, Side *side2, int val));
  472. extern void set_autofinish PARAMS ((Side *side, int value));
  473. extern int enemy_side PARAMS ((Side *s1, Side *s2));
  474. extern int allied_side PARAMS ((Side *s1, Side *s2));
  475. extern int neutral_side PARAMS ((Side *s1, Side *s2));
  476. extern void set_willing_to_save PARAMS ((Side *side, int flag));
  477. extern void set_willing_to_draw PARAMS ((Side *side, int flag));
  478. extern void reveal_side PARAMS ((Side *sender, Side *recipient, int *types));
  479. extern void send_message PARAMS ((Side *side, SideMask sidemask, char *str));
  480. extern void receive_message PARAMS ((Side *side, Side *sender, char *str));
  481. extern void calc_vision PARAMS ((Side *side));
  482. extern void all_see_occupy PARAMS ((struct a_unit *unit, int x, int y, int inopen));
  483. extern void all_see_leave PARAMS ((struct a_unit *unit, int x, int y, int inopen));
  484. extern void cover_area PARAMS ((Side *side, struct a_unit *unit, int x0, int y0, int x1, int y1));
  485. extern void reset_coverage PARAMS ((void));
  486. extern void calc_coverage PARAMS ((Side *side));
  487. extern void reset_all_views PARAMS ((void));
  488. extern void reset_view PARAMS ((Side *side));
  489. extern void react_to_seen_unit PARAMS ((Side *side, struct a_unit *unit, int x, int y));
  490. extern void all_see_cell PARAMS ((int x, int y));
  491. extern int see_cell PARAMS ((Side *side, int x, int y));
  492. extern void see_exact PARAMS ((Side *side, int x, int y));
  493. extern int seen_border PARAMS ((Side *side, int x, int y, int dir));
  494. extern char *side_desig PARAMS ((Side *side));
  495.  
  496. extern Side *parse_side_spec PARAMS ((char *str));
  497.  
  498. extern Doctrine *new_doctrine PARAMS ((int id));
  499. extern Doctrine *find_doctrine PARAMS ((int id));
  500. extern Doctrine *find_doctrine_by_name PARAMS ((char *name));
  501. extern Doctrine *clone_doctrine PARAMS ((Doctrine *doctrine));
  502.  
  503. extern StandingOrder *new_standing_order PARAMS ((void));
  504. extern void add_standing_order PARAMS ((Side *side, StandingOrder *sorder, int pos));
  505. extern int parse_standing_order PARAMS ((Side *side, char *cmdstr));
  506. extern char *parse_unit_types PARAMS ((Side *side, char *str, char *utypevec));
  507. extern char *parse_order_cond PARAMS ((Side *side, char *str, StandingOrder *sorder));
  508. extern char *get_next_arg PARAMS ((char *str, char *buf, char **rsltp));
  509.  
  510. extern void init_agreements PARAMS ((void));
  511. extern Agreement *create_agreement PARAMS ((int id));
  512. extern char *agreement_desig PARAMS ((Agreement *ag));
  513.  
  514. extern int load_side_config PARAMS ((Side *side));
  515.  
  516. extern int set_side_self_unit PARAMS ((Side *side, struct a_unit *unit));
  517.  
  518. #ifdef DESIGNERS
  519. extern void paint_view PARAMS ((Side *side, int x, int y, int r, int tview, int uview));
  520. #endif /* DESIGNERS */
  521.