1
|
1 /* $Id: dashboard.c,v 1.1.1.1 1997/12/06 05:41:28 darius Exp $ */
|
|
2
|
|
3 /*
|
|
4 * dashboard.c - graphic tstatw - 6/2/93
|
|
5 *
|
|
6 * copyright 1993 Lars Bernhardsson (lab@mtek.chalmers.se)
|
|
7 * Free to use as long as this notice is left here.
|
|
8 *
|
|
9 * Color by Nick Trown.
|
|
10 * Paradise shoehorning by Bill Dyess.
|
|
11 * Rainbow dashboard by Bill Dyess
|
|
12 */
|
|
13
|
|
14 #include "copyright.h"
|
|
15
|
|
16 #include <stdio.h>
|
|
17 #include <time.h>
|
|
18 #include "Wlib.h"
|
|
19 #include "defs.h"
|
|
20 #include "struct.h"
|
|
21 #include "data.h"
|
|
22 #include "proto.h"
|
|
23 #include "sound.h"
|
|
24
|
|
25 #define DB_NOFILL 0
|
|
26 #define DB_LINE 1
|
|
27 #define DB_FILL 2
|
|
28
|
|
29 #define DB_3DIGITS 0
|
|
30 #define DB_5DIGITS 1
|
|
31
|
|
32 /*
|
|
33 #define BAR_LENGTH 56
|
|
34 #define BAR_LENGTH_THIRD 18
|
|
35 */
|
|
36 #define TSTATW_BASEX 32
|
|
37
|
|
38 #define SPACING 4
|
|
39
|
|
40 int BAR_LENGTH = 56;
|
|
41 int BAR_LENGTH_THIRD = 18;
|
|
42
|
|
43 int column[4];
|
|
44
|
|
45 #ifdef PACKET_LIGHTS
|
|
46 /* code to draw and erase packet lights 2/5/94 [BDyess] */
|
|
47
|
|
48 #define SENDX 7
|
|
49 #define SENDY 1
|
|
50 #define RECEIVEX 3
|
|
51 #define RECEIVEY 1
|
|
52
|
|
53 int send_lit = 0, receive_lit = 0;
|
|
54
|
|
55 void
|
|
56 light_send()
|
|
57 {
|
|
58 if (packetLights == 0 || send_lit)
|
|
59 return;
|
|
60 send_lit = 1;
|
|
61 W_DrawPoint(tstatw, SENDX, SENDY, W_Green);
|
|
62 W_DrawPoint(tstatw, SENDX + 1, SENDY, W_Green);
|
|
63 W_DrawPoint(tstatw, SENDX, SENDY + 1, W_Green);
|
|
64 W_DrawPoint(tstatw, SENDX + 1, SENDY + 1, W_Green);
|
|
65 }
|
|
66
|
|
67 void
|
|
68 light_receive()
|
|
69 {
|
|
70 if (packetLights == 0 || receive_lit)
|
|
71 return;
|
|
72 receive_lit = 2;
|
|
73 W_DrawPoint(tstatw, RECEIVEX, RECEIVEY, W_Yellow);
|
|
74 W_DrawPoint(tstatw, RECEIVEX + 1, RECEIVEY, W_Yellow);
|
|
75 W_DrawPoint(tstatw, RECEIVEX, RECEIVEY + 1, W_Yellow);
|
|
76 W_DrawPoint(tstatw, RECEIVEX + 1, RECEIVEY + 1, W_Yellow);
|
|
77 }
|
|
78
|
|
79 void
|
|
80 light_erase()
|
|
81 {
|
|
82 if (receive_lit == 1) {
|
|
83 W_DrawPoint(tstatw, RECEIVEX, RECEIVEY, backColor);
|
|
84 W_DrawPoint(tstatw, RECEIVEX + 1, RECEIVEY, backColor);
|
|
85 W_DrawPoint(tstatw, RECEIVEX, RECEIVEY + 1, backColor);
|
|
86 W_DrawPoint(tstatw, RECEIVEX + 1, RECEIVEY + 1, backColor);
|
|
87 }
|
|
88 if (receive_lit)
|
|
89 receive_lit--;
|
|
90 if (send_lit == 1) {
|
|
91 W_DrawPoint(tstatw, SENDX, SENDY, backColor);
|
|
92 W_DrawPoint(tstatw, SENDX + 1, SENDY, backColor);
|
|
93 W_DrawPoint(tstatw, SENDX, SENDY + 1, backColor);
|
|
94 W_DrawPoint(tstatw, SENDX + 1, SENDY + 1, backColor);
|
|
95 }
|
|
96 if (send_lit)
|
|
97 send_lit--;
|
|
98 }
|
|
99 #endif /* PACKET_LIGHTS */
|
|
100
|
|
101 void
|
|
102 db_box(x, y, w, h, f, color)
|
|
103 int x, y, w, h, f, color;
|
|
104 {
|
|
105 int border = W_White;
|
|
106
|
|
107 if (color == W_Red)
|
|
108 border = color;
|
|
109
|
|
110 if (w == 0 || h == 0)
|
|
111 return;
|
|
112
|
|
113 switch (f) {
|
|
114 case DB_FILL:
|
|
115 W_FillArea(tstatw, x, y, w + 1, h + 1, color);
|
|
116 break;
|
|
117 case DB_LINE:
|
|
118 W_MakeLine(tstatw, x + w, y, x + w, y + h, border);
|
|
119 W_MakeLine(tstatw, x + w, y + 4, x + BAR_LENGTH, y + 4, border);
|
|
120 break;
|
|
121 case DB_NOFILL:
|
|
122 W_MakeLine(tstatw, x, y, x + w, y, border);
|
|
123 W_MakeLine(tstatw, x + w, y, x + w, y + h, border);
|
|
124 W_MakeLine(tstatw, x + w, y + h, x, y + h, border);
|
|
125 W_MakeLine(tstatw, x, y + h, x, y, border);
|
|
126 break;
|
|
127 }
|
|
128 }
|
|
129
|
|
130 void
|
|
131 db_bar(lab, x, y, value, tmpmax, max, digits, color)
|
|
132 char *lab;
|
|
133 int x, y, value, tmpmax, max, digits, color;
|
|
134 {
|
|
135 register int wt, wv, tw, tc;
|
|
136 char valstr[32];
|
|
137
|
|
138 switch (digits) {
|
|
139 case DB_3DIGITS:
|
|
140 tc = 11;
|
|
141 tw = W_Textwidth * tc;
|
|
142 sprintf(valstr, "%2.2s[%3d/%3d]", lab, value, tmpmax);
|
|
143 W_ClearArea(tstatw, x, y, tw + BAR_LENGTH, W_Textheight);
|
|
144 break;
|
|
145 case DB_5DIGITS:
|
|
146 default:
|
|
147 tc = 15;
|
|
148 tw = W_Textwidth * tc;
|
|
149 sprintf(valstr, "%2.2s[%5d/%5d]", lab, value, tmpmax);
|
|
150 W_ClearArea(tstatw, x, y, tw + BAR_LENGTH, W_Textheight);
|
|
151 break;
|
|
152 }
|
|
153
|
|
154 if (max) {
|
|
155 wt = (BAR_LENGTH * tmpmax) / max;
|
|
156 wv = (BAR_LENGTH * value) / max;
|
|
157 } else {
|
|
158 wt = 0;
|
|
159 wv = 0;
|
|
160 }
|
|
161 if (wt > BAR_LENGTH)
|
|
162 wt = BAR_LENGTH;
|
|
163 if (wv > BAR_LENGTH)
|
|
164 wv = BAR_LENGTH;
|
|
165
|
|
166 W_WriteText(tstatw, x, y, textColor, valstr, tc, W_RegularFont);
|
|
167
|
|
168 db_box(x + tw, y, BAR_LENGTH, W_Textheight - 1, DB_NOFILL, color);
|
|
169 if (wt >= wv && wt > 0)
|
|
170 db_box(x + tw, y, wt, W_Textheight - 1, DB_LINE, color);
|
|
171
|
|
172 if (wv > 0)
|
|
173 db_box(x + tw, y, wv, W_Textheight - 1, DB_FILL, color);
|
|
174 }
|
|
175
|
|
176 void
|
|
177 db_color_bar(lab, x, y, barvalue, numvalue, tmpmax, max, digits)
|
|
178 char *lab;
|
|
179 int x, y, barvalue, numvalue, tmpmax, max, digits;
|
|
180 {
|
|
181 register int wt, wv, tw, tc;
|
|
182 char valstr[32];
|
|
183 int color = W_White;
|
|
184
|
|
185 switch (digits) {
|
|
186 case DB_3DIGITS:
|
|
187 tc = 11;
|
|
188 tw = W_Textwidth * tc;
|
|
189 sprintf(valstr, "%2.2s[%3d/%3d]", lab, numvalue, tmpmax);
|
|
190 W_ClearArea(tstatw, x, y, tw + BAR_LENGTH, W_Textheight);
|
|
191 break;
|
|
192 case DB_5DIGITS:
|
|
193 default:
|
|
194 tc = 15;
|
|
195 tw = W_Textwidth * tc;
|
|
196 sprintf(valstr, "%2.2s[%5d/%5d]", lab, numvalue, tmpmax);
|
|
197 W_ClearArea(tstatw, x, y, tw + BAR_LENGTH, W_Textheight);
|
|
198 break;
|
|
199 }
|
|
200
|
|
201 if (max) {
|
|
202 wt = (int) ((float) BAR_LENGTH * ((float) tmpmax / (float) max));
|
|
203 wv = (int) ((float) BAR_LENGTH * ((float) barvalue / (float) max));
|
|
204 } else {
|
|
205 wt = 0;
|
|
206 wv = 0;
|
|
207 }
|
|
208 #if 0 /* this code turns the color to red when it
|
|
209 exceeds the bar length */
|
|
210 if (wv > wt)
|
|
211 color = W_Red;
|
|
212 #endif /* 0 */
|
|
213 if (wt > BAR_LENGTH)
|
|
214 wt = BAR_LENGTH;
|
|
215 if (wv > BAR_LENGTH)
|
|
216 wv = BAR_LENGTH;
|
|
217
|
|
218 W_WriteText(tstatw, x, y, color, valstr, tc, W_RegularFont);
|
|
219
|
|
220 db_box(x + tw, y, BAR_LENGTH, W_Textheight - 1, DB_NOFILL, color);
|
|
221 if (wt >= wv && wt > 0)
|
|
222 db_box(x + tw, y, wt, W_Textheight - 1, DB_LINE, color);
|
|
223
|
|
224 /* draw rainbow bars */
|
|
225 if (wv > 0)
|
|
226 db_box(x + tw, y, wv > BAR_LENGTH_THIRD ? BAR_LENGTH_THIRD : wv, W_Textheight - 1, DB_FILL, W_Green);
|
|
227 if (wv > BAR_LENGTH_THIRD)
|
|
228 db_box(x + tw + BAR_LENGTH_THIRD, y, wv > 2 * BAR_LENGTH_THIRD ? BAR_LENGTH_THIRD
|
|
229 : wv - BAR_LENGTH_THIRD, W_Textheight - 1, DB_FILL, W_Yellow);
|
|
230 if (wv > 2 * BAR_LENGTH_THIRD)
|
|
231 db_box(x + tw + 2 * BAR_LENGTH_THIRD, y, (wv > BAR_LENGTH ? BAR_LENGTH : wv) -
|
|
232 2 * BAR_LENGTH_THIRD, W_Textheight - 1, DB_FILL, W_Red);
|
|
233
|
|
234 #if 0
|
|
235 /* draw rainbow bars */
|
|
236 if (wv > 0)
|
|
237 db_box((x += 1) + tw, y += 1, wv > BAR_LENGTH_THIRD ? BAR_LENGTH_THIRD : wv, 7, DB_FILL, W_Green);
|
|
238 if (wv > BAR_LENGTH_THIRD)
|
|
239 db_box(x + tw + BAR_LENGTH_THIRD, y, wv > 2 * BAR_LENGTH_THIRD ? BAR_LENGTH_THIRD
|
|
240 : wv - BAR_LENGTH_THIRD, 7, DB_FILL, W_Yellow);
|
|
241 if (wv > 2 * BAR_LENGTH_THIRD)
|
|
242 db_box(x + tw + 2 * BAR_LENGTH_THIRD, y, (wv > BAR_LENGTH ? BAR_LENGTH : wv) -
|
|
243 2 * BAR_LENGTH_THIRD - 2, 7, DB_FILL, W_Red);
|
|
244 #endif /* 0 */
|
|
245 }
|
|
246
|
|
247 #ifdef TIMER
|
|
248 void
|
|
249 db_timer(fr, xloc, yloc)
|
|
250 int fr, xloc, yloc;
|
|
251 /* handles the dashboard timer [BDyess] 10/29/93 */
|
|
252 {
|
|
253 static time_t oldtime = -1;
|
|
254 static int lastTimerType = -1;
|
|
255 time_t now = 0;
|
|
256 static char lasttimer[TIMESTRLEN], *timer;
|
|
257 int left, right, x, pos;
|
|
258
|
|
259 #ifdef RECORDER
|
|
260 if(playback) {
|
|
261 pb_framectr(xloc, yloc);
|
|
262 return;
|
|
263 }
|
|
264 #endif
|
|
265 if (timerType != lastTimerType || fr) {
|
|
266 fr = 1;
|
|
267 lastTimerType = timerType;
|
|
268 switch (timerType) {
|
|
269 case T_NONE:
|
|
270 W_ClearArea(tstatw, xloc, yloc, (TIMESTRLEN+3) * W_Textwidth,
|
|
271 W_Textheight);
|
|
272 memset(lasttimer, ' ', TIMESTRLEN);
|
|
273 strcpy(lasttimer, " ");
|
|
274 oldtime = now;
|
|
275 break;
|
|
276 case T_DAY:
|
|
277 W_WriteText(tstatw, xloc, yloc, textColor, "NOW", 3, W_RegularFont);
|
|
278 break;
|
|
279 case T_SERVER:
|
|
280 W_WriteText(tstatw, xloc, yloc, textColor, "SRV", 3, W_RegularFont);
|
|
281 break;
|
|
282 case T_SHIP:
|
|
283 W_WriteText(tstatw, xloc, yloc, textColor, "SHP", 3, W_RegularFont);
|
|
284 break;
|
|
285 case T_USR:
|
|
286 W_WriteText(tstatw, xloc, yloc, textColor, "TMR", 3, W_RegularFont);
|
|
287 break;
|
|
288 }
|
|
289 }
|
|
290 if (!timerType)
|
|
291 return;
|
|
292 now = time(NULL);
|
|
293 if (now != oldtime || fr) {
|
|
294 /*
|
|
295 get the timer string and start comparing it with the old one. Only
|
|
296 print the differences
|
|
297 */
|
|
298 timer = timeString(now - timeBank[timerType]);
|
|
299 x = xloc + 4 * W_Textwidth;
|
|
300 left = 0;
|
|
301 right = -1;
|
|
302 pos = 0;
|
|
303
|
|
304 /*
|
|
305 run through the string to find any differences. Print any
|
|
306 continuous differences with one W_WriteText call.
|
|
307 */
|
|
308 if (fr) {
|
|
309 W_WriteText(tstatw, x, yloc, textColor, timer,
|
|
310 TIMESTRLEN, W_RegularFont);
|
|
311 } else {
|
|
312 while (pos < TIMESTRLEN) {
|
|
313 if (timer[pos] == lasttimer[pos]) {
|
|
314 if (left <= right)
|
|
315 W_WriteText(tstatw, x + left * W_Textwidth,
|
|
316 yloc, textColor, timer + left,
|
|
317 right - left + 1, W_RegularFont);
|
|
318 left = pos + 1;
|
|
319 right = pos;
|
|
320 } else
|
|
321 right++;
|
|
322 pos++;
|
|
323 }
|
|
324 if (left <= right)
|
|
325 W_WriteText(tstatw, x + left * W_Textwidth, yloc, textColor,
|
|
326 timer + left, right - left + 1, W_RegularFont);
|
|
327 }
|
|
328 oldtime = now;
|
|
329 strcpy(lasttimer, timer);
|
|
330 }
|
|
331 return;
|
|
332 }
|
|
333 #endif /* TIMER */
|
|
334
|
|
335 void
|
|
336 db_flags(fr)
|
|
337 int fr;
|
|
338 {
|
|
339 static float old_kills = -1.0;
|
|
340 static int old_torp = -1;
|
|
341 static int old_drone = 0;
|
|
342 static int old_totmissiles = 0;
|
|
343 static unsigned int old_flags = ~(unsigned int) 0;
|
|
344 static int old_tourn = -1;
|
|
345 static int old_spd = -1;
|
|
346 unsigned char current_tourn;
|
|
347 int i;
|
|
348 char buf[26];
|
|
349
|
|
350 #ifdef UNIX_SOUND
|
|
351 if ((me->p_etemp > me->p_ship->s_maxegntemp) && (me->p_flags & PFENG))
|
|
352 maybe_play_sound (SND_THERMAL); /* Engines Over Thermal Limit, play ONLY once */
|
|
353 else sound_completed (SND_THERMAL); /* Done with Etmp, Replay Sound if we Etmp Again */
|
|
354 #endif
|
|
355
|
|
356 if (fr || me->p_flags != old_flags) {
|
|
357 buf[0] = (me->p_flags & PFSHIELD ? 'S' : ' ');
|
|
358
|
|
359 if (me->p_flags & PFGREEN)
|
|
360 buf[1] = 'G';
|
|
361 else if (me->p_flags & PFYELLOW)
|
|
362 buf[1] = 'Y';
|
|
363 else
|
|
364 buf[1] = 'R';
|
|
365 buf[2] = (me->p_flags & (PFPLLOCK | PFPLOCK) ? 'L' : ' ');
|
|
366 buf[3] = (me->p_flags & PFREPAIR ? 'R' : ' ');
|
|
367 buf[4] = (me->p_flags & PFBOMB ? 'B' : ' ');
|
|
368 buf[5] = (me->p_flags & PFORBIT ? 'O' : ' ');
|
|
369 buf[6] = (me->p_flags & (PFDOCK | PFDOCKOK)) ? 'D' : ' ';
|
|
370 buf[7] = (me->p_flags & PFCLOAK ? 'C' : ' ');
|
|
371 buf[8] = (me->p_flags & PFWEP ? 'W' : ' ');
|
|
372 buf[9] = (me->p_flags & PFENG ? 'E' : ' ');
|
|
373 if (me->p_flags & PFPRESS)
|
|
374 buf[10] = 'P';
|
|
375 else if (me->p_flags & PFTRACT)
|
|
376 buf[10] = 'T';
|
|
377 else
|
|
378 buf[10] = ' ';
|
|
379 if (me->p_flags & PFBEAMUP)
|
|
380 buf[11] = 'u';
|
|
381 else if (me->p_flags & PFBEAMDOWN)
|
|
382 buf[11] = 'd';
|
|
383 else
|
|
384 buf[11] = ' ';
|
|
385
|
|
386 /* Flags turn red with etemped/wtemped [BDyess] */
|
|
387 if (me->p_flags & (PFWEP | PFENG))
|
|
388 W_WriteText(tstatw, 2, 3, W_Red, "Flags", 5, W_RegularFont);
|
|
389 else
|
|
390 W_WriteText(tstatw, 2, 3, textColor, "Flags", 5, W_RegularFont);
|
|
391 /* blue 'Warp' text [BDyess] */
|
|
392 if (me->p_flags & PFWARP)
|
|
393 W_WriteText(tstatw, 2 + 6 * W_Textwidth, 3, W_Cyan, " Warp", 8,
|
|
394 W_BoldFont);
|
|
395 /* red 'Afterbrn' text [BDyess] */
|
|
396 else if (me->p_flags & PFAFTER)
|
|
397 W_WriteText(tstatw, 2 + 6 * W_Textwidth, 3, W_Red, "Afterbrn", 8,
|
|
398 W_RegularFont);
|
|
399 /* yellow 'WarpPrep' or 'WrpPause' text [BDyess] */
|
|
400 else if (me->p_flags & PFWARPPREP)
|
|
401 if (me->p_flags & PFWPSUSPENDED)
|
|
402 W_WriteText(tstatw, 2 + 6 * W_Textwidth, 3, W_Yellow, "WrpPause",
|
|
403 8, W_RegularFont);
|
|
404 else
|
|
405 W_WriteText(tstatw, 2 + 6 * W_Textwidth, 3, W_Yellow, "WarpPrep",
|
|
406 8, W_RegularFont);
|
|
407 /* green 'Impulse' text [BDyess] */
|
|
408 else if (me->p_speed > 0)
|
|
409 W_WriteText(tstatw, 2 + 6 * W_Textwidth, 3, W_Green, " Impulse", 8,
|
|
410 W_RegularFont);
|
|
411 /* white 'Stopped' text [BDyess] */
|
|
412 else
|
|
413 W_WriteText(tstatw, 2 + 6 * W_Textwidth, 3, textColor, " Stopped", 8,
|
|
414 W_RegularFont);
|
|
415 W_WriteText(tstatw, 2, 3 + (W_Textheight + SPACING), textColor, buf, 12, W_RegularFont);
|
|
416 #if 0 /* colored G/Y/R status flags. Looked stupid */
|
|
417 if (me->p_flags & PFGREEN)
|
|
418 W_WriteText(tstatw, 2 + W_Textwidth, 3 + W_Textheight + SPACING, W_Green, "G", 1, W_RegularFont);
|
|
419 else if (me->p_flags & PFYELLOW)
|
|
420 W_WriteText(tstatw, 2 + W_Textwidth, 3 + W_Textheight + SPACING, W_Yellow, "Y", 1, W_RegularFont);
|
|
421 else
|
|
422 W_WriteText(tstatw, 2 + W_Textwidth, 3 + W_Textheight + SPACING, W_Red, "R", 1, W_RegularFont);
|
|
423 #endif /* 0 */
|
|
424 old_flags = me->p_flags;
|
|
425 old_spd = me->p_speed;
|
|
426 } else if ( (me->p_speed == 0 && old_spd) ||
|
|
427 (me->p_speed && old_spd == 0) ) {
|
|
428 if (me->p_speed > 0)
|
|
429 W_WriteText(tstatw, 2 + 6 * W_Textwidth, 3, W_Yellow, " Impulse", 8,
|
|
430 W_RegularFont);
|
|
431 else
|
|
432 W_WriteText(tstatw, 2 + 6 * W_Textwidth, 3, textColor, " Stopped", 8,
|
|
433 W_RegularFont);
|
|
434 old_spd = me->p_speed;
|
|
435 }
|
|
436 current_tourn = paradise ? status2->tourn : status->tourn;
|
|
437
|
|
438 if (fr || current_tourn != old_tourn) {
|
|
439 if (current_tourn)
|
|
440 W_WriteText(tstatw, 74, 3 + W_Textheight + SPACING, textColor, "T", 1, W_BoldFont);
|
|
441 else
|
|
442 W_WriteText(tstatw, 74, 3 + W_Textheight + SPACING, textColor, " ", 1, W_BoldFont);
|
|
443
|
|
444 old_tourn = current_tourn;
|
|
445 }
|
|
446 if (fr || me->p_kills != old_kills) {
|
|
447 if (me->p_kills > 0.0) {
|
|
448 /* W_WriteText (tstatw, column[3], 3+W_Textheight + SPACING, textColor, "Kills:", 6, W_RegularFont);*/
|
|
449 sprintf(buf, "Kills: %5.2f", me->p_kills);
|
|
450 W_WriteText(tstatw, column[3], 3 + W_Textheight + SPACING, textColor, buf, strlen(buf), W_RegularFont);
|
|
451 } else {
|
|
452 W_ClearArea(tstatw, column[3], 3 + W_Textheight + SPACING, 12 * W_Textwidth, W_Textheight);
|
|
453 }
|
|
454 old_kills = me->p_kills;
|
|
455 }
|
|
456 if (fr || me->p_ntorp != old_torp) {
|
|
457 if (me->p_ntorp > 0) {
|
|
458 /* W_WriteText (tstatw, column[3]+17*W_Textwidth, 3+W_Textheight + SPACING, textColor, "Torps:",
|
|
459 6, W_RegularFont);
|
|
460 */
|
|
461 sprintf(buf, "Torps: %d", me->p_ntorp);
|
|
462 W_WriteText(tstatw, column[3] + 17 * W_Textwidth, 3 + W_Textheight + SPACING, textColor, buf,
|
|
463 strlen(buf), W_RegularFont);
|
|
464 } else {
|
|
465 W_ClearArea(tstatw, column[3] + 17 * W_Textwidth, 3 + W_Textheight + SPACING, 8 * W_Textwidth, 10);
|
|
466 }
|
|
467 old_torp = me->p_ntorp;
|
|
468 }
|
|
469 /* code to show the number of drones out */
|
|
470 strcpy(buf, "Missiles ");
|
|
471 if (fr || me->p_totmissiles != old_totmissiles || me->p_ndrone != old_drone) {
|
|
472 if (me->p_totmissiles > 0)
|
|
473 sprintf(buf + strlen(buf), "Left: %d ", me->p_totmissiles);
|
|
474 old_totmissiles = me->p_totmissiles;
|
|
475 if (me->p_ndrone > 0)
|
|
476 sprintf(buf + strlen(buf), "Out: %d ", me->p_ndrone);
|
|
477 old_drone = me->p_ndrone;
|
|
478 if (!me->p_totmissiles && !me->p_ndrone) { /* clear missile text */
|
|
479 W_ClearArea(tstatw, column[3], 3 + 2 * (W_Textheight + SPACING), 24 * W_Textwidth, W_Textheight);
|
|
480 } else {
|
|
481 for (i = strlen(buf); i < 24; i++)
|
|
482 buf[i] = ' ';
|
|
483 buf[24] = 0;
|
|
484 W_WriteText(tstatw, column[3], 3 + 2 * (W_Textheight + SPACING), textColor, buf, 24, W_RegularFont);
|
|
485 }
|
|
486 }
|
|
487 #if 0
|
|
488 if (fr || me->p_ndrone != old_drone) {
|
|
489 if (me->p_ndrone > 0) {
|
|
490 if (!missile_text) {
|
|
491 W_WriteText(tstatw, column[3], 30, textColor,
|
|
492 "Missiles", 8, W_RegularFont);
|
|
493 }
|
|
494 sprintf(buf, "Out: %d", me->p_ndrone);
|
|
495 W_WriteText(tstatw, column[3] + W_Textwidth * 18, 30, textColor, buf, strlen(buf), W_RegularFont);
|
|
496 } else {
|
|
497 W_ClearArea(tstatw, column[3] + W_Textwidth * 18, 30, 7 * W_Textwidth, W_Textheight);
|
|
498 }
|
|
499 old_drone = me->p_ndrone;
|
|
500 }
|
|
501 if (fr || me->p_totmissiles != old_totmissiles) {
|
|
502 if (me->p_totmissiles > 0) {
|
|
503 if (!missile_text) {
|
|
504 W_WriteText(tstatw, column[3], 30, textColor,
|
|
505 "Missiles", 8, W_RegularFont);
|
|
506 }
|
|
507 sprintf(buf, "Left: %d", me->p_totmissiles);
|
|
508 W_WriteText(tstatw, column[3] + W_Textwidth * 9, 3 + 2 * (W_Textheight + SPACING),
|
|
509 textColor, buf, strlen(buf), W_RegularFont);
|
|
510 } else {
|
|
511 W_ClearArea(tstatw, column[3], 3 + 2 * (W_Textheight + SPACING), 8 * W_Textwidth, W_Textheight);
|
|
512 }
|
|
513 old_totmissiles = me->p_totmissiles;
|
|
514 }
|
|
515 if (missile_text && !me->p_totmissiles && !me->p_ndrone) /* clear missile text */
|
|
516 W_ClearArea(tstatw, column[3], 30, 9 * W_Textwidth, 10);
|
|
517 #endif /* 0 */
|
|
518 }
|
|
519
|
|
520 void
|
|
521 db_redraw_krp(fr)
|
|
522 int fr;
|
|
523 {
|
|
524 static int old_spd = -1, old_cur_spd = -1;
|
|
525 static int old_shl = -1, old_dam = -1;
|
|
526 static int old_arm = -1, old_cur_arm = -1;
|
|
527 static int old_wpn = -1, old_egn = -1;
|
|
528 static int old_ful = -1;
|
|
529 register int cur_max;
|
|
530 register int value;
|
|
531 int color;
|
|
532 int index = 0;
|
|
533 register int mid;
|
|
534
|
|
535 if (me->p_ship->s_type == STARBASE) /* SB */
|
|
536 index = 1;
|
|
537
|
|
538 if (fr)
|
|
539 W_ClearWindow(tstatw);
|
|
540
|
|
541 db_flags(fr);
|
|
542
|
|
543 #ifdef TIMER
|
|
544 db_timer(fr, 1, 3 + 2 * (W_Textheight + SPACING));
|
|
545 #endif /* TIMER */
|
|
546
|
|
547 #ifdef PACKET_LIGHTS
|
|
548 light_erase();
|
|
549 #endif /* PACKET_LIGHTS */
|
|
550
|
|
551 if (paradise)
|
|
552 cur_max = me->p_ship->s_maxspeed - (int) ((float) me->p_ship->s_maxspeed
|
|
553 * (float) me->p_damage / (float) me->p_ship->s_maxdamage);
|
|
554 else
|
|
555 cur_max = (me->p_ship->s_maxspeed + 1) - ((me->p_ship->s_maxspeed + 1) * me->p_damage)
|
|
556 / me->p_ship->s_maxdamage;
|
|
557 if (cur_max > me->p_ship->s_maxspeed)
|
|
558 cur_max = me->p_ship->s_maxspeed;
|
|
559 if (cur_max < 0)
|
|
560 cur_max = 0;
|
|
561
|
|
562 if (fr || me->p_speed != old_spd || cur_max != old_cur_spd) {
|
|
563 if (me->p_speed >= me->p_ship->s_maxspeed - 2)
|
|
564 color = W_Red;
|
|
565 else
|
|
566 color = W_Green;
|
|
567 db_bar("Sp", column[1], 3,
|
|
568 me->p_speed, cur_max, me->p_ship->s_maxspeed, DB_3DIGITS, color);
|
|
569 old_spd = me->p_speed;
|
|
570 old_cur_spd = cur_max;
|
|
571 }
|
|
572 if (fr || me->p_shield != old_shl) {
|
|
573 value = (100 * me->p_shield) / me->p_ship->s_maxshield;
|
|
574 if (value <= 16)
|
|
575 color = W_Red;
|
|
576 else if (value <= 66)
|
|
577 color = W_Yellow;
|
|
578 else
|
|
579 color = W_Green;
|
|
580 db_bar("Sh", column[1], 3 + W_Textheight + SPACING,
|
|
581 me->p_shield, me->p_ship->s_maxshield, me->p_ship->s_maxshield,
|
|
582 DB_3DIGITS, color);
|
|
583 old_shl = me->p_shield;
|
|
584 }
|
|
585 if (fr || me->p_damage != old_dam) {
|
|
586 value = (100 * (me->p_ship->s_maxdamage - me->p_damage)) / me->p_ship->s_maxdamage;
|
|
587 if (value <= 16)
|
|
588 color = W_Red;
|
|
589 else if (value <= 66)
|
|
590 color = W_Yellow;
|
|
591 else
|
|
592 color = W_Green;
|
|
593 db_bar("Hu", column[1], 3 + 2 * (W_Textheight + SPACING),
|
|
594 (me->p_ship->s_maxdamage - me->p_damage),
|
|
595 me->p_ship->s_maxdamage, me->p_ship->s_maxdamage,
|
|
596 DB_3DIGITS, color);
|
|
597 old_dam = me->p_damage;
|
|
598 }
|
|
599 if (me->p_ship->s_type == ASSAULT)
|
|
600 cur_max = (((me->p_kills * 3) > me->p_ship->s_maxarmies) ?
|
|
601 me->p_ship->s_maxarmies : (int) (me->p_kills * 3));
|
|
602 else if (me->p_ship->s_type == STARBASE)
|
|
603 cur_max = me->p_ship->s_maxarmies;
|
|
604 else
|
|
605 cur_max = (((me->p_kills * 2) > me->p_ship->s_maxarmies) ?
|
|
606 me->p_ship->s_maxarmies : (int) (me->p_kills * 2));
|
|
607
|
|
608 if (fr || me->p_armies != old_arm || cur_max != old_cur_arm) {
|
|
609 value = me->p_armies;
|
|
610 mid = me->p_ship->s_maxarmies / 3;
|
|
611 if (value <= mid)
|
|
612 color = W_Green;
|
|
613 else if (value > mid * 2)
|
|
614 color = W_Red;
|
|
615 else
|
|
616 color = W_Yellow;
|
|
617 db_bar("Ar", column[2], 3,
|
|
618 me->p_armies, cur_max, me->p_ship->s_maxarmies, DB_3DIGITS, color);
|
|
619 old_arm = me->p_armies;
|
|
620 old_cur_arm = cur_max;
|
|
621 }
|
|
622 if (fr || me->p_wtemp != old_wpn) {
|
|
623 value = (100 * me->p_wtemp) / me->p_ship->s_maxwpntemp;
|
|
624 if (value <= 16)
|
|
625 color = W_Green;
|
|
626 else if (value <= 66)
|
|
627 color = W_Yellow;
|
|
628 else
|
|
629 color = W_Red;
|
|
630 db_bar("Wt", column[2], 3 + W_Textheight + SPACING,
|
|
631 me->p_wtemp / 10, me->p_ship->s_maxwpntemp / 10, me->p_ship->s_maxwpntemp / 10, DB_3DIGITS
|
|
632 ,color);
|
|
633 old_wpn = me->p_wtemp;
|
|
634 }
|
|
635 if (fr || me->p_etemp != old_egn) {
|
|
636 value = (100 * me->p_etemp) / me->p_ship->s_maxegntemp;
|
|
637 if (value <= 16)
|
|
638 color = W_Green;
|
|
639 else if (value <= 66)
|
|
640 color = W_Yellow;
|
|
641 else
|
|
642 color = W_Red;
|
|
643 db_bar("Et", column[2], 3 + 2 * (W_Textheight + SPACING),
|
|
644 me->p_etemp / 10, me->p_ship->s_maxegntemp / 10, me->p_ship->s_maxegntemp / 10, DB_3DIGITS
|
|
645 ,color);
|
|
646 old_egn = me->p_etemp;
|
|
647 }
|
|
648 if (fr || me->p_fuel != old_ful) {
|
|
649 value = ((100 * me->p_fuel) / me->p_ship->s_maxfuel);
|
|
650 if (value <= 16)
|
|
651 color = W_Red;
|
|
652 else if (value <= 66)
|
|
653 color = W_Yellow;
|
|
654 else
|
|
655 color = W_Green;
|
|
656 db_bar("Fu", column[3], 3,
|
|
657 me->p_fuel, me->p_ship->s_maxfuel, me->p_ship->s_maxfuel, DB_5DIGITS, color);
|
|
658 old_ful = me->p_fuel;
|
|
659 }
|
|
660 }
|
|
661
|
|
662
|
|
663 void
|
|
664 db_redraw_BRM(fr)
|
|
665 int fr;
|
|
666 {
|
|
667 static int old_spd = -1, old_cur_spd = -1;
|
|
668 static int old_shl = -1, old_dam = -1;
|
|
669 static int old_arm = -1, old_cur_arm = -1;
|
|
670 static int old_wpn = -1, old_egn = -1;
|
|
671 static int old_ful = -1;
|
|
672 register int cur_max;
|
|
673 register int value;
|
|
674 int color;
|
|
675 int index = 0;
|
|
676 register int mid;
|
|
677 register int tmp;
|
|
678
|
|
679 if (me->p_ship->s_type == STARBASE) /* SB */
|
|
680 index = 1;
|
|
681
|
|
682 if (fr)
|
|
683 W_ClearWindow(tstatw);
|
|
684
|
|
685 db_flags(fr);
|
|
686
|
|
687 #ifdef TIMER
|
|
688 db_timer(fr, 1, 3 + 2 * (W_Textheight + SPACING));
|
|
689 #endif /* TIMER */
|
|
690 #ifdef PACKET_LIGHTS
|
|
691 light_erase();
|
|
692 #endif /* PACKET_LIGHTS */
|
|
693
|
|
694 cur_max = (me->p_ship->s_maxspeed + 1) - ((me->p_ship->s_maxspeed + 1) * me->p_damage)
|
|
695 / me->p_ship->s_maxdamage;
|
|
696 if (cur_max > me->p_ship->s_maxspeed)
|
|
697 cur_max = me->p_ship->s_maxspeed;
|
|
698 if (cur_max < 0)
|
|
699 cur_max = 0;
|
|
700
|
|
701 if (fr || me->p_speed != old_spd || cur_max != old_cur_spd) {
|
|
702 if (Dashboard == 3) {
|
|
703 db_color_bar("Sp", column[1], 3, me->p_speed, me->p_speed, cur_max,
|
|
704 me->p_ship->s_maxspeed, DB_3DIGITS);
|
|
705 } else {
|
|
706 if (me->p_speed >= me->p_ship->s_maxspeed - 2)
|
|
707 color = W_Yellow;
|
|
708 else
|
|
709 color = W_White;
|
|
710 db_bar("Sp", column[1], 3,
|
|
711 me->p_speed, cur_max, me->p_ship->s_maxspeed, DB_3DIGITS, color);
|
|
712 }
|
|
713 old_spd = me->p_speed;
|
|
714 old_cur_spd = cur_max;
|
|
715 }
|
|
716 if (fr || me->p_shield != old_shl) {
|
|
717 if (Dashboard == 3) {
|
|
718 tmp = me->p_ship->s_maxshield - me->p_shield;
|
|
719 db_color_bar("Sh", column[1], 3 + W_Textheight + SPACING, tmp, tmp,
|
|
720 me->p_ship->s_maxshield, me->p_ship->s_maxshield,
|
|
721 DB_3DIGITS);
|
|
722 } else {
|
|
723 value = (100 * me->p_shield) / me->p_ship->s_maxshield;
|
|
724 /*
|
|
725 mid = (distress[index].max_shld - distress[index].min_shld) /
|
|
726 2;
|
|
727 */
|
|
728 mid = 33;
|
|
729 if (value <= mid)
|
|
730 color = W_Red;
|
|
731 /* else if (value < distress[index].max_shld) */
|
|
732 else if (value < mid * 2)
|
|
733 color = W_Yellow;
|
|
734 else
|
|
735 color = W_White;
|
|
736 db_bar("Sh", column[1], 3 + W_Textheight + SPACING, me->p_ship->s_maxshield - me->p_shield,
|
|
737 me->p_ship->s_maxshield, me->p_ship->s_maxshield, DB_3DIGITS, color);
|
|
738 }
|
|
739 old_shl = me->p_shield;
|
|
740 }
|
|
741 if (fr || me->p_damage != old_dam) {
|
|
742 if (Dashboard == 3) {
|
|
743 db_color_bar("Hu", column[1], 3 + 2 * (W_Textheight + SPACING),
|
|
744 me->p_damage, me->p_damage, me->p_ship->s_maxdamage,
|
|
745 me->p_ship->s_maxdamage, DB_3DIGITS);
|
|
746 } else {
|
|
747 value = (100 * me->p_damage) / me->p_ship->s_maxdamage;
|
|
748 /* mid = (distress[index].max_dam - distress[index].min_dam) / 2; */
|
|
749 mid = 33;
|
|
750 /* if (value <= distress[index].min_dam) */
|
|
751 if (value <= mid)
|
|
752 color = W_White;
|
|
753 else if (value > mid * 2)
|
|
754 color = W_Red;
|
|
755 else
|
|
756 color = W_Yellow;
|
|
757 db_bar("Hu", column[1], 3 + 2 * (W_Textheight + SPACING),
|
|
758 me->p_damage, me->p_ship->s_maxdamage, me->p_ship->s_maxdamage, DB_3DIGITS, color);
|
|
759 }
|
|
760 old_dam = me->p_damage;
|
|
761 }
|
|
762 if (me->p_ship->s_type == ASSAULT)
|
|
763 cur_max = (((me->p_kills * 3) > me->p_ship->s_maxarmies) ?
|
|
764 me->p_ship->s_maxarmies : (int) (me->p_kills * 3));
|
|
765 else if (me->p_ship->s_type == STARBASE)
|
|
766 cur_max = me->p_ship->s_maxarmies;
|
|
767 else
|
|
768 cur_max = (((me->p_kills * 2) > me->p_ship->s_maxarmies) ?
|
|
769 me->p_ship->s_maxarmies : (int) (me->p_kills * 2));
|
|
770
|
|
771 /* doing rainbow colors for armies makes little since, so I don't */
|
|
772 if (fr || me->p_armies != old_arm || cur_max != old_cur_arm) {
|
|
773 if (Dashboard == 3) {
|
|
774 db_bar("Ar", column[2], 3,
|
|
775 me->p_armies, cur_max, me->p_ship->s_maxarmies, DB_3DIGITS, W_White);
|
|
776 } else {
|
|
777 value = me->p_armies;
|
|
778 /*
|
|
779 mid = (distress[index].max_arms - distress[index].min_arms) /
|
|
780 2;
|
|
781 */
|
|
782 mid = me->p_ship->s_maxarmies / 3;
|
|
783 /* if (value <= distress[index].min_arms) */
|
|
784 if (value <= mid)
|
|
785 color = W_White;
|
|
786 else if (value > mid * 2)
|
|
787 color = W_Red;
|
|
788 else
|
|
789 color = W_Yellow;
|
|
790 db_bar("Ar", column[2], 3,
|
|
791 me->p_armies, cur_max, me->p_ship->s_maxarmies, DB_3DIGITS, color);
|
|
792 }
|
|
793 old_arm = me->p_armies;
|
|
794 old_cur_arm = cur_max;
|
|
795 }
|
|
796 if (fr || me->p_wtemp != old_wpn) {
|
|
797 if (Dashboard == 3) {
|
|
798 tmp = me->p_wtemp / 10;
|
|
799 db_color_bar("Wt", column[2], 3 + W_Textheight + SPACING, tmp, tmp,
|
|
800 me->p_ship->s_maxwpntemp / 10,
|
|
801 me->p_ship->s_maxwpntemp / 10, DB_3DIGITS);
|
|
802 } else {
|
|
803 value = (100 * me->p_wtemp) / me->p_ship->s_maxwpntemp;
|
|
804 /*
|
|
805 mid = (distress[index].max_wtmp - distress[index].min_wtmp) /
|
|
806 2;
|
|
807 */
|
|
808 mid = 67;
|
|
809 if (value > mid)
|
|
810 color = W_Red;
|
|
811 /* else if (value <= distress[index].min_wtmp) */
|
|
812 else if (value <= mid / 2)
|
|
813 color = W_White;
|
|
814 else
|
|
815 color = W_Yellow;
|
|
816 db_bar("Wt", column[2], 3 + W_Textheight + SPACING, me->p_wtemp / 10, me->p_ship->s_maxwpntemp / 10,
|
|
817 me->p_ship->s_maxwpntemp / 10, DB_3DIGITS, color);
|
|
818 }
|
|
819 old_wpn = me->p_wtemp;
|
|
820 }
|
|
821 if (fr || me->p_etemp != old_egn) {
|
|
822 if (Dashboard == 3) {
|
|
823 tmp = me->p_etemp / 10;
|
|
824 db_color_bar("Et", column[2], 3 + 2 * (W_Textheight + SPACING), tmp, tmp,
|
|
825 me->p_ship->s_maxegntemp / 10,
|
|
826 me->p_ship->s_maxegntemp / 10, DB_3DIGITS);
|
|
827 } else {
|
|
828 value = (100 * me->p_etemp) / me->p_ship->s_maxegntemp;
|
|
829 /*
|
|
830 mid = (distress[index].max_etmp - distress[index].min_etmp) /
|
|
831 2;
|
|
832 */
|
|
833 mid = 67;
|
|
834 if (value <= mid / 2)
|
|
835 color = W_White;
|
|
836 /* else if (value < mid / 2 + mid) */
|
|
837 else if (value < mid)
|
|
838 color = W_Yellow;
|
|
839 else
|
|
840 color = W_Red;
|
|
841 db_bar("Et", column[2], 3 + 2 * (W_Textheight + SPACING), me->p_etemp / 10, me->p_ship->s_maxegntemp / 10,
|
|
842 me->p_ship->s_maxegntemp / 10, DB_3DIGITS, color);
|
|
843 }
|
|
844 old_egn = me->p_etemp;
|
|
845 }
|
|
846 if (fr || me->p_fuel != old_ful) {
|
|
847 if (Dashboard == 3) {
|
|
848 db_color_bar("Fu", column[3], 3, me->p_ship->s_maxfuel - me->p_fuel,
|
|
849 me->p_fuel, me->p_ship->s_maxfuel, me->p_ship->s_maxfuel,
|
|
850 DB_5DIGITS);
|
|
851 } else {
|
|
852 value = ((100 * me->p_fuel) / me->p_ship->s_maxfuel);
|
|
853 /*
|
|
854 mid = (distress[index].max_fuel - distress[index].min_fuel) /
|
|
855 2;
|
|
856 */
|
|
857 mid = 33;
|
|
858 if (value <= mid)
|
|
859 color = W_Red;
|
|
860 /* else if (value > distress[index].max_fuel) */
|
|
861 else if (value > mid * 2)
|
|
862 color = W_White;
|
|
863 else
|
|
864 color = W_Yellow;
|
|
865 db_bar("Fu", column[3], 3,
|
|
866 me->p_fuel, me->p_ship->s_maxfuel, me->p_ship->s_maxfuel, DB_5DIGITS, color);
|
|
867 }
|
|
868 old_ful = me->p_fuel;
|
|
869 }
|
|
870 }
|
|
871
|
|
872 void
|
|
873 db_redraw(fr)
|
|
874 int fr;
|
|
875 {
|
|
876 static int oldDashboard = -1;
|
|
877
|
|
878 if (oldDashboard < 0) { /* 1st time only? */
|
|
879 BAR_LENGTH = ((W_WindowWidth(tstatw) - 90 - 4 * W_Textwidth) / 3) - W_Textwidth * 12;
|
|
880 BAR_LENGTH_THIRD = BAR_LENGTH / 3;
|
|
881 column[0] = 2; /* not used */
|
|
882 column[1] = 90;
|
|
883 column[2] = 90 + 11 * W_Textwidth + BAR_LENGTH + 6;
|
|
884 column[3] = column[2] + 11 * W_Textwidth + BAR_LENGTH + 6;
|
|
885 }
|
|
886 if (Dashboard != oldDashboard) {
|
|
887 oldDashboard = Dashboard;
|
|
888 fr = 1;
|
|
889 }
|
|
890 if (Dashboard == 2)
|
|
891 db_redraw_krp(fr);
|
|
892 else
|
|
893 db_redraw_BRM(fr);
|
|
894 }
|
|
895
|
|
896 void
|
|
897 stline(flag)
|
|
898 int flag;
|
|
899 {
|
|
900 static char buf1[80];
|
|
901 static char buf2[80];
|
|
902 static char whichbuf = 0;
|
|
903 static int lastDashboard;
|
|
904
|
|
905 register char *buf, *oldbuf;
|
|
906 register char *s;
|
|
907 register int i, j;
|
|
908 int k;
|
|
909
|
|
910 /* if you don't do something like this, then switching in the options menu
|
|
911 is 'entertaining' */
|
|
912 if (Dashboard != lastDashboard) {
|
|
913 lastDashboard = Dashboard;
|
|
914 redrawTstats();
|
|
915 return;
|
|
916 }
|
|
917 /* use the new dashboard if we can */
|
|
918 if (Dashboard) {
|
|
919 db_redraw(flag);
|
|
920 return;
|
|
921 }
|
|
922 #ifdef TIMER
|
|
923 /* Do da clock */
|
|
924 db_timer(flag, W_WindowWidth(tstatw) - (12 * W_Textwidth + 5), 27);
|
|
925 #endif /* TIMER */
|
|
926 #ifdef PACKET_LIGHTS
|
|
927 light_erase();
|
|
928 #endif /* PACKET_LIGHTS */
|
|
929
|
|
930
|
|
931 /* Instead of one sprintf, we do all this by hand for optimization */
|
|
932
|
|
933 if (flag)
|
|
934 whichbuf = 0; /* We must completely refresh */
|
|
935
|
|
936 if (whichbuf != 2) {
|
|
937 buf = buf1;
|
|
938 oldbuf = buf2;
|
|
939 } else {
|
|
940 buf = buf2;
|
|
941 oldbuf = buf1;
|
|
942 }
|
|
943 buf[0] = (me->p_flags & PFSHIELD ? 'S' : ' ');
|
|
944 if (me->p_flags & PFGREEN)
|
|
945 buf[1] = 'G';
|
|
946 else if (me->p_flags & PFYELLOW)
|
|
947 buf[1] = 'Y';
|
|
948 else if (me->p_flags & PFRED)
|
|
949 buf[1] = 'R';
|
|
950 buf[2] = (me->p_flags & (PFPLLOCK | PFPLOCK) ? 'L' : ' ');
|
|
951 buf[3] = (me->p_flags & PFREPAIR ? 'R' : ' ');
|
|
952 buf[4] = (me->p_flags & PFBOMB ? 'B' : ' ');
|
|
953 buf[5] = (me->p_flags & PFORBIT ? 'O' : ' ');
|
|
954 buf[6] = (me->p_flags & PFDOCKOK ? 'D' : ' ');
|
|
955 /* buf[6] = (me->p_flags & PFDOCK ? 'D' : ' ');*/
|
|
956 buf[7] = (me->p_flags & PFCLOAK ? 'C' : ' ');
|
|
957 buf[8] = (me->p_flags & PFWEP ? 'W' : ' ');
|
|
958 buf[9] = (me->p_flags & PFENG ? 'E' : ' ');
|
|
959 if (me->p_flags & PFPRESS)
|
|
960 buf[10] = 'P';
|
|
961 else if (me->p_flags & PFTRACT)
|
|
962 buf[10] = 'T';
|
|
963 else
|
|
964 buf[10] = ' ';
|
|
965 if (me->p_flags & PFBEAMUP)
|
|
966 buf[11] = 'u';
|
|
967 else if (me->p_flags & PFBEAMDOWN)
|
|
968 buf[11] = 'd';
|
|
969 else
|
|
970 buf[11] = ' ';
|
|
971 if (!paradise)
|
|
972 buf[12] = (status->tourn) ? 't' : ' ';
|
|
973 else
|
|
974 buf[12] = (status2->tourn) ? 't' : ' ';
|
|
975
|
|
976 buf[13] = ' ';
|
|
977
|
|
978 #if 1
|
|
979 /* w/i indicator is a kludge - it just guesses based on the speed of
|
|
980 the ship */
|
|
981 sprintf(buf + 14, "%2d%c %3d %3d %1d %6.2f %3d %6d %4d %4d ",
|
|
982 me->p_speed, /* (me->p_speed > me->p_ship->s_maxspeed+2) */
|
|
983 me->p_flags & PFWARP ? 'w' : me->p_flags & PFAFTER ? 'a' : 'i',
|
|
984 me->p_damage, me->p_shield, me->p_ntorp, me->p_kills,
|
|
985 me->p_armies, me->p_fuel, me->p_wtemp / 10, me->p_etemp / 10);
|
|
986 #else
|
|
987 #if 0
|
|
988 TWODIGIT_L(&buf[14], me->p_speed);
|
|
989 buf[16] = 'i';
|
|
990 buf[17] = ' ';
|
|
991 buf[18] = ' ';
|
|
992 buf[19] = ' ';
|
|
993 THREEDIGIT_R(&buf[20], me->p_damage);
|
|
994 buf[23] = ' ';
|
|
995 THREEDIGIT_R(&buf[24], me->p_shield);
|
|
996 buf[27] = ' ';
|
|
997 TWODIGIT_R(&buf[28], me->p_ntorp);
|
|
998 buf[30] = ' ';
|
|
999 buf[31] = ' ';
|
|
1000 SIXnTWOf_R(&buf[32], me->p_kills);
|
|
1001 buf[38] = ' ';
|
|
1002 THREEDIGIT_C(&buf[39], me->p_armies);
|
|
1003 buf[42] = ' ';
|
|
1004 SIXDIGIT_R(&buf[43], me->p_fuel);
|
|
1005 buf[49] = ' ';
|
|
1006 buf[50] = ' ';
|
|
1007 FOURDIGIT_R(&buf[51], me->p_wtemp);
|
|
1008 buf[55] = ' ';
|
|
1009 FOURDIGIT_R(&buf[56], me->p_wtemp);
|
|
1010 buf[60] = ' ';
|
|
1011 buf[61] = ' ';
|
|
1012 #else /* 0 */
|
|
1013 buf[14] = '0' + ((me->p_speed % 100) / 10);
|
|
1014 if (buf[14] == '0')
|
|
1015 buf[14] = ' ';
|
|
1016 buf[15] = '0' + (me->p_speed % 10); /* speed */
|
|
1017 buf[16] = ' ';
|
|
1018 buf[17] = ' ';
|
|
1019 buf[18] = '0' + (me->p_damage / 100);
|
|
1020 if (buf[18] == '0')
|
|
1021 buf[18] = ' ';
|
|
1022 buf[19] = '0' + ((me->p_damage % 100) / 10);
|
|
1023 if ((buf[19] == '0') && (me->p_damage < 100))
|
|
1024 buf[19] = ' ';
|
|
1025 buf[20] = '0' + (me->p_damage % 10);
|
|
1026 buf[21] = ' ';
|
|
1027 buf[22] = '0' + (me->p_shield / 100);
|
|
1028 if (buf[22] == '0')
|
|
1029 buf[22] = ' ';
|
|
1030 buf[23] = '0' + ((me->p_shield % 100) / 10);
|
|
1031 if ((buf[23] == '0') && (me->p_shield < 100))
|
|
1032 buf[23] = ' ';
|
|
1033 buf[24] = '0' + (me->p_shield % 10);
|
|
1034 buf[25] = ' ';
|
|
1035 buf[26] = ' ';
|
|
1036 buf[27] = '0' + ((me->p_ntorp % 100) / 10);
|
|
1037 if (buf[27] == '0')
|
|
1038 buf[27] = ' ';
|
|
1039 buf[28] = '0' + (me->p_ntorp % 10);
|
|
1040 buf[29] = ' ';
|
|
1041 buf[30] = ' ';
|
|
1042 buf[31] = ' ';
|
|
1043 buf[32] = ' ';
|
|
1044 buf[33] = '0' + ((int) (me->p_kills / 10));
|
|
1045 if (buf[33] == '0')
|
|
1046 buf[33] = ' ';
|
|
1047 buf[34] = '0' + (((int) me->p_kills) % 10);
|
|
1048 buf[35] = '.';
|
|
1049 buf[36] = '0' + (((int) (me->p_kills * 10)) % 10);
|
|
1050 buf[37] = '0' + (((int) (me->p_kills * 100)) % 10);
|
|
1051 buf[38] = ' ';
|
|
1052 buf[39] = ' ';
|
|
1053 buf[40] = ' ';
|
|
1054 buf[41] = '0' + ((me->p_armies % 100) / 10);
|
|
1055 if (buf[41] == '0')
|
|
1056 buf[41] = ' ';
|
|
1057 buf[42] = '0' + (me->p_armies % 10);
|
|
1058 buf[43] = ' ';
|
|
1059 buf[44] = ' ';
|
|
1060 buf[45] = ' ';
|
|
1061
|
|
1062 buf[46] = '0' + (me->p_fuel / 100000);
|
|
1063 if (buf[46] == '0')
|
|
1064 buf[46] = ' ';
|
|
1065 buf[47] = '0' + ((me->p_fuel % 100000) / 10000);
|
|
1066 if ((buf[47] == '0') && (me->p_fuel < 100000))
|
|
1067 buf[47] = ' ';
|
|
1068 buf[48] = '0' + ((me->p_fuel % 10000) / 1000);
|
|
1069 if ((buf[48] == '0') && (me->p_fuel < 10000))
|
|
1070 buf[48] = ' ';
|
|
1071 buf[49] = '0' + ((me->p_fuel % 1000) / 100);
|
|
1072 if ((buf[49] == '0') && (me->p_fuel < 1000))
|
|
1073 buf[49] = ' ';
|
|
1074 buf[50] = '0' + ((me->p_fuel % 100) / 10);
|
|
1075 if ((buf[50] == '0') && (me->p_fuel < 100))
|
|
1076 buf[50] = ' ';
|
|
1077 buf[51] = '0' + (me->p_fuel % 10);
|
|
1078 buf[52] = ' ';
|
|
1079 buf[53] = ' ';
|
|
1080 buf[54] = ' ';
|
|
1081
|
|
1082 buf[55] = '0' + ((me->p_wtemp / 10) / 100);
|
|
1083 if (buf[55] == '0')
|
|
1084 buf[55] = ' ';
|
|
1085 buf[56] = '0' + (((me->p_wtemp / 10) % 100) / 10);
|
|
1086 if ((buf[56] == '0') && (me->p_wtemp < 1000))
|
|
1087 buf[56] = ' ';
|
|
1088 buf[57] = '0' + ((me->p_wtemp / 10) % 10);
|
|
1089
|
|
1090 buf[58] = ' ';
|
|
1091 buf[59] = ' ';
|
|
1092 buf[60] = ' ';
|
|
1093 buf[61] = '0' + ((me->p_etemp / 10) / 1000);
|
|
1094 if (buf[61] == '0')
|
|
1095 buf[61] = ' ';
|
|
1096 buf[62] = '0' + (((me->p_etemp / 10) % 1000) / 100);
|
|
1097 if (buf[62] == '0' && me->p_etemp < 1000)
|
|
1098 buf[62] = ' ';
|
|
1099 buf[63] = '0' + (((me->p_etemp / 10) % 100) / 10);
|
|
1100 if ((buf[63] == '0') && (me->p_etemp < 1000))
|
|
1101 buf[63] = ' ';
|
|
1102 buf[64] = '0' + ((me->p_etemp / 10) % 10);
|
|
1103 buf[65] = ' ';
|
|
1104 #endif /* 0 */
|
|
1105 #endif
|
|
1106
|
|
1107 if (whichbuf == 0) {
|
|
1108 /* Draw status line */
|
|
1109 W_WriteText(tstatw, TSTATW_BASEX, 16, textColor, buf, 66, W_RegularFont);
|
|
1110 whichbuf = 1;
|
|
1111 } else { /* Hacks to make it print only what is
|
|
1112 necessary */
|
|
1113 whichbuf = 3 - whichbuf;
|
|
1114 j = -1;
|
|
1115 for (i = 0; i < 66; i++) {
|
|
1116 if (*(buf++) != *(oldbuf++)) {
|
|
1117 /* Different string */
|
|
1118 if (j == -1) {
|
|
1119 k = i;
|
|
1120 s = buf - 1;
|
|
1121 }
|
|
1122 j = 0;
|
|
1123 } else {
|
|
1124 /* Same string */
|
|
1125 if (j == -1)
|
|
1126 continue;
|
|
1127 j++;
|
|
1128 if (j == 20) { /* Random number */
|
|
1129 W_WriteText(tstatw, TSTATW_BASEX + W_Textwidth * k, 16, textColor,
|
|
1130 s, i - k - 19, W_RegularFont);
|
|
1131 j = -1;
|
|
1132 }
|
|
1133 }
|
|
1134 }
|
|
1135 if (j != -1) {
|
|
1136 W_WriteText(tstatw, TSTATW_BASEX + W_Textwidth * k, 16, textColor, s, i - k - j,
|
|
1137 W_RegularFont);
|
|
1138 }
|
|
1139 }
|
|
1140 }
|
|
1141
|
|
1142 void
|
|
1143 redrawTstats()
|
|
1144 {
|
|
1145 char buf[100];
|
|
1146
|
|
1147 W_ClearWindow(tstatw);
|
|
1148 /* use new dashboard if possible */
|
|
1149 if (Dashboard) {
|
|
1150 db_redraw(1);
|
|
1151 return;
|
|
1152 }
|
|
1153 stline(1); /* This is for refresh. We redraw player
|
|
1154 stats too */
|
|
1155 strcpy(buf, "Flags Speed Dam Shd Trp Kills Ams Fuel Wtmp Etmp Special" /* "Flags Warp
|
|
1156 Dam Shd Torps Kills
|
|
1157 Armies Fuel Wtemp
|
|
1158 Etemp" */ );
|
|
1159 W_WriteText(tstatw, TSTATW_BASEX, 5, textColor, buf, strlen(buf), W_RegularFont);
|
|
1160 sprintf(buf,
|
|
1161 "Maximum: %2d %3d %3d 8 %3d %6d %4d %4d ",
|
|
1162 me->p_ship->s_maxspeed, me->p_ship->s_maxdamage,
|
|
1163 me->p_ship->s_maxshield, me->p_ship->s_maxarmies,
|
|
1164 me->p_ship->s_maxfuel, me->p_ship->s_maxwpntemp / 10,
|
|
1165 me->p_ship->s_maxegntemp / 10);
|
|
1166 W_WriteText(tstatw, TSTATW_BASEX, 27, textColor, buf, strlen(buf), W_RegularFont);
|
|
1167 }
|