|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T s
Length: 9916 (0x26bc)
Types: TextFile
Names: »side.h«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/X/Xconq/side.h«
/* Copyright (c) 1987, 1988 Stanley T. Shebs, University of Utah. */
/* This program may be used, copied, modified, and redistributed freely */
/* for noncommercial purposes, so long as this notice remains intact. */
/* RCS $Header: side.h,v 1.1 88/06/21 12:29:46 shebs Exp $ */
/* Definitions about sides need terrain.h, unit.h, map.h */
/* Modes governing the interpretation of input. */
#define WEDGED 0
#define MOVE 1
#define SURVEY 2
/* These are 7-char strings (except for the first) so hiliting works right. */
#define MODENAMES { "", " Move ", " Survey" }
/* Reasons for gains and losses of units. */
#define NUMREASONS 13
#define FIRSTUNIT 0
#define PRODUCED 1
#define CAPTURE 2
#define DUMMYREAS 3
#define COMBAT 4
#define PRISONER 5
#define GARRISON 6
#define DISASTER 7
#define STARVATION 8
#define DISBAND 9
#define SURRENDER 10
#define VICTOR 11
#define ENDOFWORLD 12
#define REASONNAMES \
{ "Ini", "Pro", "Cap", " ", \
"Cbt", "Pri", "Gar", "Acc", "Sup", "Dis", "Sur", "Win", "End" }
/* Input request results - tells what came back as answer to a request. */
#define GARBAGE 0
#define KEYBOARD 1
#define MAPPOS 2
#define UNITTYPE 3
/* Color display modes. */
#define NUMSHOWMODES 4
#define FULLHEX 0
#define BORDERHEX 1
#define TERRICONS 2
#define BOTHICONS 3
/* Attitude boundaries of one side with respect to another. */
#define ENEMY (-100)
#define NEUTRAL 0
#define ALLY 100
/* Possible ideologies of a machine player - determines general behavior. */
/* Very crude - really more for color than anything else. */
#define EXPANSIONIST 0
#define ISOLATIONIST 1
#define FASCIST 2
#define FANATICAL 3
#define DEMOCRATIC 4
/* Each xconq player is a "side" - more or less one country. A side may or */
/* may not be played by a person, and may or may not have a display attached */
/* to it. Each side has a different view of the world. Zillions of slots */
/* are needed because each side needs to keep its own interaction/display */
/* data - a side is almost like a full-blown process... */
typedef struct a_side {
/* Level 1 detail */
char *name; /* name used for display */
/* Level 2 detail */
short ideology; /* what kind of people are on this side */
short attitude[MAXSIDES]; /* war/peace/ally status of other sides */
short counts[MAXUTYPES]; /* array of numbers for identifying units */
/* Level 3 detail */
unsigned char *view; /* pointer to array of view info */
/* Level 4 detail */
char *host; /* which host is this side attached to */
short humanp; /* is this side played by a person? */
short lost; /* true if this side was knocked out */
short cx, cy; /* current center of player's focus */
struct a_unit *markunit; /* unit being remembered for later use */
short timeleft; /* seconds left for this side to play */
short timedout; /* true when clock has run out for this side */
short itertime; /* length of order repetition */
short graphical; /* if true, use bar graphs for unit info */
short bonw; /* true if display is black-on-white */
short showmode; /* one of four color display modes */
/* Statistics */
short balance[MAXUTYPES][NUMREASONS]; /* what happened to units */
short atkstats[MAXUTYPES][MAXUTYPES]; /* how many attacks */
short hitstats[MAXUTYPES][MAXUTYPES]; /* how many hits */
/* Never saved */
short mode; /* player's mode (move/survey) */
short curx, cury; /* current spot being looked at */
struct a_unit *curunit; /* unit under cursor */
struct a_unit *movunit; /* unit being moved currently */
short directorder; /* true if order has just been given */
long plan; /* all the machine's strategy and tactics */
short *coverage; /* indicates how many looking at this hex */
short units[MAXUTYPES]; /* cached count of units */
short resources[MAXRTYPES]; /* cached count of resources */
short building[MAXUTYPES]; /* cached count of units being built */
long lasttime; /* when clock started counting down again */
/* input hacking */
bool reqactive; /* true if request made but yet unfulfilled */
int (*reqhandler)(); /* function to call to process fulfilled req */
int reqtype; /* what sort of response was made to req */
char reqch; /* keyboard char */
int reqx, reqy; /* map coordinates */
int requtype; /* unit type number */
/* Random input data slots - could be merged/simplified? */
struct a_side *reqoside;
struct a_unit *requnit;
struct a_unit *tmpcurunit; /* saved value of curunit */
int reqvalue, reqvalue2;
int reqstrbeg, reqcurstr; /* data about string under construction */
char *reqdeflt; /* A default string */
int tmpcurx, tmpcury; /* saved values of curx,cury */
int reqposx, reqposy; /* accumulator for position reading */
char ustr[MAXUTYPES]; /* used in composing unit type hints */
int uvec[MAXUTYPES]; /* vector of allowed unit types to input */
int bvec[MAXUTYPES]; /* bit vector of allowed unit types to input */
/* Machinery for standing orders */
bool teach; /* true when only setting a standing order */
struct a_unit *sounit; /* unit that stores standing order for occs */
int soutype; /* unit type that will get standing orders */
struct a_order *tmporder; /* holding place for orders */
/* Constructed during display init */
short monochrome; /* obvious */
short nw, nh; /* length and number of notice lines */
short vw, vh; /* viewport width and height in hexes */
short vw2, vh2; /* 1/2 (rounded down) of above values */
short sw; /* number of chars in side listing */
short fw, fh; /* dimensions of text font (in pixels) */
short hw, hh; /* dimensions of general icon font (in pixels) */
short hch; /* center-to-center distance between hexes */
short uw, uh; /* dimensions of unit font/bitmaps (in pixels) */
short mm; /* magnification of world hexes (in pixels) */
short bd, margin; /* spacing around things */
short th, bh; /* heights of top and bottom parts of display */
short rw, lw; /* widths of right and left parts of display */
short mw, mh; /* main window width and height */
/* Working variables for the display */
short vcx, vcy; /* center hex in the viewport */
short lastvcx, lastvcy; /* last center hex (-1,-1 initially) */
short lastx, lasty; /* last current x and y (-1,-1 initially) */
char noticebuf[MAXNOTES][BUFSIZE]; /* data for the notice area */
char promptbuf[BUFSIZE]; /* current prompt + input str on display */
/* All the colors used - filled in by display init */
long bdcolor; /* color for borders */
long bgcolor; /* background color */
long fgcolor; /* foreground (text) color */
long owncolor; /* color for us (usually black) */
long altcolor; /* another color for us (usually blue) */
long enemycolor; /* color for them (usually red) */
long neutcolor; /* color for fencesitters (usually gray) */
long graycolor; /* color for graying out (usually gray) */
long diffcolor; /* unusual/distinct color (usually maroon) */
long goodcolor; /* color for OKness (usually green) */
long badcolor; /* color for none-OKness (usually red) */
long hexcolor[MAXTTYPES]; /* the color of each terrain type */
long main; /* main window */
long help; /* help window */
long msg; /* places for notices/warnings */
long info; /* details about a unit */
long prompt; /* where prompts and input are */
long map; /* detailed map of vicinity */
long sides; /* list of sides and their status */
long timemode; /* turn number and mode */
long clock; /* chess clock display */
long state; /* status of units on side */
long world; /* display of entire world */
long display; /* side's specific display structure */
/* Filled during side creation */
struct a_side *next; /* pointer to next in list */
} Side;
/* Some convenient macros. */
#define humanside(x) ((x) != NULL && (x)->humanp)
/* Iteration over all sides. */
#define for_all_sides(v) for (v = sidelist; v != NULL; v = v->next)
/* Manipulation of bytes encoding views of things. */
/* Types 30, 31 reserved for "seen but unoccupied" and "unseen". */
#define buildview(a,t) (((a)<<5)|(t))
#define vside(v) (((v)>>5) & 0x07)
#define vtype(v) ((v) & 0x1f)
#define UNSEEN 0x1f
#define EMPTY 0x1e
#define side_view(s,x,y) (((s)->view)[world.width*(y)+(x)])
#define set_side_view(s,x,y,v) (((s)->view)[world.width*(y)+(x)] = (v))
#define cover(s,x,y) (((s)->coverage)[world.width*(y)+(x)])
#define set_cover(s,x,y,v) (((s)->coverage)[world.width*(y)+(x)] = (v))
#define add_cover(s,x,y,v) (((s)->coverage)[world.width*(y)+(x)] += (v))
/* Side variables. */
extern Side *sidelist, *curside, *tmpside;
extern Side *create_side(), *side_n(), *read_basic_side();
extern int numgivens, numhumans, numsides;
extern char *hosts[];
extern char *random_side_name();
extern bool humans[];