1/* Header: play.c,v 7.0.1.1 86/10/16 10:52:39 lwall Exp */
2
3/* Log:	play.c,v
4 * Revision 7.0.1.1  86/10/16  10:52:39  lwall
5 * Added Damage.  Fixed random bugs.
6 *
7 * Revision 7.0  86/10/08  15:13:09  lwall
8 * Split into separate files.  Added amoebas and pirates.
9 *
10 */
11
12#include "EXTERN.h"
13#include "warp.h"
14#include "bang.h"
15#include "score.h"
16#include "object.h"
17#include "move.h"
18#include "term.h"
19#include "them.h"
20#include "us.h"
21#include "util.h"
22#include "weapon.h"
23#include "INTERN.h"
24#include "play.h"
25
26void
27play_init(void)
28{
29    ;
30}
31
32void
33play(void)
34{
35    bool done = false;
36    OBJECT *curobj;
37    OBJECT *to;
38    int i;
39    int x;
40    int y;
41
42    display_status();
43#ifdef TIOCOUTQ
44    while (output_pending() > charsperhalfsec)
45	sleep(1);			 /* allow buffers to empty */
46#endif
47    sleep(3);
48    do {
49	timer++;
50	nxtbang = 0;
51	banging = false;
52	display_status();
53#ifdef TIOCOUTQ
54	while (output_pending() > charsperhalfsec)
55	    sleep(1);
56#endif
57	if (lowspeed)
58	    roundsleep(2);
59	else
60	    roundsleep(1);
61	if (ent) {
62	    evely = ent->vely;
63	    evelx = ent->velx;
64	    if (cloaking && ent->energy >= 250 && !damflag[NOCLOAKING]) {
65		if (!rand_mod(300)) {
66		    damage++;
67		    damflag[NOCLOAKING] = rand_mod(smarts+1)+2;
68		}
69		ent->energy -= ent->energy/40;
70	    }
71	    else
72		cloaking = false;
73	    cloaked = cloaking;
74	}
75	if (base) {
76	    bvely = base->vely;
77	    bvelx = base->velx;
78	}
79	get_commands(&done);
80	if (done)
81	    break;
82	their_smarts();
83	apolloflag = 0;
84	if (ent) {
85	    if (numapollos) {
86		if (numstars) {
87		    if (realapollo) {
88			if (lookfor(realapollo->posy,realapollo->posx,
89			    Enterprise)) {
90			    apolloflag = 1;
91			}
92		    }
93		    else if (lookfor(root.next->posy,root.next->posx,
94			Enterprise)) {
95			apolloflag = 1;
96			realapollo = root.next;
97			mvaddch(realapollo->posy+1,realapollo->posx*2,
98			    'A');
99			realapollo->image = 'A';
100			realapollo->mass = 6000;
101			inumapollos = 1;
102			numenemies++;
103			inumenemies++;
104			possiblescore += 5000;
105		    }
106		    if (apolloflag) {
107			if (blast[realapollo->posy][realapollo->posx] <= 32000)
108			    evely = evelx = 0;
109			realapollo->energy = 32000;
110		    }
111		}
112		else
113		    numapollos = 0;
114	    }
115	    ent->vely = evely;
116	    ent->velx = evelx;
117	}
118	if (base) {
119	    if (numapollos) {
120		if (numstars) {
121		    if (realapollo) {
122			if (lookfor(realapollo->posy,realapollo->posx,
123			    Base)) {
124			    apolloflag |= 2;
125			}
126		    }
127		    else if (lookfor(root.next->posy,root.next->posx,
128			Base)) {
129			apolloflag |= 2;
130			realapollo = root.next;
131			mvaddch(realapollo->posy+1,realapollo->posx*2,
132			    'A');
133			realapollo->image = 'A';
134			realapollo->mass = 6000;
135			inumapollos = 1;
136			numenemies++;
137			inumenemies++;
138			possiblescore += 5000;
139		    }
140		    if (apolloflag & 2) {
141			if (blast[realapollo->posy][realapollo->posx] <= 32000)
142			    bvely = bvelx = 0;
143			realapollo->energy = 32000;
144		    }
145		}
146		else
147		    numapollos = 0;
148	    }
149	    base->vely = bvely;
150	    base->velx = bvelx;
151	}
152	if (aretorps) {
153	    aretorps = 0;
154	    for (i=0;i<2;i++) for (y=0;y<3;y++) for (x=0;x<3;x++) {
155		if ((curobj = isatorp[i][y][x]) != NULL) {
156		    to = occupant[(curobj->posy+curobj->vely+YSIZE00)%YSIZE]
157				 [(curobj->posx+curobj->velx+XSIZE00)%XSIZE];
158		    if (to && !to->vely && !to->velx) {
159			unmake_object(curobj);
160			if (i)
161			    btorp++;
162			else
163			    etorp++;
164		    }
165		    isatorp[i][y][x]=0;
166		}
167	    }
168	}
169	move_universe();
170	if (finish) {
171	    finish--;
172	    if (!finish && (!(numenemies || numos) || (!ent && !base))) {
173		done = true;
174		timer -= 5;
175	    }
176	}
177	else if (!banging && (!(numenemies || numos) || (!ent && !base)))
178	    finish = 5;
179    } while (!done);
180}
181