Annotation of 43BSDTahoe/games/hack/hack.pri.c, revision 1.1

1.1     ! root        1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
        !             2: /* hack.pri.c - version 1.0.3 */
        !             3: 
        !             4: #include "hack.h"
        !             5: #include <stdio.h>
        !             6: xchar scrlx, scrhx, scrly, scrhy;      /* corners of new area on screen */
        !             7: 
        !             8: extern char *hu_stat[];        /* in eat.c */
        !             9: extern char *CD;
        !            10: 
        !            11: swallowed()
        !            12: {
        !            13:        char *ulook = "|@|";
        !            14:        ulook[1] = u.usym;
        !            15: 
        !            16:        cls();
        !            17:        curs(u.ux-1, u.uy+1);
        !            18:        fputs("/-\\", stdout);
        !            19:        curx = u.ux+2;
        !            20:        curs(u.ux-1, u.uy+2);
        !            21:        fputs(ulook, stdout);
        !            22:        curx = u.ux+2;
        !            23:        curs(u.ux-1, u.uy+3);
        !            24:        fputs("\\-/", stdout);
        !            25:        curx = u.ux+2;
        !            26:        u.udispl = 1;
        !            27:        u.udisx = u.ux;
        !            28:        u.udisy = u.uy;
        !            29: }
        !            30: 
        !            31: 
        !            32: /*VARARGS1*/
        !            33: boolean panicking;
        !            34: 
        !            35: panic(str,a1,a2,a3,a4,a5,a6)
        !            36: char *str;
        !            37: {
        !            38:        if(panicking++) exit(1);    /* avoid loops - this should never happen*/
        !            39:        home();
        !            40:        puts(" Suddenly, the dungeon collapses.");
        !            41:        fputs(" ERROR:  ", stdout);
        !            42:        printf(str,a1,a2,a3,a4,a5,a6);
        !            43: #ifdef DEBUG
        !            44: #ifdef UNIX
        !            45:        if(!fork())
        !            46:                abort();        /* generate core dump */
        !            47: #endif UNIX
        !            48: #endif DEBUG
        !            49:        more();                 /* contains a fflush() */
        !            50:        done("panicked");
        !            51: }
        !            52: 
        !            53: atl(x,y,ch)
        !            54: register x,y;
        !            55: {
        !            56:        register struct rm *crm = &levl[x][y];
        !            57: 
        !            58:        if(x<0 || x>COLNO-1 || y<0 || y>ROWNO-1){
        !            59:                impossible("atl(%d,%d,%c)",x,y,ch);
        !            60:                return;
        !            61:        }
        !            62:        if(crm->seen && crm->scrsym == ch) return;
        !            63:        crm->scrsym = ch;
        !            64:        crm->new = 1;
        !            65:        on_scr(x,y);
        !            66: }
        !            67: 
        !            68: on_scr(x,y)
        !            69: register x,y;
        !            70: {
        !            71:        if(x < scrlx) scrlx = x;
        !            72:        if(x > scrhx) scrhx = x;
        !            73:        if(y < scrly) scrly = y;
        !            74:        if(y > scrhy) scrhy = y;
        !            75: }
        !            76: 
        !            77: /* call: (x,y) - display
        !            78:        (-1,0) - close (leave last symbol)
        !            79:        (-1,-1)- close (undo last symbol)
        !            80:        (-1,let)-open: initialize symbol
        !            81:        (-2,let)-change let
        !            82: */
        !            83: 
        !            84: tmp_at(x,y) schar x,y; {
        !            85: static schar prevx, prevy;
        !            86: static char let;
        !            87:        if((int)x == -2){       /* change let call */
        !            88:                let = y;
        !            89:                return;
        !            90:        }
        !            91:        if((int)x == -1 && (int)y >= 0){        /* open or close call */
        !            92:                let = y;
        !            93:                prevx = -1;
        !            94:                return;
        !            95:        }
        !            96:        if(prevx >= 0 && cansee(prevx,prevy)) {
        !            97:                delay_output();
        !            98:                prl(prevx, prevy);      /* in case there was a monster */
        !            99:                at(prevx, prevy, levl[prevx][prevy].scrsym);
        !           100:        }
        !           101:        if(x >= 0){     /* normal call */
        !           102:                if(cansee(x,y)) at(x,y,let);
        !           103:                prevx = x;
        !           104:                prevy = y;
        !           105:        } else {        /* close call */
        !           106:                let = 0;
        !           107:                prevx = -1;
        !           108:        }
        !           109: }
        !           110: 
        !           111: /* like the previous, but the symbols are first erased on completion */
        !           112: Tmp_at(x,y) schar x,y; {
        !           113: static char let;
        !           114: static xchar cnt;
        !           115: static coord tc[COLNO];                /* but watch reflecting beams! */
        !           116: register xx,yy;
        !           117:        if((int)x == -1) {
        !           118:                if(y > 0) {     /* open call */
        !           119:                        let = y;
        !           120:                        cnt = 0;
        !           121:                        return;
        !           122:                }
        !           123:                /* close call (do not distinguish y==0 and y==-1) */
        !           124:                while(cnt--) {
        !           125:                        xx = tc[cnt].x;
        !           126:                        yy = tc[cnt].y;
        !           127:                        prl(xx, yy);
        !           128:                        at(xx, yy, levl[xx][yy].scrsym);
        !           129:                }
        !           130:                cnt = let = 0;  /* superfluous */
        !           131:                return;
        !           132:        }
        !           133:        if((int)x == -2) {      /* change let call */
        !           134:                let = y;
        !           135:                return;
        !           136:        }
        !           137:        /* normal call */
        !           138:        if(cansee(x,y)) {
        !           139:                if(cnt) delay_output();
        !           140:                at(x,y,let);
        !           141:                tc[cnt].x = x;
        !           142:                tc[cnt].y = y;
        !           143:                if(++cnt >= COLNO) panic("Tmp_at overflow?");
        !           144:                levl[x][y].new = 0;     /* prevent pline-nscr erasing --- */
        !           145:        }
        !           146: }
        !           147: 
        !           148: setclipped(){
        !           149:        error("Hack needs a screen of size at least %d by %d.\n",
        !           150:                ROWNO+2, COLNO);
        !           151: }
        !           152: 
        !           153: at(x,y,ch)
        !           154: register xchar x,y;
        !           155: char ch;
        !           156: {
        !           157: #ifndef lint
        !           158:        /* if xchar is unsigned, lint will complain about  if(x < 0)  */
        !           159:        if(x < 0 || x > COLNO-1 || y < 0 || y > ROWNO-1) {
        !           160:                impossible("At gets 0%o at %d %d.", ch, x, y);
        !           161:                return;
        !           162:        }
        !           163: #endif lint
        !           164:        if(!ch) {
        !           165:                impossible("At gets null at %d %d.", x, y);
        !           166:                return;
        !           167:        }
        !           168:        y += 2;
        !           169:        curs(x,y);
        !           170:        (void) putchar(ch);
        !           171:        curx++;
        !           172: }
        !           173: 
        !           174: prme(){
        !           175:        if(!Invisible) at(u.ux,u.uy,u.usym);
        !           176: }
        !           177: 
        !           178: doredraw()
        !           179: {
        !           180:        docrt();
        !           181:        return(0);
        !           182: }
        !           183: 
        !           184: docrt()
        !           185: {
        !           186:        register x,y;
        !           187:        register struct rm *room;
        !           188:        register struct monst *mtmp;
        !           189: 
        !           190:        if(u.uswallow) {
        !           191:                swallowed();
        !           192:                return;
        !           193:        }
        !           194:        cls();
        !           195: 
        !           196: /* Some ridiculous code to get display of @ and monsters (almost) right */
        !           197:        if(!Invisible) {
        !           198:                levl[(u.udisx = u.ux)][(u.udisy = u.uy)].scrsym = u.usym;
        !           199:                levl[u.udisx][u.udisy].seen = 1;
        !           200:                u.udispl = 1;
        !           201:        } else  u.udispl = 0;
        !           202: 
        !           203:        seemons();      /* reset old positions */
        !           204:        for(mtmp = fmon; mtmp; mtmp = mtmp->nmon)
        !           205:                mtmp->mdispl = 0;
        !           206:        seemons();      /* force new positions to be shown */
        !           207: /* This nonsense should disappear soon --------------------------------- */
        !           208: 
        !           209:        for(y = 0; y < ROWNO; y++)
        !           210:                for(x = 0; x < COLNO; x++)
        !           211:                        if((room = &levl[x][y])->new) {
        !           212:                                room->new = 0;
        !           213:                                at(x,y,room->scrsym);
        !           214:                        } else if(room->seen)
        !           215:                                at(x,y,room->scrsym);
        !           216:        scrlx = COLNO;
        !           217:        scrly = ROWNO;
        !           218:        scrhx = scrhy = 0;
        !           219:        flags.botlx = 1;
        !           220:        bot();
        !           221: }
        !           222: 
        !           223: docorner(xmin,ymax) register xmin,ymax; {
        !           224:        register x,y;
        !           225:        register struct rm *room;
        !           226:        register struct monst *mtmp;
        !           227: 
        !           228:        if(u.uswallow) {        /* Can be done more efficiently */
        !           229:                swallowed();
        !           230:                return;
        !           231:        }
        !           232: 
        !           233:        seemons();      /* reset old positions */
        !           234:        for(mtmp = fmon; mtmp; mtmp = mtmp->nmon)
        !           235:            if(mtmp->mx >= xmin && mtmp->my < ymax)
        !           236:                mtmp->mdispl = 0;
        !           237:        seemons();      /* force new positions to be shown */
        !           238: 
        !           239:        for(y = 0; y < ymax; y++) {
        !           240:                if(y > ROWNO && CD) break;
        !           241:                curs(xmin,y+2);
        !           242:                cl_end();
        !           243:                if(y < ROWNO) {
        !           244:                    for(x = xmin; x < COLNO; x++) {
        !           245:                        if((room = &levl[x][y])->new) {
        !           246:                                room->new = 0;
        !           247:                                at(x,y,room->scrsym);
        !           248:                        } else
        !           249:                                if(room->seen)
        !           250:                                        at(x,y,room->scrsym);
        !           251:                    }
        !           252:                }
        !           253:        }
        !           254:        if(ymax > ROWNO) {
        !           255:                cornbot(xmin-1);
        !           256:                if(ymax > ROWNO+1 && CD) {
        !           257:                        curs(1,ROWNO+3);
        !           258:                        cl_eos();
        !           259:                }
        !           260:        }
        !           261: }
        !           262: 
        !           263: curs_on_u(){
        !           264:        curs(u.ux, u.uy+2);
        !           265: }
        !           266: 
        !           267: pru()
        !           268: {
        !           269:        if(u.udispl && (Invisible || u.udisx != u.ux || u.udisy != u.uy))
        !           270:                /* if(! levl[u.udisx][u.udisy].new) */
        !           271:                        if(!vism_at(u.udisx, u.udisy))
        !           272:                                newsym(u.udisx, u.udisy);
        !           273:        if(Invisible) {
        !           274:                u.udispl = 0;
        !           275:                prl(u.ux,u.uy);
        !           276:        } else
        !           277:        if(!u.udispl || u.udisx != u.ux || u.udisy != u.uy) {
        !           278:                atl(u.ux, u.uy, u.usym);
        !           279:                u.udispl = 1;
        !           280:                u.udisx = u.ux;
        !           281:                u.udisy = u.uy;
        !           282:        }
        !           283:        levl[u.ux][u.uy].seen = 1;
        !           284: }
        !           285: 
        !           286: #ifndef NOWORM
        !           287: #include       "def.wseg.h"
        !           288: extern struct wseg *m_atseg;
        !           289: #endif NOWORM
        !           290: 
        !           291: /* print a position that is visible for @ */
        !           292: prl(x,y)
        !           293: {
        !           294:        register struct rm *room;
        !           295:        register struct monst *mtmp;
        !           296:        register struct obj *otmp;
        !           297: 
        !           298:        if(x == u.ux && y == u.uy && (!Invisible)) {
        !           299:                pru();
        !           300:                return;
        !           301:        }
        !           302:        if(!isok(x,y)) return;
        !           303:        room = &levl[x][y];
        !           304:        if((!room->typ) ||
        !           305:           (IS_ROCK(room->typ) && levl[u.ux][u.uy].typ == CORR))
        !           306:                return;
        !           307:        if((mtmp = m_at(x,y)) && !mtmp->mhide &&
        !           308:                (!mtmp->minvis || See_invisible)) {
        !           309: #ifndef NOWORM
        !           310:                if(m_atseg)
        !           311:                        pwseg(m_atseg);
        !           312:                else
        !           313: #endif NOWORM
        !           314:                pmon(mtmp);
        !           315:        }
        !           316:        else if((otmp = o_at(x,y)) && room->typ != POOL)
        !           317:                atl(x,y,otmp->olet);
        !           318:        else if(mtmp && (!mtmp->minvis || See_invisible)) {
        !           319:                /* must be a hiding monster, but not hiding right now */
        !           320:                /* assume for the moment that long worms do not hide */
        !           321:                pmon(mtmp);
        !           322:        }
        !           323:        else if(g_at(x,y) && room->typ != POOL)
        !           324:                atl(x,y,'$');
        !           325:        else if(!room->seen || room->scrsym == ' ') {
        !           326:                room->new = room->seen = 1;
        !           327:                newsym(x,y);
        !           328:                on_scr(x,y);
        !           329:        }
        !           330:        room->seen = 1;
        !           331: }
        !           332: 
        !           333: char
        !           334: news0(x,y)
        !           335: register xchar x,y;
        !           336: {
        !           337:        register struct obj *otmp;
        !           338:        register struct trap *ttmp;
        !           339:        struct rm *room;
        !           340:        register char tmp;
        !           341: 
        !           342:        room = &levl[x][y];
        !           343:        if(!room->seen) tmp = ' ';
        !           344:        else if(room->typ == POOL) tmp = POOL_SYM;
        !           345:        else if(!Blind && (otmp = o_at(x,y))) tmp = otmp->olet;
        !           346:        else if(!Blind && g_at(x,y)) tmp = '$';
        !           347:        else if(x == xupstair && y == yupstair) tmp = '<';
        !           348:        else if(x == xdnstair && y == ydnstair) tmp = '>';
        !           349:        else if((ttmp = t_at(x,y)) && ttmp->tseen) tmp = '^';
        !           350:        else switch(room->typ) {
        !           351:        case SCORR:
        !           352:        case SDOOR:
        !           353:                tmp = room->scrsym;     /* %% wrong after killing mimic ! */
        !           354:                break;
        !           355:        case HWALL:
        !           356:                tmp = '-';
        !           357:                break;
        !           358:        case VWALL:
        !           359:                tmp = '|';
        !           360:                break;
        !           361:        case LDOOR:
        !           362:        case DOOR:
        !           363:                tmp = '+';
        !           364:                break;
        !           365:        case CORR:
        !           366:                tmp = CORR_SYM;
        !           367:                break;
        !           368:        case ROOM:
        !           369:                if(room->lit || cansee(x,y) || Blind) tmp = '.';
        !           370:                else tmp = ' ';
        !           371:                break;
        !           372: /*
        !           373:        case POOL:
        !           374:                tmp = POOL_SYM;
        !           375:                break;
        !           376: */
        !           377:        default:
        !           378:                tmp = ERRCHAR;
        !           379:        }
        !           380:        return(tmp);
        !           381: }
        !           382: 
        !           383: newsym(x,y)
        !           384: register x,y;
        !           385: {
        !           386:        atl(x,y,news0(x,y));
        !           387: }
        !           388: 
        !           389: /* used with wand of digging (or pick-axe): fill scrsym and force display */
        !           390: /* also when a POOL evaporates */
        !           391: mnewsym(x,y)
        !           392: register x,y;
        !           393: {
        !           394:        register struct rm *room;
        !           395:        char newscrsym;
        !           396: 
        !           397:        if(!vism_at(x,y)) {
        !           398:                room = &levl[x][y];
        !           399:                newscrsym = news0(x,y);
        !           400:                if(room->scrsym != newscrsym) {
        !           401:                        room->scrsym = newscrsym;
        !           402:                        room->seen = 0;
        !           403:                }
        !           404:        }
        !           405: }
        !           406: 
        !           407: nosee(x,y)
        !           408: register x,y;
        !           409: {
        !           410:        register struct rm *room;
        !           411: 
        !           412:        if(!isok(x,y)) return;
        !           413:        room = &levl[x][y];
        !           414:        if(room->scrsym == '.' && !room->lit && !Blind) {
        !           415:                room->scrsym = ' ';
        !           416:                room->new = 1;
        !           417:                on_scr(x,y);
        !           418:        }
        !           419: }
        !           420: 
        !           421: #ifndef QUEST
        !           422: prl1(x,y)
        !           423: register x,y;
        !           424: {
        !           425:        if(u.dx) {
        !           426:                if(u.dy) {
        !           427:                        prl(x-(2*u.dx),y);
        !           428:                        prl(x-u.dx,y);
        !           429:                        prl(x,y);
        !           430:                        prl(x,y-u.dy);
        !           431:                        prl(x,y-(2*u.dy));
        !           432:                } else {
        !           433:                        prl(x,y-1);
        !           434:                        prl(x,y);
        !           435:                        prl(x,y+1);
        !           436:                }
        !           437:        } else {
        !           438:                prl(x-1,y);
        !           439:                prl(x,y);
        !           440:                prl(x+1,y);
        !           441:        }
        !           442: }
        !           443: 
        !           444: nose1(x,y)
        !           445: register x,y;
        !           446: {
        !           447:        if(u.dx) {
        !           448:                if(u.dy) {
        !           449:                        nosee(x,u.uy);
        !           450:                        nosee(x,u.uy-u.dy);
        !           451:                        nosee(x,y);
        !           452:                        nosee(u.ux-u.dx,y);
        !           453:                        nosee(u.ux,y);
        !           454:                } else {
        !           455:                        nosee(x,y-1);
        !           456:                        nosee(x,y);
        !           457:                        nosee(x,y+1);
        !           458:                }
        !           459:        } else {
        !           460:                nosee(x-1,y);
        !           461:                nosee(x,y);
        !           462:                nosee(x+1,y);
        !           463:        }
        !           464: }
        !           465: #endif QUEST
        !           466: 
        !           467: vism_at(x,y)
        !           468: register x,y;
        !           469: {
        !           470:        register struct monst *mtmp;
        !           471: 
        !           472:        return((x == u.ux && y == u.uy && !Invisible)
        !           473:                        ? 1 :
        !           474:               (mtmp = m_at(x,y))
        !           475:                        ? ((Blind && Telepat) || canseemon(mtmp)) :
        !           476:                0);
        !           477: }
        !           478: 
        !           479: #ifdef NEWSCR
        !           480: pobj(obj) register struct obj *obj; {
        !           481: register int show = (!obj->oinvis || See_invisible) &&
        !           482:                cansee(obj->ox,obj->oy);
        !           483:        if(obj->odispl){
        !           484:                if(obj->odx != obj->ox || obj->ody != obj->oy || !show)
        !           485:                if(!vism_at(obj->odx,obj->ody)){
        !           486:                        newsym(obj->odx, obj->ody);
        !           487:                        obj->odispl = 0;
        !           488:                }
        !           489:        }
        !           490:        if(show && !vism_at(obj->ox,obj->oy)){
        !           491:                atl(obj->ox,obj->oy,obj->olet);
        !           492:                obj->odispl = 1;
        !           493:                obj->odx = obj->ox;
        !           494:                obj->ody = obj->oy;
        !           495:        }
        !           496: }
        !           497: #endif NEWSCR
        !           498: 
        !           499: unpobj(obj) register struct obj *obj; {
        !           500: /*     if(obj->odispl){
        !           501:                if(!vism_at(obj->odx, obj->ody))
        !           502:                        newsym(obj->odx, obj->ody);
        !           503:                obj->odispl = 0;
        !           504:        }
        !           505: */
        !           506:        if(!vism_at(obj->ox,obj->oy))
        !           507:                newsym(obj->ox,obj->oy);
        !           508: }
        !           509: 
        !           510: seeobjs(){
        !           511: register struct obj *obj, *obj2;
        !           512:        for(obj = fobj; obj; obj = obj2) {
        !           513:                obj2 = obj->nobj;
        !           514:                if(obj->olet == FOOD_SYM && obj->otyp >= CORPSE
        !           515:                        && obj->age + 250 < moves)
        !           516:                                delobj(obj);
        !           517:        }
        !           518:        for(obj = invent; obj; obj = obj2) {
        !           519:                obj2 = obj->nobj;
        !           520:                if(obj->olet == FOOD_SYM && obj->otyp >= CORPSE
        !           521:                        && obj->age + 250 < moves)
        !           522:                                useup(obj);
        !           523:        }
        !           524: }
        !           525: 
        !           526: seemons(){
        !           527: register struct monst *mtmp;
        !           528:        for(mtmp = fmon; mtmp; mtmp = mtmp->nmon){
        !           529:                if(mtmp->data->mlet == ';')
        !           530:                        mtmp->minvis = (u.ustuck != mtmp &&
        !           531:                                        levl[mtmp->mx][mtmp->my].typ == POOL);
        !           532:                pmon(mtmp);
        !           533: #ifndef NOWORM
        !           534:                if(mtmp->wormno) wormsee(mtmp->wormno);
        !           535: #endif NOWORM
        !           536:        }
        !           537: }
        !           538: 
        !           539: pmon(mon) register struct monst *mon; {
        !           540: register int show = (Blind && Telepat) || canseemon(mon);
        !           541:        if(mon->mdispl){
        !           542:                if(mon->mdx != mon->mx || mon->mdy != mon->my || !show)
        !           543:                        unpmon(mon);
        !           544:        }
        !           545:        if(show && !mon->mdispl){
        !           546:                atl(mon->mx,mon->my,
        !           547:                 (!mon->mappearance
        !           548:                  || u.uprops[PROP(RIN_PROTECTION_FROM_SHAPE_CHANGERS)].p_flgs
        !           549:                 ) ? mon->data->mlet : mon->mappearance);
        !           550:                mon->mdispl = 1;
        !           551:                mon->mdx = mon->mx;
        !           552:                mon->mdy = mon->my;
        !           553:        }
        !           554: }
        !           555: 
        !           556: unpmon(mon) register struct monst *mon; {
        !           557:        if(mon->mdispl){
        !           558:                newsym(mon->mdx, mon->mdy);
        !           559:                mon->mdispl = 0;
        !           560:        }
        !           561: }
        !           562: 
        !           563: nscr()
        !           564: {
        !           565:        register x,y;
        !           566:        register struct rm *room;
        !           567: 
        !           568:        if(u.uswallow || u.ux == FAR || flags.nscrinh) return;
        !           569:        pru();
        !           570:        for(y = scrly; y <= scrhy; y++)
        !           571:                for(x = scrlx; x <= scrhx; x++)
        !           572:                        if((room = &levl[x][y])->new) {
        !           573:                                room->new = 0;
        !           574:                                at(x,y,room->scrsym);
        !           575:                        }
        !           576:        scrhx = scrhy = 0;
        !           577:        scrlx = COLNO;
        !           578:        scrly = ROWNO;
        !           579: }
        !           580: 
        !           581: /* 100 suffices for bot(); no relation with COLNO */
        !           582: char oldbot[100], newbot[100];
        !           583: cornbot(lth)
        !           584: register int lth;
        !           585: {
        !           586:        if(lth < sizeof(oldbot)) {
        !           587:                oldbot[lth] = 0;
        !           588:                flags.botl = 1;
        !           589:        }
        !           590: }
        !           591: 
        !           592: bot()
        !           593: {
        !           594: register char *ob = oldbot, *nb = newbot;
        !           595: register int i;
        !           596: extern char *eos();
        !           597:        if(flags.botlx) *ob = 0;
        !           598:        flags.botl = flags.botlx = 0;
        !           599: #ifdef GOLD_ON_BOTL
        !           600:        (void) sprintf(newbot,
        !           601:                "Level %-2d  Gold %-5lu  Hp %3d(%d)  Ac %-2d  Str ",
        !           602:                dlevel, u.ugold, u.uhp, u.uhpmax, u.uac);
        !           603: #else
        !           604:        (void) sprintf(newbot,
        !           605:                "Level %-2d   Hp %3d(%d)   Ac %-2d   Str ",
        !           606:                dlevel,  u.uhp, u.uhpmax, u.uac);
        !           607: #endif GOLD_ON_BOTL
        !           608:        if(u.ustr>18) {
        !           609:            if(u.ustr>117)
        !           610:                (void) strcat(newbot,"18/**");
        !           611:            else
        !           612:                (void) sprintf(eos(newbot), "18/%02d",u.ustr-18);
        !           613:        } else
        !           614:            (void) sprintf(eos(newbot), "%-2d   ",u.ustr);
        !           615: #ifdef EXP_ON_BOTL
        !           616:        (void) sprintf(eos(newbot), "  Exp %2d/%-5lu ", u.ulevel,u.uexp);
        !           617: #else
        !           618:        (void) sprintf(eos(newbot), "   Exp %2u  ", u.ulevel);
        !           619: #endif EXP_ON_BOTL
        !           620:        (void) strcat(newbot, hu_stat[u.uhs]);
        !           621:        if(flags.time)
        !           622:            (void) sprintf(eos(newbot), "  %ld", moves);
        !           623:        if(strlen(newbot) >= COLNO) {
        !           624:                register char *bp0, *bp1;
        !           625:                bp0 = bp1 = newbot;
        !           626:                do {
        !           627:                        if(*bp0 != ' ' || bp0[1] != ' ' || bp0[2] != ' ')
        !           628:                                *bp1++ = *bp0;
        !           629:                } while(*bp0++);
        !           630:        }
        !           631:        for(i = 1; i<COLNO; i++) {
        !           632:                if(*ob != *nb){
        !           633:                        curs(i,ROWNO+2);
        !           634:                        (void) putchar(*nb ? *nb : ' ');
        !           635:                        curx++;
        !           636:                }
        !           637:                if(*ob) ob++;
        !           638:                if(*nb) nb++;
        !           639:        }
        !           640:        (void) strcpy(oldbot, newbot);
        !           641: }
        !           642: 
        !           643: #ifdef WAN_PROBING
        !           644: mstatusline(mtmp) register struct monst *mtmp; {
        !           645:        pline("Status of %s: ", monnam(mtmp));
        !           646:        pline("Level %-2d  Gold %-5lu  Hp %3d(%d)  Ac %-2d  Dam %d",
        !           647:            mtmp->data->mlevel, mtmp->mgold, mtmp->mhp, mtmp->mhpmax,
        !           648:            mtmp->data->ac, (mtmp->data->damn + 1) * (mtmp->data->damd + 1));
        !           649: }
        !           650: #endif WAN_PROBING
        !           651: 
        !           652: cls(){
        !           653:        if(flags.toplin == 1)
        !           654:                more();
        !           655:        flags.toplin = 0;
        !           656: 
        !           657:        clear_screen();
        !           658: 
        !           659:        flags.botlx = 1;
        !           660: }

unix.superglobalmegacorp.com

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