X-Git-Url: https://git.cameronkatri.com/bsdgames-darwin.git/blobdiff_plain/94b5353c71e7246077d468afe68d51ce85fc213d..a8bfdad49d7620b77f20ab86a8e20ac0229e392e:/hack/hack.trap.c diff --git a/hack/hack.trap.c b/hack/hack.trap.c index dbcb1214..ae2da877 100644 --- a/hack/hack.trap.c +++ b/hack/hack.trap.c @@ -1,18 +1,22 @@ +/* $NetBSD: hack.trap.c,v 1.6 2001/03/25 20:44:03 jsm Exp $ */ + /* * Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ +#include #ifndef lint -static char rcsid[] = "$NetBSD: hack.trap.c,v 1.3 1995/03/23 08:31:44 cgd Exp $"; -#endif /* not lint */ - -#include "hack.h" +__RCSID("$NetBSD: hack.trap.c,v 1.6 2001/03/25 20:44:03 jsm Exp $"); +#endif /* not lint */ -extern struct monst *makemon(); +#include +#include "hack.h" +#include "extern.h" +#include "def.mkroom.h" -char vowels[] = "aeiou"; +const char vowels[] = "aeiou"; -char *traps[] = { +const char *const traps[] = { " bear trap", "n arrow trap", " dart trap", @@ -24,11 +28,11 @@ char *traps[] = { " mimic" }; -struct trap * -maketrap(x,y,typ) -register x,y,typ; +struct trap * +maketrap(x, y, typ) + int x, y, typ; { - register struct trap *ttmp; + struct trap *ttmp; ttmp = newtrap(); ttmp->ttyp = typ; @@ -38,24 +42,27 @@ register x,y,typ; ttmp->ty = y; ttmp->ntrap = ftrap; ftrap = ttmp; - return(ttmp); + return (ttmp); } -dotrap(trap) register struct trap *trap; { - register int ttype = trap->ttyp; +void +dotrap(trap) + struct trap *trap; +{ + int ttype = trap->ttyp; nomul(0); - if(trap->tseen && !rn2(5) && ttype != PIT) + if (trap->tseen && !rn2(5) && ttype != PIT) pline("You escape a%s.", traps[ttype]); else { trap->tseen = 1; - switch(ttype) { + switch (ttype) { case SLP_GAS_TRAP: pline("A cloud of gas puts you to sleep!"); nomul(-rnd(25)); break; case BEAR_TRAP: - if(Levitation) { + if (Levitation) { pline("You float over a bear trap."); break; } @@ -65,73 +72,74 @@ dotrap(trap) register struct trap *trap; { break; case PIERC: deltrap(trap); - if(makemon(PM_PIERCER,u.ux,u.uy)) { - pline("A piercer suddenly drops from the ceiling!"); - if(uarmh) - pline("Its blow glances off your helmet."); - else - (void) thitu(3,d(4,6),"falling piercer"); + if (makemon(PM_PIERCER, u.ux, u.uy)) { + pline("A piercer suddenly drops from the ceiling!"); + if (uarmh) + pline("Its blow glances off your helmet."); + else + (void) thitu(3, d(4, 6), "falling piercer"); } break; case ARROW_TRAP: pline("An arrow shoots out at you!"); - if(!thitu(8,rnd(6),"arrow")){ + if (!thitu(8, rnd(6), "arrow")) { mksobj_at(ARROW, u.ux, u.uy); fobj->quan = 1; } break; case TRAPDOOR: - if(!xdnstair) { -pline("A trap door in the ceiling opens and a rock falls on your head!"); -if(uarmh) pline("Fortunately, you are wearing a helmet!"); - losehp(uarmh ? 2 : d(2,10),"falling rock"); - mksobj_at(ROCK, u.ux, u.uy); - fobj->quan = 1; - stackobj(fobj); - if(Invisible) newsym(u.ux, u.uy); + if (!xdnstair) { + pline("A trap door in the ceiling opens and a rock falls on your head!"); + if (uarmh) + pline("Fortunately, you are wearing a helmet!"); + losehp(uarmh ? 2 : d(2, 10), "falling rock"); + mksobj_at(ROCK, u.ux, u.uy); + fobj->quan = 1; + stackobj(fobj); + if (Invisible) + newsym(u.ux, u.uy); } else { - register int newlevel = dlevel + 1; - while(!rn2(4) && newlevel < 29) + int newlevel = dlevel + 1; + while (!rn2(4) && newlevel < 29) newlevel++; pline("A trap door opens up under you!"); - if(Levitation || u.ustuck) { - pline("For some reason you don't fall in."); + if (Levitation || u.ustuck) { + pline("For some reason you don't fall in."); break; } - goto_level(newlevel, FALSE); } break; case DART_TRAP: pline("A little dart shoots out at you!"); - if(thitu(7,rnd(3),"little dart")) { - if(!rn2(6)) - poisoned("dart","poison dart"); + if (thitu(7, rnd(3), "little dart")) { + if (!rn2(6)) + poisoned("dart", "poison dart"); } else { mksobj_at(DART, u.ux, u.uy); fobj->quan = 1; } break; case TELEP_TRAP: - if(trap->once) { + if (trap->once) { deltrap(trap); - newsym(u.ux,u.uy); + newsym(u.ux, u.uy); vtele(); } else { - newsym(u.ux,u.uy); + newsym(u.ux, u.uy); tele(); } break; case PIT: - if(Levitation) { + if (Levitation) { pline("A pit opens up under you!"); pline("You don't fall in!"); break; } pline("You fall into a pit!"); - u.utrap = rn1(6,2); + u.utrap = rn1(6, 2); u.utraptype = TT_PIT; - losehp(rnd(6),"fall into a pit"); + losehp(rnd(6), "fall into a pit"); selftouch("Falling, you"); break; default: @@ -140,98 +148,104 @@ if(uarmh) pline("Fortunately, you are wearing a helmet!"); } } -mintrap(mtmp) register struct monst *mtmp; { - register struct trap *trap = t_at(mtmp->mx, mtmp->my); - register int wasintrap = mtmp->mtrapped; +int +mintrap(mtmp) + struct monst *mtmp; +{ + struct trap *trap = t_at(mtmp->mx, mtmp->my); + int wasintrap = mtmp->mtrapped; - if(!trap) { + if (!trap) { mtmp->mtrapped = 0; /* perhaps teleported? */ - } else if(wasintrap) { - if(!rn2(40)) mtmp->mtrapped = 0; + } else if (wasintrap) { + if (!rn2(40)) + mtmp->mtrapped = 0; } else { - register int tt = trap->ttyp; - int in_sight = cansee(mtmp->mx,mtmp->my); - extern char mlarge[]; + int tt = trap->ttyp; + int in_sight = cansee(mtmp->mx, mtmp->my); - if(mtmp->mtrapseen & (1 << tt)) { - /* he has been in such a trap - perhaps he escapes */ - if(rn2(4)) return(0); - } - mtmp->mtrapseen |= (1 << tt); - switch (tt) { + if (mtmp->mtrapseen & (1 << tt)) { + /* he has been in such a trap - perhaps he escapes */ + if (rn2(4)) + return (0); + } + mtmp->mtrapseen |= (1 << tt); + switch (tt) { case BEAR_TRAP: - if(index(mlarge, mtmp->data->mlet)) { - if(in_sight) - pline("%s is caught in a bear trap!", - Monnam(mtmp)); - else - if(mtmp->data->mlet == 'o') - pline("You hear the roaring of an angry bear!"); + if (strchr(mlarge, mtmp->data->mlet)) { + if (in_sight) + pline("%s is caught in a bear trap!", + Monnam(mtmp)); + else if (mtmp->data->mlet == 'o') + pline("You hear the roaring of an angry bear!"); mtmp->mtrapped = 1; } break; case PIT: /* there should be a mtmp/data -> floating */ - if(!index("EywBfk'& ", mtmp->data->mlet)) { /* ab */ + if (!strchr("EywBfk'& ", mtmp->data->mlet)) { /* ab */ mtmp->mtrapped = 1; - if(in_sight) - pline("%s falls in a pit!", Monnam(mtmp)); + if (in_sight) + pline("%s falls in a pit!", Monnam(mtmp)); } break; case SLP_GAS_TRAP: - if(!mtmp->msleep && !mtmp->mfroz) { + if (!mtmp->msleep && !mtmp->mfroz) { mtmp->msleep = 1; - if(in_sight) - pline("%s suddenly falls asleep!", - Monnam(mtmp)); + if (in_sight) + pline("%s suddenly falls asleep!", + Monnam(mtmp)); } break; case TELEP_TRAP: rloc(mtmp); - if(in_sight && !cansee(mtmp->mx,mtmp->my)) + if (in_sight && !cansee(mtmp->mx, mtmp->my)) pline("%s suddenly disappears!", - Monnam(mtmp)); + Monnam(mtmp)); break; case ARROW_TRAP: - if(in_sight) { + if (in_sight) { pline("%s is hit by an arrow!", - Monnam(mtmp)); + Monnam(mtmp)); } mtmp->mhp -= 3; break; case DART_TRAP: - if(in_sight) { + if (in_sight) { pline("%s is hit by a dart!", - Monnam(mtmp)); + Monnam(mtmp)); } mtmp->mhp -= 2; /* not mondied here !! */ break; case TRAPDOOR: - if(!xdnstair) { + if (!xdnstair) { mtmp->mhp -= 10; - if(in_sight) -pline("A trap door in the ceiling opens and a rock hits %s!", monnam(mtmp)); + if (in_sight) + pline("A trap door in the ceiling opens and a rock hits %s!", monnam(mtmp)); break; } - if(mtmp->data->mlet != 'w'){ + if (mtmp->data->mlet != 'w') { fall_down(mtmp); - if(in_sight) - pline("Suddenly, %s disappears out of sight.", monnam(mtmp)); - return(2); /* no longer on this level */ + if (in_sight) + pline("Suddenly, %s disappears out of sight.", monnam(mtmp)); + return (2); /* no longer on this level */ } break; case PIERC: break; default: impossible("Some monster encountered a strange trap."); - } + } } - return(mtmp->mtrapped); + return (mtmp->mtrapped); } -selftouch(arg) char *arg; { - if(uwep && uwep->otyp == DEAD_COCKATRICE){ +void +selftouch(arg) + const char *arg; +{ + if (uwep && uwep->otyp == DEAD_COCKATRICE) { pline("%s touch the dead cockatrice.", arg); pline("You turn to stone."); killer = objects[uwep->otyp].oc_name; @@ -239,9 +253,11 @@ selftouch(arg) char *arg; { } } -float_up(){ - if(u.utrap) { - if(u.utraptype == TT_PIT) { +void +float_up() +{ + if (u.utrap) { + if (u.utraptype == TT_PIT) { u.utrap = 0; pline("You float up, out of the pit!"); } else { @@ -251,132 +267,151 @@ float_up(){ pline("You start to float in the air!"); } -float_down(){ - register struct trap *trap; +void +float_down() +{ + struct trap *trap; pline("You float gently to the ground."); - if(trap = t_at(u.ux,u.uy)) - switch(trap->ttyp) { + if ((trap = t_at(u.ux, u.uy)) != NULL) + switch (trap->ttyp) { case PIERC: break; case TRAPDOOR: - if(!xdnstair || u.ustuck) break; + if (!xdnstair || u.ustuck) + break; /* fall into next case */ default: dotrap(trap); - } + } pickup(1); } -vtele() { -#include "def.mkroom.h" - register struct mkroom *croom; - for(croom = &rooms[0]; croom->hx >= 0; croom++) - if(croom->rtype == VAULT) { - register x,y; - - x = rn2(2) ? croom->lx : croom->hx; - y = rn2(2) ? croom->ly : croom->hy; - if(teleok(x,y)) { - teleds(x,y); - return; +void +vtele() +{ + struct mkroom *croom; + for (croom = &rooms[0]; croom->hx >= 0; croom++) + if (croom->rtype == VAULT) { + int x, y; + + x = rn2(2) ? croom->lx : croom->hx; + y = rn2(2) ? croom->ly : croom->hy; + if (teleok(x, y)) { + teleds(x, y); + return; + } } - } tele(); } -tele() { - extern coord getpos(); - coord cc; - register int nux,nuy; +void +tele() +{ + coord cc; + int nux, nuy; - if(Teleport_control) { + if (Teleport_control) { pline("To what position do you want to be teleported?"); - cc = getpos(1, "the desired position"); /* 1: force valid */ - /* possible extensions: introduce a small error if - magic power is low; allow transfer to solid rock */ - if(teleok(cc.x, cc.y)){ + cc = getpos(1, "the desired position"); /* 1: force valid */ + /* + * possible extensions: introduce a small error if magic + * power is low; allow transfer to solid rock + */ + if (teleok(cc.x, cc.y)) { teleds(cc.x, cc.y); return; } pline("Sorry ..."); } do { - nux = rnd(COLNO-1); + nux = rnd(COLNO - 1); nuy = rn2(ROWNO); - } while(!teleok(nux, nuy)); + } while (!teleok(nux, nuy)); teleds(nux, nuy); } +void teleds(nux, nuy) -register int nux,nuy; + int nux, nuy; { - if(Punished) unplacebc(); + if (Punished) + unplacebc(); unsee(); u.utrap = 0; u.ustuck = 0; u.ux = nux; u.uy = nuy; setsee(); - if(Punished) placebc(1); - if(u.uswallow){ + if (Punished) + placebc(1); + if (u.uswallow) { u.uswldtim = u.uswallow = 0; docrt(); } nomul(0); - if(levl[nux][nuy].typ == POOL && !Levitation) + if (levl[nux][nuy].typ == POOL && !Levitation) drown(); (void) inshop(); pickup(1); - if(!Blind) read_engr_at(u.ux,u.uy); + if (!Blind) + read_engr_at(u.ux, u.uy); } -teleok(x,y) register int x,y; { /* might throw him into a POOL */ - return( isok(x,y) && !IS_ROCK(levl[x][y].typ) && !m_at(x,y) && - !sobj_at(ENORMOUS_ROCK,x,y) && !t_at(x,y) - ); +int +teleok(x, y) + int x, y; +{ /* might throw him into a POOL */ + return (isok(x, y) && !IS_ROCK(levl[x][y].typ) && !m_at(x, y) && + !sobj_at(ENORMOUS_ROCK, x, y) && !t_at(x, y) + ); /* Note: gold is permitted (because of vaults) */ } -dotele() { - extern char pl_character[]; - - if( +int +dotele() +{ + if ( #ifdef WIZARD - !wizard && -#endif WIZARD - (!Teleportation || u.ulevel < 6 || - (pl_character[0] != 'W' && u.ulevel < 10))) { + !wizard && +#endif /* WIZARD */ + (!Teleportation || u.ulevel < 6 || + (pl_character[0] != 'W' && u.ulevel < 10))) { pline("You are not able to teleport at will."); - return(0); + return (0); } - if(u.uhunger <= 100 || u.ustr < 6) { + if (u.uhunger <= 100 || u.ustr < 6) { pline("You miss the strength for a teleport spell."); - return(1); + return (1); } tele(); morehungry(100); - return(1); + return (1); } -placebc(attach) int attach; { - if(!uchain || !uball){ +void +placebc(attach) + int attach; +{ + if (!uchain || !uball) { impossible("Where are your chain and ball??"); return; } uball->ox = uchain->ox = u.ux; uball->oy = uchain->oy = u.uy; - if(attach){ + if (attach) { uchain->nobj = fobj; fobj = uchain; - if(!carried(uball)){ + if (!carried(uball)) { uball->nobj = fobj; fobj = uball; } } } -unplacebc(){ - if(!carried(uball)){ +void +unplacebc() +{ + if (!carried(uball)) { freeobj(uball); unpobj(uball); } @@ -384,67 +419,76 @@ unplacebc(){ unpobj(uchain); } -level_tele() { -register int newlevel; - if(Teleport_control) { - char buf[BUFSZ]; - - do { - pline("To what level do you want to teleport? [type a number] "); - getlin(buf); - } while(!digit(buf[0]) && (buf[0] != '-' || !digit(buf[1]))); - newlevel = atoi(buf); +void +level_tele() +{ + int newlevel; + if (Teleport_control) { + char buf[BUFSZ]; + + do { + pline("To what level do you want to teleport? [type a number] "); + getlin(buf); + } while (!digit(buf[0]) && (buf[0] != '-' || !digit(buf[1]))); + newlevel = atoi(buf); } else { - newlevel = 5 + rn2(20); /* 5 - 24 */ - if(dlevel == newlevel) - if(!xdnstair) newlevel--; else newlevel++; + newlevel = 5 + rn2(20); /* 5 - 24 */ + if (dlevel == newlevel) { + if (!xdnstair) + newlevel--; + else + newlevel++; + } } - if(newlevel >= 30) { - if(newlevel > MAXLEVEL) newlevel = MAXLEVEL; - pline("You arrive at the center of the earth ..."); - pline("Unfortunately it is here that hell is located."); - if(Fire_resistance) { - pline("But the fire doesn't seem to harm you."); - } else { - pline("You burn to a crisp."); - dlevel = maxdlevel = newlevel; - killer = "visit to the hell"; - done("burned"); - } + if (newlevel >= 30) { + if (newlevel > MAXLEVEL) + newlevel = MAXLEVEL; + pline("You arrive at the center of the earth ..."); + pline("Unfortunately it is here that hell is located."); + if (Fire_resistance) { + pline("But the fire doesn't seem to harm you."); + } else { + pline("You burn to a crisp."); + dlevel = maxdlevel = newlevel; + killer = "visit to the hell"; + done("burned"); + } } - if(newlevel < 0) { - newlevel = 0; - pline("You are now high above the clouds ..."); - if(Levitation) { - pline("You float gently down to earth."); - done("escaped"); - } - pline("Unfortunately, you don't know how to fly."); - pline("You fall down a few thousand feet and break your neck."); - dlevel = 0; - killer = "fall"; - done("died"); + if (newlevel < 0) { + newlevel = 0; + pline("You are now high above the clouds ..."); + if (Levitation) { + pline("You float gently down to earth."); + done("escaped"); + } + pline("Unfortunately, you don't know how to fly."); + pline("You fall down a few thousand feet and break your neck."); + dlevel = 0; + killer = "fall"; + done("died"); } - - goto_level(newlevel, FALSE); /* calls done("escaped") if newlevel==0 */ + goto_level(newlevel, FALSE); /* calls done("escaped") if + * newlevel==0 */ } +void drown() { pline("You fall into a pool!"); pline("You can't swim!"); - if(rn2(3) < u.uluck+2) { + if (rn2(3) < u.uluck + 2) { /* most scrolls become unreadable */ - register struct obj *obj; + struct obj *obj; - for(obj = invent; obj; obj = obj->nobj) - if(obj->olet == SCROLL_SYM && rn2(12) > u.uluck) + for (obj = invent; obj; obj = obj->nobj) + if (obj->olet == SCROLL_SYM && rn2(12) > u.uluck) obj->otyp = SCR_BLANK_PAPER; /* we should perhaps merge these scrolls ? */ pline("You attempt a teleport spell."); /* utcsri!carroll */ (void) dotele(); - if(levl[u.ux][u.uy].typ != POOL) return; + if (levl[u.ux][u.uy].typ != POOL) + return; } pline("You drown ..."); killer = "pool of water";