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