Annotation of researchv10no/games/trek/move.c, revision 1.1.1.1

1.1       root        1: # include      "trek.h"
                      2: 
                      3: /**
                      4:  **    move under warp or impulse power
                      5:  **/
                      6: 
                      7: float newpos(ramflg, course, time, speed)
                      8: int    ramflg;
                      9: int    course;
                     10: float  time;
                     11: float  speed;
                     12: {
                     13:        double                  angle;
                     14:        float                   x, y, dx, dy;
                     15:        register int            ix, iy;
                     16:        double                  bigger;
                     17:        int                     n;
                     18:        register int            i;
                     19:        float                   dist;
                     20:        float                   sectsize;
                     21:        double                  xn;
                     22:        float                   evtime;
                     23: 
                     24:        sectsize = NSECTS;
                     25:        /* initialize delta factors for move */
                     26:        angle = course * 0.0174532925;
                     27:        if (Damage[SINS])
                     28:                angle =+ Param.navigcrud[1] * (franf() - 0.5);
                     29:        else
                     30:                if (Status.sinsbad)
                     31:                        angle =+ Param.navigcrud[0] * (franf() - 0.5);
                     32:        dx = -cos(angle);
                     33:        dy = sin(angle);
                     34:        bigger = fabs(dx);
                     35:        dist = fabs(dy);
                     36:        if (dist > bigger)
                     37:                bigger = dist;
                     38:        dx =/ bigger;
                     39:        dy =/ bigger;
                     40: 
                     41:        /* check for LRTB */
                     42:        evtime = Etc.eventptr[E_LRTB]->date - Status.date;
                     43:        if (time > evtime && Nkling < 3)
                     44:        {
                     45:                time = evtime + 0.05;
                     46:        }
                     47:        dist = time * speed;
                     48: 
                     49:        /* move within quadrant */
                     50:        Sect[Sectx][Secty] = EMPTY;
                     51:        x = Sectx + 0.5;
                     52:        y = Secty + 0.5;
                     53:        xn = NSECTS * dist * bigger;
                     54:        n = xn + 0.5;
                     55:        Move.free = 0;
                     56: 
                     57:        for (i = 0; i < n; i++)
                     58:        {
                     59:                ix = (x =+ dx);
                     60:                iy = (y =+ dy);
                     61:                if (x < 0.0 || y < 0.0 || x >= sectsize || y >= sectsize)
                     62:                {
                     63:                        /* enter new quadrant */
                     64:                        ix = (Quadx * NSECTS + Sectx + dx * xn + 0.5);
                     65:                        iy = (Quady * NSECTS + Secty + dy * xn + 0.5);
                     66:                        Sectx = x;
                     67:                        Secty = y;
                     68:                        compkldist(0);
                     69:                        Move.newquad = 2;
                     70:                        attack(0);
                     71:                        checkcond();
                     72:                        Quadx = ix / NSECTS;
                     73:                        Quady = iy / NSECTS;
                     74:                        Sectx = ix % NSECTS;
                     75:                        Secty = iy % NSECTS;
                     76:                        if (ix < 0 || Quadx >= NQUADS || iy < 0 || Quady >= NQUADS)
                     77:                                barrier("negative energy barrier");
                     78:                        else    initquad(0);
                     79:                        n = 0;
                     80:                        break;
                     81:                }
                     82:                if (Sect[ix][iy] != EMPTY)
                     83:                {
                     84:                        /* we just hit something */
                     85:                        if (Damage[COMPUTER] || ramflg) {
                     86:                                collide(ix, iy);
                     87:                                ix = x - dx;
                     88:                                iy = y - dy;
                     89:                        } else if(Sect[ix][iy]==BLACKHOLE) {
                     90:                                printf("Spock: Captain, We are approaching a black hole\n");
                     91:                                barrier("black hole");
                     92:                                Status.resource =- Status.kling * (franf() + 0.5);
                     93:                                n = 0;
                     94:                        } else {
                     95:                                ix = x - dx;
                     96:                                iy = y - dy;
                     97:                                printf("Computer reports navigation error; %s stopped at %d,%d\n",
                     98:                                        Status.shipname, ix, iy);
                     99:                                Status.energy =- Param.stopengy * speed;
                    100:                        }
                    101:                        break;
                    102:                }
                    103:        }
                    104:        if (n > 0)
                    105:        {
                    106:                dx = Sectx - ix;
                    107:                dy = Secty - iy;
                    108:                dist = sqrt(dx * dx + dy * dy) / NSECTS;
                    109:                time = dist / speed;
                    110:                Sectx = ix;
                    111:                Secty = iy;
                    112:        }
                    113:        Sect[Sectx][Secty] = Status.ship;
                    114:        compkldist(0);
                    115:        return(time);
                    116: }
                    117: 
                    118: barrier(msg)
                    119: char   *msg;
                    120: {
                    121:        if (!Damage[COMPUTER])
                    122:        {
                    123:                Quadx = ranf(NQUADS);
                    124:                Quady = ranf(NQUADS);
                    125:                Sectx = ranf(NSECTS);
                    126:                Secty = ranf(NSECTS);
                    127:                printf("Computer applies full reverse power to avoid the %s\n", msg);
                    128:                printf(" A space warp was entered and you ended up in quadrant %d,%d\n",
                    129:                        Quadx, Quady);
                    130:        }
                    131:        else
                    132:                lose(L_NEGENB);
                    133:        initquad(0);
                    134: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.