Annotation of 43BSDReno/games/warp/move.c, revision 1.1.1.1

1.1       root        1: /* $Header: move.c,v 7.0.1.2 86/10/20 14:37:06 lwall Exp $ */
                      2: 
                      3: /* $Log:       move.c,v $
                      4:  * Revision 7.0.1.2  86/10/20  14:37:06  lwall
                      5:  * Picked some lint.
                      6:  * 
                      7:  * Revision 7.0.1.1  86/10/16  10:52:09  lwall
                      8:  * Added Damage.  Fixed random bugs.
                      9:  * 
                     10:  * Revision 7.0  86/10/08  15:12:40  lwall
                     11:  * Split into separate files.  Added amoebas and pirates.
                     12:  * 
                     13:  */
                     14: 
                     15: #include "EXTERN.h"
                     16: #include "warp.h"
                     17: #include "bang.h"
                     18: #include "object.h"
                     19: #include "move.h"
                     20: #include "play.h"
                     21: #include "score.h"
                     22: #include "term.h"
                     23: #include "them.h"
                     24: #include "us.h"
                     25: #include "util.h"
                     26: #include "weapon.h"
                     27: #include "INTERN.h"
                     28: #include "move.h"
                     29: 
                     30: void
                     31: move_init()
                     32: {
                     33:     ;
                     34: }
                     35: 
                     36: void
                     37: bounce(obj)
                     38: Reg4 OBJECT *obj;
                     39: {
                     40:     Reg1 int x;
                     41:     Reg2 int y;
                     42:     Reg3 int count=0;
                     43: 
                     44:     y = (obj->posy - sgn(obj->vely) + YSIZE00) % YSIZE;
                     45:     x = (obj->posx - sgn(obj->velx) + XSIZE00) % XSIZE;
                     46:     while (occupant[y][x]) {
                     47:        y = (y + rand_mod(3) - 1 + YSIZE00) % YSIZE;
                     48:        x = (x + rand_mod(3) - 1 + XSIZE00) % XSIZE;
                     49:        if (++count > 10000) {     /* if universe full, get out of it fast */
                     50:            unmake_object(obj);
                     51:            if (ent) unmake_object(ent);
                     52:            if (base) unmake_object(base);
                     53:            finish = 1;
                     54:            return;
                     55:        }
                     56:     }
                     57:     obj->posy = y;
                     58:     obj->posx = x;
                     59:     obj->vely = 0;
                     60:     obj->velx = 0;
                     61:     occupant[y][x] = obj;
                     62:     if (numamoebas && obj->image == ' ')
                     63:        mvaddc(y+1, x*2, amb[y][x]);
                     64:     else
                     65:        mvaddc(y+1, x*2, obj->image);
                     66: }
                     67: 
                     68: void
                     69: move_universe()
                     70: {
                     71:     Reg1 OBJECT *curobj;
                     72:     Reg2 int x;
                     73:     Reg3 int y;
                     74:     Reg4 OBJECT *temp;
                     75:     OBJECT *thenext;
                     76: 
                     77:     for (curobj = movers; curobj != &root; curobj = curobj->next) {
                     78:        x = curobj->posx;
                     79:        y = curobj->posy;
                     80:        if (curobj == occupant[y][x]) {
                     81:            occupant[y][x] = 0;
                     82:        }
                     83:        else if (curobj->type != Torp && curobj->type != Web) {
                     84:            resetty();
                     85:            abort();
                     86:        }
                     87:     }
                     88:     for (curobj = movers; curobj != &root; curobj = thenext) {
                     89:        thenext = curobj->next;
                     90:        if (curobj->vely || curobj->velx) {
                     91:            y = curobj->posy;
                     92:            x = curobj->posx;
                     93:            if (curobj->image != ' ' &&
                     94:              (!(temp=occupant[y][x]) || temp->image==' ') ) {
                     95:                move(y+1, x*2, numamoebas ? amb[y][x] : ' ');
                     96:            }
                     97:            y = (y + curobj->vely + YSIZE00) % YSIZE;
                     98:            x = (x + curobj->velx + XSIZE00) % XSIZE;
                     99:            if (!(temp=occupant[y][x]) || temp->type != Star ||
                    100:              curobj->type != Torp || curobj->image == '+' ||
                    101:              curobj->image == 'x') {
                    102:                curobj->posy = y;
                    103:                curobj->posx = x;
                    104:            }
                    105:            else {
                    106:                if (curobj->image == '0') {
                    107:                    curobj->vely = rand_mod(3)-1;
                    108:                    curobj->velx = rand_mod(3)-1;
                    109:                }
                    110:                else
                    111:                    curobj->vely = curobj->velx = 0;
                    112:                y = curobj->posy;
                    113:                x = curobj->posx;
                    114:            }
                    115:        }
                    116:        else {                  /* not moving */
                    117:            y = curobj->posy;
                    118:            x = curobj->posx;
                    119:            if (curobj->type == Torp ||
                    120:                curobj->type == Star ||
                    121:                curobj->type == Web) {
                    122:                curobj->flags |= STATIC;
                    123:                curobj->next->prev = curobj->prev;
                    124:                curobj->prev->next = curobj->next;
                    125:                curobj->prev = movers->prev;
                    126:                curobj->next = movers;
                    127:                movers->prev->next = curobj;
                    128:                movers->prev = curobj;
                    129:            }
                    130:        }
                    131:        if (temp = occupant[y][x]) {            /* already occupied? */
                    132:            if (!temp->contend) {
                    133:                if (temp->type == Torp) {
                    134:                    if (temp->image == '+')
                    135:                        blast[y][x] += 1250;
                    136:                    else if (temp->image == 'o' && (base||ent))
                    137:                        blast[y][x] += 500+super*20;
                    138:                    else if (temp->image == 'O' && (base||ent))
                    139:                        blast[y][x] += 5000+super*100;
                    140:                }
                    141:            }
                    142:            yblasted[y] |= 1;
                    143:            xblasted[x] |= 1;
                    144:            blasted = TRUE;
                    145:            curobj->contend = temp;
                    146:            occupant[y][x] = curobj;
                    147:            switch (curobj->type) {
                    148:            case Enemy:
                    149:                if (numamoebas && curobj == nuke && temp->image == '+')
                    150:                    blast[y][x] += 80000;
                    151:                else if (temp->type == Enemy)
                    152:                    blast[y][x] += 10;
                    153:                else
                    154:                    goto defblast;
                    155:                break;
                    156:            case Crusher:
                    157:                if (curobj->velx)
                    158:                    blast[y][x] += 100000;
                    159:                else
                    160:                    goto defblast;
                    161:                break;
                    162:            case Torp:
                    163:                if (curobj->image == '+')
                    164:                    blast[y][x] += (temp==nuke ? 80000 : 1250);
                    165:                else if (curobj->image == 'o')
                    166:                    blast[y][x] += 500+super*20;
                    167:                else if (curobj->image == 'O')
                    168:                    blast[y][x] += 5000+super*100;
                    169:                goto defblast;
                    170:            case Star:
                    171:                if (temp == ent)
                    172:                    goto damshield;
                    173:                goto defblast;
                    174:            case Enterprise:
                    175:                if (temp->type == Star) {
                    176:              damshield:
                    177:                    if (!rand_mod(10)) {
                    178:                        if (!damflag[NOSHIELDS])
                    179:                            damage++;
                    180:                        if (damflag[NOSHIELDS] < 100)
                    181:                            damflag[NOSHIELDS] += rand_mod(smarts)/5+2;
                    182:                    }
                    183:                }
                    184:                goto defblast;
                    185:            default:
                    186:              defblast:
                    187:                blast[y][x] += rand_mod(751)+1;
                    188:                break;
                    189:            }
                    190:        }
                    191:        else {
                    192:            occupant[y][x] = curobj;
                    193:            if (curobj->image != ' ' &&
                    194:                (curobj->velx || curobj->vely ||
                    195:                 curobj->type == Torp || curobj->type == Web) ) {
                    196:                mvaddc(y+1, x*2, curobj->image);
                    197:            }
                    198:            if (curobj->type == Crusher && curobj->velx) {
                    199:                blast[y][x] += 100000;
                    200:                yblasted[y] |= 1;
                    201:                xblasted[x] |= 1;
                    202:                blasted = TRUE;
                    203:            }
                    204:        }
                    205:     }
                    206:     if (blasted) {
                    207:        Reg7 int minxblast = -1;
                    208:        Reg8 int maxxblast = -2;
                    209:        Reg5 long tmpblast;
                    210: 
                    211:        blasted = numamoebas;
                    212:        for (x=0; x<XSIZE; x++) {
                    213:            if (xblasted[x]) {
                    214:                xblasted[x] = 0;
                    215:                maxxblast = x;
                    216:                if (minxblast < 0)
                    217:                    minxblast = x;
                    218:            }
                    219:        }
                    220:        for (y=0; y<YSIZE; y++) {
                    221:            if (yblasted[y]) {
                    222:                yblasted[y] = 0;
                    223:                for (x=minxblast; x<=maxxblast; x++) {
                    224:                    tmpblast = blast[y][x];
                    225:                    if (numamoebas && amb[y][x] == '~') {
                    226:                        if (temp = occupant[y][x]) {
                    227:                            if (temp->image == '&')
                    228:                                tmpblast >>= 1;
                    229:                            else if (temp->type == Web)
                    230:                                tmpblast = 100000;
                    231:                            else
                    232:                                tmpblast += 50 + temp->energy/100;
                    233:                            if (tmpblast > 250 && !rand_mod(5+(inumstars>>4)))
                    234:                                modify_amoeba(y,x,1,'~',5);
                    235:                        }
                    236:                        xblasted[x] = 2;
                    237:                        yblasted[y] = 2;
                    238:                    }
                    239:                    if (tmpblast) {
                    240:                        Reg6 OBJECT *biggie = 0;
                    241: 
                    242:                        blast[y][x] = 0;
                    243:                        temp = occupant[y][x];
                    244:                        if (tmpblast < 0) {
                    245:                            if (numamoebas && tmpblast < -1000000 &&
                    246:                                amb[y][x] == '~' && temp != nuke) {
                    247:                                amb[y][x] = ' ';
                    248:                                if (!temp)
                    249:                                    make_plink(y,x);
                    250:                                ambsize--;
                    251:                            }
                    252:                            tmpblast = 0;
                    253:                        }
                    254:                        if (temp) {
                    255:                            if ((!numamoebas || amb[y][x]==' ') &&
                    256:                              tmpblast < 100000)
                    257:                                make_plink(y,x);
                    258:                            for ( ;temp;
                    259:                              temp = curobj->contend,curobj->contend = 0){
                    260:                                curobj = temp;
                    261:                                switch (curobj->type) {
                    262:                                case Enterprise: {
                    263:                                    long tmp = curobj->energy;
                    264: 
                    265:                                    if (ent->energy>500 || apolloflag & 1)
                    266:                                        curobj->energy -= tmpblast /
                    267:                                           ((apolloflag & 1)
                    268:                                            ? 20
                    269:                                            : (5+abs(ent->velx)+abs(ent->vely))
                    270:                                               / ((damflag[NOSHIELDS]>>3)+1)+1);
                    271:                                    else
                    272:                                        curobj->energy -= tmpblast;
                    273:                                    if (rand_mod(1 + tmp - curobj->energy) > 100
                    274:                                        || ent->energy < (entmax>>1)) {
                    275:                                        if (debug & 128 ||
                    276:                                          (damage <= smarts/10 &&
                    277:                                           !rand_mod(6-smarts/20-massacre) )) {
                    278:                                            tmp = rand_mod(MAXDAMAGE);
                    279:                                            if (damflag[tmp]) {
                    280:                                                if (damflag[tmp] < 60)
                    281:                                                  damflag[tmp] += rand_mod(60);
                    282:                                            }
                    283:                                            else {
                    284:                                                damflag[tmp] =
                    285:                                                  rand_mod(smarts+10)+2;
                    286:                                                damage++;
                    287:                                            }
                    288:                                        }
                    289:                                    }
                    290:                                    break;
                    291:                                }
                    292:                                case Base:
                    293:                                    if (base->energy > 1000 || apolloflag & 2)
                    294:                                        curobj->energy -= tmpblast /
                    295:                                           ((apolloflag & 2)?20:5);
                    296:                                    else
                    297:                                        curobj->energy -= tmpblast;
                    298:                                    break;
                    299:                                case Crusher:
                    300:                                    if (tmpblast > 132767)
                    301:                                        curobj->energy -= (tmpblast - 100000);
                    302:                                    else if (tmpblast >= 100000) {
                    303:                                        curobj->energy += (tmpblast - 100000);
                    304:                                        if (curobj->energy > 32767)
                    305:                                            curobj->energy = 32767;
                    306:                                    }
                    307:                                    else        /* vulnerable while feeding */
                    308:                                        curobj->energy -= tmpblast;
                    309:                                    break;
                    310:                                case Enemy:
                    311:                                    curobj->energy -= tmpblast*10/enemshields;
                    312:                                    break;
                    313:                                default:
                    314:                                    curobj->energy -= tmpblast;
                    315:                                    break;
                    316:                                }
                    317:                                if (curobj->energy < 0) {       /* killed it? */
                    318:                                    switch (curobj->image) {
                    319:                                    case 'A':
                    320:                                        tmpblast = 100000;
                    321:                                        make_blast(y,x,8192L,1);
                    322:                                        numapollos = apolloflag = 0;
                    323:                                        numstars--;
                    324:                                        numenemies--;
                    325:                                        curscore += 5000;
                    326:                                        deados = 0;
                    327:                                        break;
                    328:                                    case 'E': case 'e': case 'C': case 'c':
                    329:                                        ent = 0;
                    330:                                        numents--;
                    331:                                        if (base)
                    332:                                            status = 2;
                    333:                                        else
                    334:                                            status = 3;
                    335:                                        deados = 0;
                    336:                                        break;
                    337:                                    case 'B': case 'b':
                    338:                                        base = 0;
                    339:                                        numbases--;
                    340:                                        if (ent)
                    341:                                            status = entmode;
                    342:                                        else
                    343:                                            status = 3;
                    344:                                        deados = 0;
                    345:                                        break;
                    346:                                    case '&': {
                    347:                                        int i, xxx, yyy;
                    348: 
                    349:                                        for (i = 0; i < YSIZE; i++)
                    350:                                            yblasted[i] &= 1;
                    351:                                        for (i = 0; i < XSIZE; i++)
                    352:                                            xblasted[i] &= 1;
                    353:                                        numamoebas = 0; /* ignore amb[][] now */
                    354:                                        for (yyy = 0; yyy < YSIZE; yyy++) {
                    355:                                            for (xxx = 0; xxx < XSIZE; xxx++) {
                    356:                                                if (amb[yyy][xxx] == '~' &&
                    357:                                                    !occupant[yyy][xxx]) {
                    358:                                                    mvaddch(yyy+1,xxx*2,' ');
                    359:                                                }
                    360:                                            }
                    361:                                        }
                    362:                                        numenemies--;
                    363:                                        curscore += 10000;
                    364:                                        if (curobj == enemies)
                    365:                                            enemies = curobj->next;
                    366:                                        deados = 0;
                    367:                                        break;
                    368:                                    }
                    369:                                    case '<': case '>': {
                    370:                                        int i;
                    371: 
                    372:                                        numenemies--;
                    373:                                        numcrushes = 0;
                    374:                                        curscore += 10000;
                    375:                                        if (curobj == movers)
                    376:                                            movers = curobj->next;
                    377:                                        if (curobj == enemies)
                    378:                                            enemies = curobj->next;
                    379:                                        deados = 0;
                    380: 
                    381:                                        tmpblast = 100000;
                    382:                                        make_blast(y,(x+XSIZE00)%XSIZE,10000L,0);
                    383:                                        if (curobj->image == '<') {
                    384:                                            for (i=XSIZE00; i<=XSIZE01; i++)
                    385:                                                make_blast(y,(x+i)%XSIZE,
                    386:                                                    10000L,0);
                    387:                                            for (i=XSIZE00; i<=XSIZE02; i++)
                    388:                                                make_blast(y,(x+i)%XSIZE,
                    389:                                                    10000L,0);
                    390:                                            make_blast(y,(x+XSIZE03)%XSIZE,
                    391:                                                10000L,1);
                    392:                                            for (i=XSIZE00; i<=XSIZE08; i++)
                    393:                                                make_blast(y,(x+i)%XSIZE,
                    394:                                                    10000L,0);
                    395:                                        }
                    396:                                        else {
                    397:                                            for (i=XSIZE00; i>=XSIZE99; i--)
                    398:                                                make_blast(y,(x+i)%XSIZE,
                    399:                                                    10000L,0);
                    400:                                            for (i=XSIZE00; i>=XSIZE98; i--)
                    401:                                                make_blast(y,(x+i)%XSIZE,
                    402:                                                    10000L,0);
                    403:                                            make_blast(y,(x+XSIZE97)%XSIZE,
                    404:                                                10000L,1);
                    405:                                            for (i=XSIZE00; i>=XSIZE92; i--)
                    406:                                                make_blast(y,(x+i)%XSIZE,
                    407:                                                    10000L,0);
                    408:                                        }
                    409:                                    }
                    410:                                    break;
                    411:                                    case 'K':
                    412:                                        numenemies--;
                    413:                                        curscore += curobj->mass;
                    414:                                        if (curobj == enemies)
                    415:                                            enemies = curobj->next;
                    416:                                        deados = 0;
                    417:                                        break;
                    418:                                    case 'T':
                    419:                                        numenemies--;
                    420:                                        curscore += curobj->mass*3/2;
                    421:                                        if (curobj == enemies)
                    422:                                            enemies = curobj->next;
                    423:                                        deados = 0;
                    424:                                        break;
                    425:                                    case 'R': case ' ': case 'P':
                    426:                                        numenemies--;
                    427:                                        if (curobj->flags & PIRATE)
                    428:                                            curscore += curobj->mass;
                    429:                                        else
                    430:                                            curscore += curobj->mass*3;
                    431:                                        if (curobj == enemies)
                    432:                                            enemies = curobj->next;
                    433:                                        deados = 0;
                    434:                                        break;
                    435:                                    case 'G':
                    436:                                        numenemies--;
                    437:                                        numgorns--;
                    438:                                        tmpblast = 100000;
                    439:                                        if (madgorns)
                    440:                                            curscore += curobj->mass/2;
                    441:                                        else
                    442:                                            curscore += curobj->mass*2;
                    443:                                        if (curobj == enemies)
                    444:                                            enemies = curobj->next;
                    445:                                        {
                    446:                                            int xxx,yyy;
                    447: 
                    448:                                            for (xxx = -1; xxx<=1; xxx++)
                    449:                                                for (yyy = -1; yyy<=1; yyy++)
                    450:                                                    if (rand_mod(2+massacre))
                    451:                                                        fire_torp(curobj,
                    452:                                                            yyy,xxx);
                    453:                                        }
                    454:                                        deados = 0;
                    455:                                        break;
                    456:                                    case '@':
                    457:                                        numinhab--;
                    458:                                        /* FALL THROUGH */
                    459:                                    case '*':
                    460:                                        banging = TRUE;
                    461:                                        numstars--;
                    462:                                        break;
                    463:                                    case '|': case '-': case '/': case '\\':
                    464:                                        tmpblast = 100000;
                    465:                                        make_blast(y,x,curobj->mass,1);
                    466:                                        banging = TRUE;
                    467:                                        deados = 0;
                    468:                                        break;
                    469:                                    case 'x':
                    470:                                        curscore += 10;
                    471:                                        deados = 0;
                    472:                                        break;
                    473:                                    case 'X':
                    474:                                        curscore += 100;
                    475:                                        numxes--;
                    476:                                        deados = 0;
                    477:                                        break;
                    478:                                    case '0':
                    479:                                        curscore += 35;
                    480:                                        numos--;
                    481:                                        deados += 3;
                    482:                                        break;
                    483:                                    case 'o':
                    484:                                        curscore += 100;
                    485:                                        numos--;
                    486:                                        deados++;
                    487:                                        break;
                    488:                                    case 'O':
                    489:                                        curscore += 200;
                    490:                                        numos--;
                    491:                                        deados += 2;
                    492:                                        break;
                    493:                                    case 'M':
                    494:                                        deadmudds++;
                    495:                                        inumfriends--;
                    496:                                        numfriends--;
                    497:                                        if (curobj == enemies)
                    498:                                            enemies = curobj->next;
                    499:                                        break;
                    500:                                    case 'Q': case 'W': case 'Y': case 'U':
                    501:                                    case 'I': case 'S': case 'D': case 'H':
                    502:                                    case 'J': case 'L': case 'Z': case 'V':
                    503:                                    case 'F':
                    504:                                        numfriends--;
                    505:                                        if (curobj == enemies)
                    506:                                            enemies = curobj->next;
                    507:                                        if (inumfriends < 10)
                    508:                                            madfriends += 500;
                    509:                                        else
                    510:                                            madfriends += 10000/inumfriends;
                    511:                                        break;
                    512:                                    }
                    513:                                    if (tmpblast < 100000)
                    514:                                        make_blast(y,x,curobj->mass,1);
                    515:                                    unmake_object(curobj);
                    516:                                }
                    517:                                else {          /* didn't kill anything */
                    518:                                    if (!biggie)
                    519:                                        biggie = curobj;
                    520:                                    else {
                    521:                                        if (biggie->mass > curobj->mass)
                    522:                                            bounce(curobj);
                    523:                                        else {
                    524:                                            bounce(biggie);
                    525:                                            biggie = curobj;
                    526:                                        }
                    527:                                    }
                    528:                                }
                    529:                            }
                    530:                            if (biggie) {
                    531:                                occupant[y][x] = biggie;
                    532:                                if (numamoebas && biggie->image == ' ')
                    533:                                    mvaddch(y+1,x*2, amb[y][x]);
                    534:                                else
                    535:                                    mvaddch(y+1,x*2, biggie->image);
                    536:                            }
                    537:                            else {
                    538:                                occupant[y][x] = 0;
                    539:                                mvaddch(y+1, x*2, numamoebas ? amb[y][x] : ' ');
                    540:                            }
                    541:                        }
                    542:                    }
                    543:                }
                    544:            }
                    545:        }
                    546:     }
                    547:     do_bangs();
                    548:     if (numcrushes && movers->type == Crusher)
                    549:        movers->vely = 0;
                    550:     if (curobj = base) {
                    551:        char ch;
                    552: 
                    553:        curobj->velx = 0;
                    554:        curobj->vely = 0;
                    555:        curobj->energy += 25*lookaround(curobj->posy,curobj->posx,Star);
                    556:        if (curobj->energy > basemax)
                    557:            curobj->energy = basemax;
                    558:        if (curobj->energy >= 1000)
                    559:            ch = 'B';
                    560:        else
                    561:            ch = 'b';
                    562:        if (ch != curobj->image) {
                    563:            setimage(curobj, ch);
                    564:        }
                    565:     }
                    566:     if (curobj = ent) {
                    567:        char ch;
                    568: 
                    569:        if (entmode == 0) {
                    570:            curobj->velx = 0;
                    571:            curobj->vely = 0;
                    572:        }
                    573:        if (base && !cloaking && !curobj->velx && !curobj->vely &&
                    574:          lookfor(curobj->posy,curobj->posx,Base)) {
                    575:            int tmp;
                    576: 
                    577: #ifdef lint
                    578:            tmp = 0;
                    579: #else
                    580:            tmp = (int) (base->energy - 1000 < entmax - curobj->energy ?
                    581:                         base->energy - 1000 : entmax - curobj->energy);
                    582: #endif
                    583:            if (tmp < 0)
                    584:                tmp = 0;
                    585:            curobj->energy += tmp;
                    586:            base->energy -= tmp;
                    587:            tmp = (btorp < 50 - etorp ?
                    588:                   btorp : 50 - etorp);
                    589:            etorp += tmp;
                    590:            btorp -= tmp;
                    591:            if (damage) {
                    592:                tmp = rand_mod(MAXDAMAGE);
                    593:                if (damflag[tmp] > 5) {
                    594:                    damflag[tmp] = rand_mod(5)+1;
                    595:                }
                    596:            }
                    597:        }
                    598:        if (curobj->energy >= 500 && (!damage || !damflag[NOSHIELDS]))
                    599:            ch = cloaked?'C':'E';
                    600:        else
                    601:            ch = cloaked?'c':'e';
                    602:        if (ch != curobj->image) {
                    603:            setimage(curobj, ch);
                    604:        }
                    605:     }
                    606: }
                    607: 
                    608: int
                    609: lookaround(y, x, what)
                    610: Reg1 int y;
                    611: Reg2 int x;
                    612: Reg4 char what;
                    613: {
                    614:     Reg3 OBJECT *obj;
                    615:     Reg5 int count=0;
                    616:     Reg6 int xp;
                    617:     Reg7 int xm;
                    618: 
                    619:     if ((obj=occupant[y][xp=(x+XSIZE01)%XSIZE])&&obj->type == what) /* 0, 1 */
                    620:        count++;
                    621:     if ((obj=occupant[y][xm=(x+XSIZE99)%XSIZE])&&obj->type == what) /* 0, -1 */
                    622:        count++;
                    623:     if ((obj=occupant[y=(y+YSIZE99)%YSIZE][xp])&&obj->type == what) /* -1, 1 */
                    624:        count++;
                    625:     if ((obj=occupant[y][x])&&obj->type == what)                    /* -1, 0 */
                    626:        count++;
                    627:     if ((obj=occupant[y][xm])&&obj->type == what)                   /* -1, -1 */
                    628:        count++;
                    629:     if ((obj=occupant[y=(y+2)%YSIZE][xp])&&obj->type == what)       /* 1, 1 */
                    630:        count++;
                    631:     if ((obj=occupant[y][x])&&obj->type == what)                    /* 1, 0 */
                    632:        count++;
                    633:     if ((obj=occupant[y][xm])&&obj->type == what)                   /* 1, -1 */
                    634:        count++;
                    635:     return (count);
                    636: }
                    637: 
                    638: int
                    639: lookfor(y, x, what)
                    640: Reg1 int y;
                    641: Reg2 int x;
                    642: Reg4 char what;
                    643: {
                    644:     Reg3 OBJECT *obj;
                    645:     Reg5 int xp;
                    646:     Reg6 int xm;
                    647: 
                    648:     if ((obj=occupant[y][xp=(x+XSIZE01)%XSIZE])&&obj->type == what ||/* 0, 1 */
                    649:         (obj=occupant[y][xm=(x+XSIZE99)%XSIZE])&&obj->type == what ||/* 0, -1 */
                    650:         (obj=occupant[y=(y+YSIZE99)%YSIZE][xp])&&obj->type == what ||/* -1, 1 */
                    651:         (obj=occupant[y][x])&&obj->type == what                    ||/* -1, 0 */
                    652:         (obj=occupant[y][xm])&&obj->type == what                   ||/* -1,-1 */
                    653:         (obj=occupant[y=(y+2)%YSIZE][xp])&&obj->type == what       ||/* 1, 1 */
                    654:         (obj=occupant[y][x])&&obj->type == what                    ||/* 1, 0 */
                    655:         (obj=occupant[y][xm])&&obj->type == what)                    /* 1, -1 */
                    656:        return(1);
                    657:     return (0);
                    658: }
                    659: 
                    660: OBJECT*
                    661: lookimg(y, x, what)
                    662: Reg1 int y;
                    663: Reg2 int x;
                    664: Reg4 char what;
                    665: {
                    666:     Reg3 OBJECT *obj;
                    667:     Reg5 int xp;
                    668:     Reg6 int xm;
                    669: 
                    670:     if ((obj=occupant[y][xp=(x+XSIZE01)%XSIZE])&&obj->image==what ||/* 0, 1 */
                    671:         (obj=occupant[y][xm=(x+XSIZE99)%XSIZE])&&obj->image==what ||/* 0, -1 */
                    672:         (obj=occupant[y=(y+YSIZE99)%YSIZE][xp])&&obj->image==what ||/* -1, 1 */
                    673:         (obj=occupant[y][x])&&obj->image==what                    ||/* -1, 0 */
                    674:         (obj=occupant[y][xm])&&obj->image==what                   ||/* -1,-1 */
                    675:         (obj=occupant[y=(y+2)%YSIZE][xp])&&obj->image==what       ||/* 1, 1 */
                    676:         (obj=occupant[y][x])&&obj->image==what                    ||/* 1, 0 */
                    677:         (obj=occupant[y][xm])&&obj->image==what)                    /* 1, -1 */
                    678:        return obj;
                    679:     return Null(OBJECT*);
                    680: }

unix.superglobalmegacorp.com

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