181 lines
3.6 KiB
C
181 lines
3.6 KiB
C
/* Header: play.c,v 7.0.1.1 86/10/16 10:52:39 lwall Exp */
|
|
|
|
/* Log: play.c,v
|
|
* Revision 7.0.1.1 86/10/16 10:52:39 lwall
|
|
* Added Damage. Fixed random bugs.
|
|
*
|
|
* Revision 7.0 86/10/08 15:13:09 lwall
|
|
* Split into separate files. Added amoebas and pirates.
|
|
*
|
|
*/
|
|
|
|
#include "EXTERN.h"
|
|
#include "warp.h"
|
|
#include "bang.h"
|
|
#include "score.h"
|
|
#include "object.h"
|
|
#include "move.h"
|
|
#include "term.h"
|
|
#include "them.h"
|
|
#include "us.h"
|
|
#include "util.h"
|
|
#include "weapon.h"
|
|
#include "INTERN.h"
|
|
#include "play.h"
|
|
|
|
void
|
|
play_init(void)
|
|
{
|
|
;
|
|
}
|
|
|
|
void
|
|
play(void)
|
|
{
|
|
bool done = false;
|
|
OBJECT *curobj;
|
|
OBJECT *to;
|
|
int i;
|
|
int x;
|
|
int y;
|
|
|
|
display_status();
|
|
#ifdef TIOCOUTQ
|
|
while (output_pending() > charsperhalfsec)
|
|
sleep(1); /* allow buffers to empty */
|
|
#endif
|
|
sleep(3);
|
|
do {
|
|
timer++;
|
|
nxtbang = 0;
|
|
banging = false;
|
|
display_status();
|
|
#ifdef TIOCOUTQ
|
|
while (output_pending() > charsperhalfsec)
|
|
sleep(1);
|
|
#endif
|
|
if (lowspeed)
|
|
roundsleep(2);
|
|
else
|
|
roundsleep(1);
|
|
if (ent) {
|
|
evely = ent->vely;
|
|
evelx = ent->velx;
|
|
if (cloaking && ent->energy >= 250 && !damflag[NOCLOAKING]) {
|
|
if (!rand_mod(300)) {
|
|
damage++;
|
|
damflag[NOCLOAKING] = rand_mod(smarts+1)+2;
|
|
}
|
|
ent->energy -= ent->energy/40;
|
|
}
|
|
else
|
|
cloaking = false;
|
|
cloaked = cloaking;
|
|
}
|
|
if (base) {
|
|
bvely = base->vely;
|
|
bvelx = base->velx;
|
|
}
|
|
get_commands(&done);
|
|
if (done)
|
|
break;
|
|
their_smarts();
|
|
apolloflag = 0;
|
|
if (ent) {
|
|
if (numapollos) {
|
|
if (numstars) {
|
|
if (realapollo) {
|
|
if (lookfor(realapollo->posy,realapollo->posx,
|
|
Enterprise)) {
|
|
apolloflag = 1;
|
|
}
|
|
}
|
|
else if (lookfor(root.next->posy,root.next->posx,
|
|
Enterprise)) {
|
|
apolloflag = 1;
|
|
realapollo = root.next;
|
|
mvaddch(realapollo->posy+1,realapollo->posx*2,
|
|
'A');
|
|
realapollo->image = 'A';
|
|
realapollo->mass = 6000;
|
|
inumapollos = 1;
|
|
numenemies++;
|
|
inumenemies++;
|
|
possiblescore += 5000;
|
|
}
|
|
if (apolloflag) {
|
|
if (blast[realapollo->posy][realapollo->posx] <= 32000)
|
|
evely = evelx = 0;
|
|
realapollo->energy = 32000;
|
|
}
|
|
}
|
|
else
|
|
numapollos = 0;
|
|
}
|
|
ent->vely = evely;
|
|
ent->velx = evelx;
|
|
}
|
|
if (base) {
|
|
if (numapollos) {
|
|
if (numstars) {
|
|
if (realapollo) {
|
|
if (lookfor(realapollo->posy,realapollo->posx,
|
|
Base)) {
|
|
apolloflag |= 2;
|
|
}
|
|
}
|
|
else if (lookfor(root.next->posy,root.next->posx,
|
|
Base)) {
|
|
apolloflag |= 2;
|
|
realapollo = root.next;
|
|
mvaddch(realapollo->posy+1,realapollo->posx*2,
|
|
'A');
|
|
realapollo->image = 'A';
|
|
realapollo->mass = 6000;
|
|
inumapollos = 1;
|
|
numenemies++;
|
|
inumenemies++;
|
|
possiblescore += 5000;
|
|
}
|
|
if (apolloflag & 2) {
|
|
if (blast[realapollo->posy][realapollo->posx] <= 32000)
|
|
bvely = bvelx = 0;
|
|
realapollo->energy = 32000;
|
|
}
|
|
}
|
|
else
|
|
numapollos = 0;
|
|
}
|
|
base->vely = bvely;
|
|
base->velx = bvelx;
|
|
}
|
|
if (aretorps) {
|
|
aretorps = 0;
|
|
for (i=0;i<2;i++) for (y=0;y<3;y++) for (x=0;x<3;x++) {
|
|
if ((curobj = isatorp[i][y][x]) != NULL) {
|
|
to = occupant[(curobj->posy+curobj->vely+YSIZE00)%YSIZE]
|
|
[(curobj->posx+curobj->velx+XSIZE00)%XSIZE];
|
|
if (to && !to->vely && !to->velx) {
|
|
unmake_object(curobj);
|
|
if (i)
|
|
btorp++;
|
|
else
|
|
etorp++;
|
|
}
|
|
isatorp[i][y][x]=0;
|
|
}
|
|
}
|
|
}
|
|
move_universe();
|
|
if (finish) {
|
|
finish--;
|
|
if (!finish && (!(numenemies || numos) || (!ent && !base))) {
|
|
done = true;
|
|
timer -= 5;
|
|
}
|
|
}
|
|
else if (!banging && (!(numenemies || numos) || (!ent && !base)))
|
|
finish = 5;
|
|
} while (!done);
|
|
}
|