Home | History | Annotate | Line # | Download | only in warp
play.c revision 1.1
      1  1.1  kamil /* $Header: /tank/opengrok/rsync2/NetBSD/src/games/warp/play.c,v 1.1 2020/11/09 23:37:05 kamil Exp $ */
      2  1.1  kamil 
      3  1.1  kamil /* $Log: play.c,v $
      4  1.1  kamil /* Revision 1.1  2020/11/09 23:37:05  kamil
      5  1.1  kamil /* Add Warp Kit, Version 7.0 by Larry Wall
      6  1.1  kamil /*
      7  1.1  kamil /* Warp is a real-time space war game that doesn't get boring very quickly.
      8  1.1  kamil /* Read warp.doc and the manual page for more information.
      9  1.1  kamil /*
     10  1.1  kamil /* games/warp originally distributed with 4.3BSD-Reno, is back to the BSD
     11  1.1  kamil /* world via NetBSD. Its remnants were still mentioned in games/Makefile.
     12  1.1  kamil /*
     13  1.1  kamil /* Larry Wall, the original author and the copyright holder, generously
     14  1.1  kamil /* donated the game and copyright to The NetBSD Foundation, Inc.
     15  1.1  kamil /*
     16  1.1  kamil /* Import the game sources as-is from 4.3BSD-Reno, with the cession
     17  1.1  kamil /* of the copyright and license to BSD-2-clause NetBSD-style.
     18  1.1  kamil /*
     19  1.1  kamil /* Signed-off-by: Larry Wall <larry (at) wall.org>
     20  1.1  kamil /* Signed-off-by: Kamil Rytarowski <kamil (at) netbsd.org>
     21  1.1  kamil /*
     22  1.1  kamil  * Revision 7.0.1.1  86/10/16  10:52:39  lwall
     23  1.1  kamil  * Added Damage.  Fixed random bugs.
     24  1.1  kamil  *
     25  1.1  kamil  * Revision 7.0  86/10/08  15:13:09  lwall
     26  1.1  kamil  * Split into separate files.  Added amoebas and pirates.
     27  1.1  kamil  *
     28  1.1  kamil  */
     29  1.1  kamil 
     30  1.1  kamil #include "EXTERN.h"
     31  1.1  kamil #include "warp.h"
     32  1.1  kamil #include "bang.h"
     33  1.1  kamil #include "score.h"
     34  1.1  kamil #include "object.h"
     35  1.1  kamil #include "move.h"
     36  1.1  kamil #include "term.h"
     37  1.1  kamil #include "them.h"
     38  1.1  kamil #include "us.h"
     39  1.1  kamil #include "util.h"
     40  1.1  kamil #include "weapon.h"
     41  1.1  kamil #include "INTERN.h"
     42  1.1  kamil #include "play.h"
     43  1.1  kamil 
     44  1.1  kamil void
     45  1.1  kamil play_init()
     46  1.1  kamil {
     47  1.1  kamil     ;
     48  1.1  kamil }
     49  1.1  kamil 
     50  1.1  kamil void
     51  1.1  kamil play()
     52  1.1  kamil {
     53  1.1  kamil     bool done = FALSE;
     54  1.1  kamil     Reg1 OBJECT *curobj;
     55  1.1  kamil     Reg2 OBJECT *to;
     56  1.1  kamil     Reg3 int i;
     57  1.1  kamil     Reg4 int x;
     58  1.1  kamil     Reg5 int y;
     59  1.1  kamil 
     60  1.1  kamil     display_status();
     61  1.1  kamil #ifdef TIOCOUTQ
     62  1.1  kamil     while (output_pending() > charsperhalfsec)
     63  1.1  kamil 	sleep(1);			 /* allow buffers to empty */
     64  1.1  kamil #endif
     65  1.1  kamil     sleep(3);
     66  1.1  kamil     do {
     67  1.1  kamil 	timer++;
     68  1.1  kamil 	nxtbang = 0;
     69  1.1  kamil 	banging = FALSE;
     70  1.1  kamil 	display_status();
     71  1.1  kamil #ifdef TIOCOUTQ
     72  1.1  kamil 	while (output_pending() > charsperhalfsec)
     73  1.1  kamil 	    sleep(1);
     74  1.1  kamil #endif
     75  1.1  kamil 	if (lowspeed)
     76  1.1  kamil 	    roundsleep(2);
     77  1.1  kamil 	else
     78  1.1  kamil 	    roundsleep(1);
     79  1.1  kamil 	if (ent) {
     80  1.1  kamil 	    evely = ent->vely;
     81  1.1  kamil 	    evelx = ent->velx;
     82  1.1  kamil 	    if (cloaking && ent->energy >= 250 && !damflag[NOCLOAKING]) {
     83  1.1  kamil 		if (!rand_mod(300)) {
     84  1.1  kamil 		    damage++;
     85  1.1  kamil 		    damflag[NOCLOAKING] = rand_mod(smarts+1)+2;
     86  1.1  kamil 		}
     87  1.1  kamil 		ent->energy -= ent->energy/40;
     88  1.1  kamil 	    }
     89  1.1  kamil 	    else
     90  1.1  kamil 		cloaking = FALSE;
     91  1.1  kamil 	    cloaked = cloaking;
     92  1.1  kamil 	}
     93  1.1  kamil 	if (base) {
     94  1.1  kamil 	    bvely = base->vely;
     95  1.1  kamil 	    bvelx = base->velx;
     96  1.1  kamil 	}
     97  1.1  kamil 	get_commands(&done);
     98  1.1  kamil 	if (done)
     99  1.1  kamil 	    break;
    100  1.1  kamil 	their_smarts();
    101  1.1  kamil 	apolloflag = 0;
    102  1.1  kamil 	if (ent) {
    103  1.1  kamil 	    if (numapollos) {
    104  1.1  kamil 		if (numstars) {
    105  1.1  kamil 		    if (realapollo) {
    106  1.1  kamil 			if (lookfor(realapollo->posy,realapollo->posx,
    107  1.1  kamil 			    Enterprise)) {
    108  1.1  kamil 			    apolloflag = 1;
    109  1.1  kamil 			}
    110  1.1  kamil 		    }
    111  1.1  kamil 		    else if (lookfor(root.next->posy,root.next->posx,
    112  1.1  kamil 			Enterprise)) {
    113  1.1  kamil 			apolloflag = 1;
    114  1.1  kamil 			realapollo = root.next;
    115  1.1  kamil 			mvaddch(realapollo->posy+1,realapollo->posx*2,
    116  1.1  kamil 			    'A');
    117  1.1  kamil 			realapollo->image = 'A';
    118  1.1  kamil 			realapollo->mass = 6000;
    119  1.1  kamil 			inumapollos = 1;
    120  1.1  kamil 			numenemies++;
    121  1.1  kamil 			inumenemies++;
    122  1.1  kamil 			possiblescore += 5000;
    123  1.1  kamil 		    }
    124  1.1  kamil 		    if (apolloflag) {
    125  1.1  kamil 			if (blast[realapollo->posy][realapollo->posx] <= 32000)
    126  1.1  kamil 			    evely = evelx = 0;
    127  1.1  kamil 			realapollo->energy = 32000;
    128  1.1  kamil 		    }
    129  1.1  kamil 		}
    130  1.1  kamil 		else
    131  1.1  kamil 		    numapollos = 0;
    132  1.1  kamil 	    }
    133  1.1  kamil 	    ent->vely = evely;
    134  1.1  kamil 	    ent->velx = evelx;
    135  1.1  kamil 	}
    136  1.1  kamil 	if (base) {
    137  1.1  kamil 	    if (numapollos) {
    138  1.1  kamil 		if (numstars) {
    139  1.1  kamil 		    if (realapollo) {
    140  1.1  kamil 			if (lookfor(realapollo->posy,realapollo->posx,
    141  1.1  kamil 			    Base)) {
    142  1.1  kamil 			    apolloflag |= 2;
    143  1.1  kamil 			}
    144  1.1  kamil 		    }
    145  1.1  kamil 		    else if (lookfor(root.next->posy,root.next->posx,
    146  1.1  kamil 			Base)) {
    147  1.1  kamil 			apolloflag |= 2;
    148  1.1  kamil 			realapollo = root.next;
    149  1.1  kamil 			mvaddch(realapollo->posy+1,realapollo->posx*2,
    150  1.1  kamil 			    'A');
    151  1.1  kamil 			realapollo->image = 'A';
    152  1.1  kamil 			realapollo->mass = 6000;
    153  1.1  kamil 			inumapollos = 1;
    154  1.1  kamil 			numenemies++;
    155  1.1  kamil 			inumenemies++;
    156  1.1  kamil 			possiblescore += 5000;
    157  1.1  kamil 		    }
    158  1.1  kamil 		    if (apolloflag & 2) {
    159  1.1  kamil 			if (blast[realapollo->posy][realapollo->posx] <= 32000)
    160  1.1  kamil 			    bvely = bvelx = 0;
    161  1.1  kamil 			realapollo->energy = 32000;
    162  1.1  kamil 		    }
    163  1.1  kamil 		}
    164  1.1  kamil 		else
    165  1.1  kamil 		    numapollos = 0;
    166  1.1  kamil 	    }
    167  1.1  kamil 	    base->vely = bvely;
    168  1.1  kamil 	    base->velx = bvelx;
    169  1.1  kamil 	}
    170  1.1  kamil 	if (aretorps) {
    171  1.1  kamil 	    aretorps = 0;
    172  1.1  kamil 	    for (i=0;i<2;i++) for (y=0;y<3;y++) for (x=0;x<3;x++) {
    173  1.1  kamil 		if (curobj = isatorp[i][y][x]) {
    174  1.1  kamil 		    to = occupant[(curobj->posy+curobj->vely+YSIZE00)%YSIZE]
    175  1.1  kamil 				 [(curobj->posx+curobj->velx+XSIZE00)%XSIZE];
    176  1.1  kamil 		    if (to && !to->vely && !to->velx) {
    177  1.1  kamil 			unmake_object(curobj);
    178  1.1  kamil 			if (i)
    179  1.1  kamil 			    btorp++;
    180  1.1  kamil 			else
    181             			    etorp++;
    182             		    }
    183             		    isatorp[i][y][x]=0;
    184             		}
    185             	    }
    186             	}
    187             	move_universe();
    188             	if (finish) {
    189             	    finish--;
    190             	    if (!finish && (!(numenemies || numos) || (!ent && !base))) {
    191             		done = TRUE;
    192             		timer -= 5;
    193             	    }
    194             	}
    195             	else if (!banging && (!(numenemies || numos) || (!ent && !base)))
    196             	    finish = 5;
    197                 } while (!done);
    198             }
    199