Varargs cleanup is almost finished.
[vms-empire.git] / extern.h
1 /*
2  *    Copyright (C) 1987, 1988 Chuck Simmons
3  * 
4  * See the file COPYING, distributed with empire, for restriction
5  * and warranty information.
6  */
7
8 /*
9 extern.h -- define global non-constant storage.
10 */
11
12 /* user-supplied parameters */
13 int SMOOTH;        /* number of times to smooth map */
14 int WATER_RATIO;   /* percentage of map that is water */
15 int MIN_CITY_DIST; /* cities must be at least this far apart */
16 int delay_time;
17 int save_interval; /* turns between autosaves */
18
19 real_map_t map[MAP_SIZE]; /* the way the world really looks */
20 view_map_t comp_map[MAP_SIZE]; /* computer's view of the world */
21 view_map_t user_map[MAP_SIZE]; /* user's view of the world */
22
23 city_info_t city[NUM_CITY]; /* city information */
24
25 /*
26 There is one array to hold all allocated objects no matter who
27 owns them.  Objects are allocated from the array and placed on
28 a list corresponding to the type of object and its owner.
29 */
30
31 piece_info_t *free_list; /* index to free items in object list */
32 piece_info_t *user_obj[NUM_OBJECTS]; /* indices to user lists */
33 piece_info_t *comp_obj[NUM_OBJECTS]; /* indices to computer lists */
34 piece_info_t object[LIST_SIZE]; /* object list */
35
36 /* Display information. */
37 int lines; /* lines on screen */
38 int cols; /* columns on screen */
39
40 /* constant data */
41 extern piece_attr_t piece_attr[];
42 extern int dir_offset[];
43 extern char *func_name[];
44 extern int move_order[];
45 extern char type_chars[];
46 extern char tt_attack[];
47 extern char army_attack[];
48 extern char fighter_attack[];
49 extern char ship_attack[];
50
51 extern move_info_t tt_load;
52 extern move_info_t tt_explore;
53 extern move_info_t tt_unload;
54 extern move_info_t army_fight;
55 extern move_info_t army_load;
56 extern move_info_t fighter_fight;
57 extern move_info_t ship_fight;
58 extern move_info_t ship_repair;
59 extern move_info_t user_army;
60 extern move_info_t user_army_attack;
61 extern move_info_t user_fighter;
62 extern move_info_t user_ship;
63 extern move_info_t user_ship_repair;
64
65 extern char *help_cmd[];
66 extern char *help_edit[];
67 extern char *help_user[];
68 extern int cmd_lines;
69 extern int edit_lines;
70 extern int user_lines;
71
72 /* miscellaneous */
73 long date; /* number of game turns played */
74 bool automove; /* true iff user is in automove mode */
75 bool resigned; /* true iff computer resigned */
76 bool debug; /* true iff in debugging mode */
77 bool print_debug; /* true iff we print debugging stuff */
78 bool print_vmap; /* true iff we print view maps */
79 bool trace_pmap; /* true if we are tracing pmaps */
80 int win; /* set when game is over - not a bool */
81 char jnkbuf[STRSIZE]; /* general purpose temporary buffer */
82 bool save_movie; /* true iff we should save movie screens */
83 int user_score; /* "score" for user and computer */
84 int comp_score;
85 char *savefile;
86
87 /* Screen updating macros */
88 #define display_loc_u(loc) display_loc(USER,user_map,loc)
89 #define display_loc_c(loc) display_loc(COMP,comp_map,loc)
90 #define print_sector_u(sector) print_sector(USER,user_map,sector)
91 #define print_sector_c(sector) print_sector(COMP,comp_map,sector)
92 #define loc_row(loc) ((loc)/MAP_WIDTH)
93 #define loc_col(loc) ((loc)%MAP_WIDTH)
94 #define row_col_loc(row,col) ((long)((row)*MAP_WIDTH + (col)))
95 #define sector_row(sector) ((sector)%SECTOR_ROWS)
96 #define sector_col(sector) ((sector)/SECTOR_ROWS)
97 #define row_col_sector(row,col) ((int)((col)*SECTOR_ROWS+(row)))
98
99 #define loc_sector(loc) \
100         row_col_sector(loc_row(loc)/ROWS_PER_SECTOR, \
101                        loc_col(loc)/COLS_PER_SECTOR)
102                        
103 #define sector_loc(sector) row_col_loc( \
104                 sector_row(sector)*ROWS_PER_SECTOR+ROWS_PER_SECTOR/2, \
105                 sector_col(sector)*COLS_PER_SECTOR+COLS_PER_SECTOR/2)
106                 
107 /* global routines */
108
109 void empire(void);
110
111 void attack(piece_info_t *att_obj, long loc);
112 void comp_move(int nmoves);
113 void user_move(void);
114 void edit(long edit_cursor);
115
116 /* map routines */
117 void vmap_cont (int *cont_map, view_map_t *vmap, long loc, char bad_terrain);
118 void rmap_cont (int *cont_map, long loc, char bad_terrain);
119 void vmap_mark_up_cont (int *cont_map, view_map_t *vmap, long loc, char bad_terrain);
120 scan_counts_t vmap_cont_scan (int *cont_map, view_map_t *vmap);
121 scan_counts_t rmap_cont_scan (int *cont_map);
122 bool map_cont_edge (int *cont_map, long loc);
123 long vmap_find_aobj (path_map_t path_map[], view_map_t *vmap, long loc, move_info_t *move_info);
124 long vmap_find_wobj (path_map_t path_map[], view_map_t *vmap, long loc, move_info_t *move_info);
125 long vmap_find_lobj (path_map_t path_map[], view_map_t *vmap, long loc, move_info_t *move_info);
126 long vmap_find_lwobj (path_map_t path_map[],view_map_t *vmap,long loc,move_info_t *move_info,int beat_cost);
127 long vmap_find_wlobj (path_map_t path_map[], view_map_t *vmap, long loc, move_info_t *move_info);
128 long vmap_find_dest (path_map_t path_map[], view_map_t vmap[], long cur_loc, long dest_loc, int owner, int terrain);
129 void vmap_prune_explore_locs (view_map_t *vmap);
130 void vmap_mark_path (path_map_t *path_map, view_map_t *vmap, long dest);
131 void vmap_mark_adjacent (path_map_t path_map[], long loc);
132 void vmap_mark_near_path (path_map_t path_map[], long loc);
133 long vmap_find_dir (path_map_t path_map[], view_map_t *vmap, long loc,  char *terrain, char *adjchar);
134 int vmap_count_adjacent (view_map_t *vmap, long loc, char *adj_char);
135 bool vmap_shore (view_map_t *vmap, long loc);
136 bool rmap_shore (long loc);
137 bool vmap_at_sea (view_map_t *vmap, long loc);
138 bool rmap_at_sea (long loc);
139
140 /* display routines */
141 void announce (char *);
142 void redisplay (void);
143 void kill_display (void);
144 void sector_change (void);
145 int cur_sector (void);
146 long cur_cursor (void);
147 void display_loc (int whose, view_map_t vmap[], long loc);
148 void display_locx (int whose, view_map_t vmap[], long loc);
149 void print_sector (int whose, view_map_t vmap[], int sector);
150 bool move_cursor (long *cursor, int offset);
151 void print_zoom (view_map_t *vmap);
152 void print_pzoom (char *s, path_map_t *pmap, view_map_t *vmap);
153 void print_xzoom (view_map_t *vmap);
154 void display_score (void);
155 #ifdef A_COLOR
156 void init_colors (void);
157 #endif /* A_COLOR */
158 void redraw (void);
159 void clear_screen (void);
160 void complain (void);
161 void delay (void);
162 void close_disp (void);
163 void pos_str (int row, int col, char *str, ...);
164 void pos_str1 (int row, int col, char *str, ...);
165 int direction();
166
167 void init_game (void); /* game routines */
168 void save_game (void);
169 int restore_game (void);
170 void save_movie_screen (void);
171 void replay_movie (void);
172
173 void get_str (char *buf, int sizep); /* input routines */
174 void get_strq (char *buf, int sizep);
175 char get_chx (void);
176 int getint (char *message);
177 char get_c (void);
178 char get_cq (void);
179 bool getyn (char *message);
180 int get_range (char *message, int low, int high);
181
182 void rndini (void); /* math routines */
183 long irand (long high);
184 int dist (long a, long b);
185 int isqrt (int n);
186
187 int find_nearest_city (long loc, int owner, long *city_loc);
188 city_info_t *find_city (long loc); /* object routines */
189 piece_info_t *find_obj (int type, long loc);
190 piece_info_t *find_nfull (int type, long loc);
191 long find_transport (int owner, long loc);
192 piece_info_t *find_obj_at_loc (long loc);
193 int obj_moves (piece_info_t *obj);
194 int obj_capacity (piece_info_t *obj);
195 void kill_obj (piece_info_t *obj, long loc);
196 void kill_city (city_info_t *cityp);
197 void produce (city_info_t *cityp);
198 void move_obj (piece_info_t *obj, long new_loc);
199 void move_sat (piece_info_t *obj);
200 bool good_loc (piece_info_t *obj, long loc);
201 void embark (piece_info_t *ship, piece_info_t *obj);
202 void disembark (piece_info_t *obj);
203 void describe_obj (piece_info_t *obj);
204 void scan (view_map_t vmap[], long loc);
205 void scan_sat (view_map_t *vmap, long loc);
206 void set_prod (city_info_t *cityp);
207
208 /* terminal routines */
209 void pdebug (char *s, ...);
210 void topini (void);
211 void clreol (int line, int colp);
212 void topmsg (int line, char *fmt, ...);
213 void topmsg1 (int line, char *fmt, ...);
214 void topmsg2 (int line, char *fmt, ...);
215 void prompt (char *fmt, ...);
216 void prompt1 (char *fmt, ...);
217 void prompt2 (char *fmt, ...);
218 void error (char *fmt, ...);
219 void info (char *a, char *b, char *c);
220 void comment (char *fmt, ...);
221 void comment1 (char *fmt, ...);
222 void extra (char *fmt, ...);
223 void huh (void);
224 void help (char **text, int nlines);
225 void set_need_delay (void);
226 void ksend (char *fmt, ...);
227 void ksend1 (char *fmt, ...);
228
229 /* utility routines */
230 void ttinit (void);
231 void assert (char *expression, char *file, int line);
232 void empend (void);
233 char upper (char c);
234 void tupper (char *str);
235 void check (void);
236 int loc_disp (int loc);