Annotation of 43BSDReno/games/hack/hack.bones.c, revision 1.1

1.1     ! root        1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
        !             2: /* hack.bones.c - version 1.0.3 */
        !             3: 
        !             4: #include "hack.h"
        !             5: extern char plname[PL_NSIZ];
        !             6: extern long somegold();
        !             7: extern struct monst *makemon();
        !             8: extern struct permonst pm_ghost;
        !             9: 
        !            10: char bones[] = "bones_xx";
        !            11: 
        !            12: /* save bones and possessions of a deceased adventurer */
        !            13: savebones(){
        !            14: register fd;
        !            15: register struct obj *otmp;
        !            16: register struct trap *ttmp;
        !            17: register struct monst *mtmp;
        !            18:        if(dlevel <= 0 || dlevel > MAXLEVEL) return;
        !            19:        if(!rn2(1 + dlevel/2)) return;  /* not so many ghosts on low levels */
        !            20:        bones[6] = '0' + (dlevel/10);
        !            21:        bones[7] = '0' + (dlevel%10);
        !            22:        if((fd = open(bones,0)) >= 0){
        !            23:                (void) close(fd);
        !            24:                return;
        !            25:        }
        !            26:        /* drop everything; the corpse's possessions are usually cursed */
        !            27:        otmp = invent;
        !            28:        while(otmp){
        !            29:                otmp->ox = u.ux;
        !            30:                otmp->oy = u.uy;
        !            31:                otmp->age = 0;          /* very long ago */
        !            32:                otmp->owornmask = 0;
        !            33:                if(rn2(5)) otmp->cursed = 1;
        !            34:                if(!otmp->nobj){
        !            35:                        otmp->nobj = fobj;
        !            36:                        fobj = invent;
        !            37:                        invent = 0;     /* superfluous */
        !            38:                        break;
        !            39:                }
        !            40:                otmp = otmp->nobj;
        !            41:        }
        !            42:        if(!(mtmp = makemon(PM_GHOST, u.ux, u.uy))) return;
        !            43:        mtmp->mx = u.ux;
        !            44:        mtmp->my = u.uy;
        !            45:        mtmp->msleep = 1;
        !            46:        (void) strcpy((char *) mtmp->mextra, plname);
        !            47:        mkgold(somegold() + d(dlevel,30), u.ux, u.uy);
        !            48:        for(mtmp = fmon; mtmp; mtmp = mtmp->nmon){
        !            49:                mtmp->m_id = 0;
        !            50:                if(mtmp->mtame) {
        !            51:                        mtmp->mtame = 0;
        !            52:                        mtmp->mpeaceful = 0;
        !            53:                }
        !            54:                mtmp->mlstmv = 0;
        !            55:                if(mtmp->mdispl) unpmon(mtmp);
        !            56:        }
        !            57:        for(ttmp = ftrap; ttmp; ttmp = ttmp->ntrap)
        !            58:                ttmp->tseen = 0;
        !            59:        for(otmp = fobj; otmp; otmp = otmp->nobj) {
        !            60:                otmp->o_id = 0;
        !            61:             /* otmp->o_cnt_id = 0; - superfluous */
        !            62:                otmp->onamelth = 0;
        !            63:                otmp->known = 0;
        !            64:                otmp->invlet = 0;
        !            65:                if(otmp->olet == AMULET_SYM && !otmp->spe) {
        !            66:                        otmp->spe = -1;      /* no longer the actual amulet */
        !            67:                        otmp->cursed = 1;    /* flag as gotten from a ghost */
        !            68:                }
        !            69:        }
        !            70:        if((fd = creat(bones, FMASK)) < 0) return;
        !            71:        savelev(fd,dlevel);
        !            72:        (void) close(fd);
        !            73: }
        !            74: 
        !            75: getbones(){
        !            76: register fd,x,y,ok;
        !            77:        if(rn2(3)) return(0);   /* only once in three times do we find bones */
        !            78:        bones[6] = '0' + dlevel/10;
        !            79:        bones[7] = '0' + dlevel%10;
        !            80:        if((fd = open(bones, 0)) < 0) return(0);
        !            81:        if((ok = uptodate(fd)) != 0){
        !            82:                getlev(fd, 0, dlevel);
        !            83:                for(x = 0; x < COLNO; x++) for(y = 0; y < ROWNO; y++)
        !            84:                        levl[x][y].seen = levl[x][y].new = 0;
        !            85:        }
        !            86:        (void) close(fd);
        !            87: #ifdef WIZARD
        !            88:        if(!wizard)     /* duvel!frans: don't remove bones while debugging */
        !            89: #endif WiZARD
        !            90:            if(unlink(bones) < 0){
        !            91:                pline("Cannot unlink %s .", bones);
        !            92:                return(0);
        !            93:        }
        !            94:        return(ok);
        !            95: }

unix.superglobalmegacorp.com

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