diff options
author | jkh <jkh@FreeBSD.org> | 1994-09-04 04:03:31 +0000 |
---|---|---|
committer | jkh <jkh@FreeBSD.org> | 1994-09-04 04:03:31 +0000 |
commit | 057afceb86e030ad65b0130436860d9a18066186 (patch) | |
tree | a0ced9c9b9278eb776d89cd2565c27ddcf020b51 /games/hack/hack.bones.c | |
parent | eedec95276cdb8aef98e92c5371000f10b8d6ba7 (diff) | |
download | FreeBSD-src-057afceb86e030ad65b0130436860d9a18066186.zip FreeBSD-src-057afceb86e030ad65b0130436860d9a18066186.tar.gz |
Bring in the 4.4 Lite games directory, modulo man page changes and segregation
of the x11 based games. I'm not going to tag the originals with bsd_44_lite
and do this in two stages since it's just not worth it for this collection,
and I've got directory renames to deal with that way. Bleah.
Submitted by: jkh
Diffstat (limited to 'games/hack/hack.bones.c')
-rw-r--r-- | games/hack/hack.bones.c | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/games/hack/hack.bones.c b/games/hack/hack.bones.c new file mode 100644 index 0000000..d4a05b8 --- /dev/null +++ b/games/hack/hack.bones.c @@ -0,0 +1,95 @@ +/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ +/* hack.bones.c - version 1.0.3 */ + +#include "hack.h" +extern char plname[PL_NSIZ]; +extern long somegold(); +extern struct monst *makemon(); +extern struct permonst pm_ghost; + +char bones[] = "bones_xx"; + +/* save bones and possessions of a deceased adventurer */ +savebones(){ +register fd; +register struct obj *otmp; +register struct trap *ttmp; +register struct monst *mtmp; + if(dlevel <= 0 || dlevel > MAXLEVEL) return; + if(!rn2(1 + dlevel/2)) return; /* not so many ghosts on low levels */ + bones[6] = '0' + (dlevel/10); + bones[7] = '0' + (dlevel%10); + if((fd = open(bones,0)) >= 0){ + (void) close(fd); + return; + } + /* drop everything; the corpse's possessions are usually cursed */ + otmp = invent; + while(otmp){ + otmp->ox = u.ux; + otmp->oy = u.uy; + otmp->age = 0; /* very long ago */ + otmp->owornmask = 0; + if(rn2(5)) otmp->cursed = 1; + if(!otmp->nobj){ + otmp->nobj = fobj; + fobj = invent; + invent = 0; /* superfluous */ + break; + } + otmp = otmp->nobj; + } + if(!(mtmp = makemon(PM_GHOST, u.ux, u.uy))) return; + mtmp->mx = u.ux; + mtmp->my = u.uy; + mtmp->msleep = 1; + (void) strcpy((char *) mtmp->mextra, plname); + mkgold(somegold() + d(dlevel,30), u.ux, u.uy); + for(mtmp = fmon; mtmp; mtmp = mtmp->nmon){ + mtmp->m_id = 0; + if(mtmp->mtame) { + mtmp->mtame = 0; + mtmp->mpeaceful = 0; + } + mtmp->mlstmv = 0; + if(mtmp->mdispl) unpmon(mtmp); + } + for(ttmp = ftrap; ttmp; ttmp = ttmp->ntrap) + ttmp->tseen = 0; + for(otmp = fobj; otmp; otmp = otmp->nobj) { + otmp->o_id = 0; + /* otmp->o_cnt_id = 0; - superfluous */ + otmp->onamelth = 0; + otmp->known = 0; + otmp->invlet = 0; + if(otmp->olet == AMULET_SYM && !otmp->spe) { + otmp->spe = -1; /* no longer the actual amulet */ + otmp->cursed = 1; /* flag as gotten from a ghost */ + } + } + if((fd = creat(bones, FMASK)) < 0) return; + savelev(fd,dlevel); + (void) close(fd); +} + +getbones(){ +register fd,x,y,ok; + if(rn2(3)) return(0); /* only once in three times do we find bones */ + bones[6] = '0' + dlevel/10; + bones[7] = '0' + dlevel%10; + if((fd = open(bones, 0)) < 0) return(0); + if((ok = uptodate(fd)) != 0){ + getlev(fd, 0, dlevel); + for(x = 0; x < COLNO; x++) for(y = 0; y < ROWNO; y++) + levl[x][y].seen = levl[x][y].new = 0; + } + (void) close(fd); +#ifdef WIZARD + if(!wizard) /* duvel!frans: don't remove bones while debugging */ +#endif WiZARD + if(unlink(bones) < 0){ + pline("Cannot unlink %s .", bones); + return(0); + } + return(ok); +} |