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