diff options
author | christos <christos@NetBSD.org> | 1997-10-19 16:56:41 +0000 |
---|---|---|
committer | christos <christos@NetBSD.org> | 1997-10-19 16:56:41 +0000 |
commit | 84e7d0704483ce39bbdeacd5e676168db6fa664f (patch) | |
tree | f9ffeffa1a4342e749494bc3f5618552435839af /hack/hack.do.c | |
parent | f73f1009084e75624e3bc00fef9cf4749de80dcc (diff) | |
download | bsdgames-darwin-84e7d0704483ce39bbdeacd5e676168db6fa664f.tar.gz bsdgames-darwin-84e7d0704483ce39bbdeacd5e676168db6fa664f.tar.zst bsdgames-darwin-84e7d0704483ce39bbdeacd5e676168db6fa664f.zip |
WARNsify...
Diffstat (limited to 'hack/hack.do.c')
-rw-r--r-- | hack/hack.do.c | 550 |
1 files changed, 293 insertions, 257 deletions
diff --git a/hack/hack.do.c b/hack/hack.do.c index aec8b911..2ac7f279 100644 --- a/hack/hack.do.c +++ b/hack/hack.do.c @@ -1,140 +1,156 @@ +/* $NetBSD: hack.do.c,v 1.4 1997/10/19 16:57:41 christos Exp $ */ + /* * Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ +#include <sys/cdefs.h> #ifndef lint -static char rcsid[] = "$NetBSD: hack.do.c,v 1.3 1995/03/23 08:29:53 cgd Exp $"; -#endif /* not lint */ +__RCSID("$NetBSD: hack.do.c,v 1.4 1997/10/19 16:57:41 christos Exp $"); +#endif /* not lint */ /* Contains code for 'd', 'D' (drop), '>', '<' (up, down) and 't' (throw) */ #include "hack.h" +#include "extern.h" +#include <fcntl.h> +#include <unistd.h> +#include <stdlib.h> -extern struct obj *splitobj(), *addinv(); -extern boolean hmon(); -extern boolean level_exists[]; -extern struct monst youmonst; -extern char *Doname(); -extern char *nomovemsg; -static int drop(); +static int drop __P((struct obj *)); -dodrop() { - return(drop(getobj("0$#", "drop"))); +int +dodrop() +{ + return (drop(getobj("0$#", "drop"))); } static int -drop(obj) register struct obj *obj; { - if(!obj) return(0); - if(obj->olet == '$') { /* pseudo object */ - register long amount = OGOLD(obj); +drop(obj) + struct obj *obj; +{ + if (!obj) + return (0); + if (obj->olet == '$') { /* pseudo object */ + long amount = OGOLD(obj); - if(amount == 0) + if (amount == 0) pline("You didn't drop any gold pieces."); else { mkgold(amount, u.ux, u.uy); pline("You dropped %ld gold piece%s.", - amount, plur(amount)); - if(Invisible) newsym(u.ux, u.uy); + amount, plur(amount)); + if (Invisible) + newsym(u.ux, u.uy); } free((char *) obj); - return(1); + return (1); } - if(obj->owornmask & (W_ARMOR | W_RING)){ + if (obj->owornmask & (W_ARMOR | W_RING)) { pline("You cannot drop something you are wearing."); - return(0); + return (0); } - if(obj == uwep) { - if(uwep->cursed) { + if (obj == uwep) { + if (uwep->cursed) { pline("Your weapon is welded to your hand!"); - return(0); + return (0); } setuwep((struct obj *) 0); } pline("You dropped %s.", doname(obj)); dropx(obj); - return(1); + return (1); } /* Called in several places - should not produce texts */ +void dropx(obj) -register struct obj *obj; + struct obj *obj; { freeinv(obj); dropy(obj); } +void dropy(obj) -register struct obj *obj; + struct obj *obj; { - if(obj->otyp == CRYSKNIFE) + if (obj->otyp == CRYSKNIFE) obj->otyp = WORM_TOOTH; obj->ox = u.ux; obj->oy = u.uy; obj->nobj = fobj; fobj = obj; - if(Invisible) newsym(u.ux,u.uy); + if (Invisible) + newsym(u.ux, u.uy); subfrombill(obj); stackobj(obj); } /* drop several things */ -doddrop() { - return(ggetobj("drop", drop, 0)); +int +doddrop() +{ + return (ggetobj("drop", drop, 0)); } +int dodown() { - if(u.ux != xdnstair || u.uy != ydnstair) { + if (u.ux != xdnstair || u.uy != ydnstair) { pline("You can't go down here."); - return(0); + return (0); } - if(u.ustuck) { + if (u.ustuck) { pline("You are being held, and cannot go down."); - return(1); + return (1); } - if(Levitation) { + if (Levitation) { pline("You're floating high above the stairs."); - return(0); + return (0); } - - goto_level(dlevel+1, TRUE); - return(1); + goto_level(dlevel + 1, TRUE); + return (1); } +int doup() { - if(u.ux != xupstair || u.uy != yupstair) { + if (u.ux != xupstair || u.uy != yupstair) { pline("You can't go up here."); - return(0); + return (0); } - if(u.ustuck) { + if (u.ustuck) { pline("You are being held, and cannot go up."); - return(1); + return (1); } - if(!Levitation && inv_weight() + 5 > 0) { + if (!Levitation && inv_weight() + 5 > 0) { pline("Your load is too heavy to climb the stairs."); - return(1); + return (1); } - - goto_level(dlevel-1, TRUE); - return(1); + goto_level(dlevel - 1, TRUE); + return (1); } +void goto_level(newlevel, at_stairs) -register int newlevel; -register boolean at_stairs; + int newlevel; + boolean at_stairs; { - register fd; - register boolean up = (newlevel < dlevel); + int fd; + boolean up = (newlevel < dlevel); - if(newlevel <= 0) done("escaped"); /* in fact < 0 is impossible */ - if(newlevel > MAXLEVEL) newlevel = MAXLEVEL; /* strange ... */ - if(newlevel == dlevel) return; /* this can happen */ + if (newlevel <= 0) + done("escaped");/* in fact < 0 is impossible */ + if (newlevel > MAXLEVEL) + newlevel = MAXLEVEL; /* strange ... */ + if (newlevel == dlevel) + return; /* this can happen */ glo(dlevel); fd = creat(lock, FMASK); - if(fd < 0) { + if (fd < 0) { /* * This is not quite impossible: e.g., we may have * exceeded our quota. If that is the case then we @@ -143,35 +159,33 @@ register boolean at_stairs; * writable. */ pline("A mysterious force prevents you from going %s.", - up ? "up" : "down"); + up ? "up" : "down"); return; } - - if(Punished) unplacebc(); - u.utrap = 0; /* needed in level_tele */ - u.ustuck = 0; /* idem */ + if (Punished) + unplacebc(); + u.utrap = 0; /* needed in level_tele */ + u.ustuck = 0; /* idem */ keepdogs(); seeoff(1); - if(u.uswallow) /* idem */ + if (u.uswallow) /* idem */ u.uswldtim = u.uswallow = 0; flags.nscrinh = 1; - u.ux = FAR; /* hack */ - (void) inshop(); /* probably was a trapdoor */ + u.ux = FAR; /* hack */ + (void) inshop(); /* probably was a trapdoor */ - savelev(fd,dlevel); + savelev(fd, dlevel); (void) close(fd); dlevel = newlevel; - if(maxdlevel < dlevel) + if (maxdlevel < dlevel) maxdlevel = dlevel; glo(dlevel); - if(!level_exists[dlevel]) + if (!level_exists[dlevel]) mklev(); else { - extern int hackpid; - - if((fd = open(lock,0)) < 0) { + if ((fd = open(lock, 0)) < 0) { pline("Cannot open %s .", lock); pline("Probably someone removed it."); done("tricked"); @@ -180,229 +194,244 @@ register boolean at_stairs; (void) close(fd); } - if(at_stairs) { - if(up) { - u.ux = xdnstair; - u.uy = ydnstair; - if(!u.ux) { /* entering a maze from below? */ - u.ux = xupstair; /* this will confuse the player! */ - u.uy = yupstair; + if (at_stairs) { + if (up) { + u.ux = xdnstair; + u.uy = ydnstair; + if (!u.ux) { /* entering a maze from below? */ + u.ux = xupstair; /* this will confuse the + * player! */ + u.uy = yupstair; + } + if (Punished && !Levitation) { + pline("With great effort you climb the stairs."); + placebc(1); + } + } else { + u.ux = xupstair; + u.uy = yupstair; + if (inv_weight() + 5 > 0 || Punished) { + pline("You fall down the stairs."); /* %% */ + losehp(rnd(3), "fall"); + if (Punished) { + if (uwep != uball && rn2(3)) { + pline("... and are hit by the iron ball."); + losehp(rnd(20), "iron ball"); + } + placebc(1); + } + selftouch("Falling, you"); + } } - if(Punished && !Levitation){ - pline("With great effort you climb the stairs."); - placebc(1); + { + struct monst *mtmp = m_at(u.ux, u.uy); + if (mtmp) + mnexto(mtmp); } - } else { - u.ux = xupstair; - u.uy = yupstair; - if(inv_weight() + 5 > 0 || Punished){ - pline("You fall down the stairs."); /* %% */ - losehp(rnd(3), "fall"); - if(Punished) { - if(uwep != uball && rn2(3)){ - pline("... and are hit by the iron ball."); - losehp(rnd(20), "iron ball"); - } - placebc(1); + } else { /* trapdoor or level_tele */ + do { + u.ux = rnd(COLNO - 1); + u.uy = rn2(ROWNO); + } while (levl[u.ux][u.uy].typ != ROOM || + m_at(u.ux, u.uy)); + if (Punished) { + if (uwep != uball && !up /* %% */ && rn2(5)) { + pline("The iron ball falls on your head."); + losehp(rnd(25), "iron ball"); } - selftouch("Falling, you"); - } - } - { register struct monst *mtmp = m_at(u.ux, u.uy); - if(mtmp) - mnexto(mtmp); - } - } else { /* trapdoor or level_tele */ - do { - u.ux = rnd(COLNO-1); - u.uy = rn2(ROWNO); - } while(levl[u.ux][u.uy].typ != ROOM || - m_at(u.ux,u.uy)); - if(Punished){ - if(uwep != uball && !up /* %% */ && rn2(5)){ - pline("The iron ball falls on your head."); - losehp(rnd(25), "iron ball"); + placebc(1); } - placebc(1); - } - selftouch("Falling, you"); + selftouch("Falling, you"); } (void) inshop(); initrack(); losedogs(); - { register struct monst *mtmp; - if(mtmp = m_at(u.ux, u.uy)) mnexto(mtmp); /* riv05!a3 */ + { + struct monst *mtmp; + if ((mtmp = m_at(u.ux, u.uy)) != NULL) + mnexto(mtmp); /* riv05!a3 */ } flags.nscrinh = 0; setsee(); - seeobjs(); /* make old cadavers disappear - riv05!a3 */ + seeobjs(); /* make old cadavers disappear - riv05!a3 */ docrt(); pickup(1); - read_engr_at(u.ux,u.uy); + read_engr_at(u.ux, u.uy); } -donull() { - return(1); /* Do nothing, but let other things happen */ +int +donull() +{ + return (1); /* Do nothing, but let other things happen */ } -dopray() { +int +dopray() +{ nomovemsg = "You finished your prayer."; nomul(-3); - return(1); + return (1); } -struct monst *bhit(), *boomhit(); +int dothrow() { - register struct obj *obj; - register struct monst *mon; - register tmp; - - obj = getobj("#)", "throw"); /* it is also possible to throw food */ - /* (or jewels, or iron balls ... ) */ - if(!obj || !getdir(1)) /* ask "in what direction?" */ - return(0); - if(obj->owornmask & (W_ARMOR | W_RING)){ + struct obj *obj; + struct monst *mon; + int tmp; + + obj = getobj("#)", "throw"); /* it is also possible to throw food */ + /* (or jewels, or iron balls ... ) */ + if (!obj || !getdir(1)) /* ask "in what direction?" */ + return (0); + if (obj->owornmask & (W_ARMOR | W_RING)) { pline("You can't throw something you are wearing."); - return(0); + return (0); } - u_wipe_engr(2); - if(obj == uwep){ - if(obj->cursed){ + if (obj == uwep) { + if (obj->cursed) { pline("Your weapon is welded to your hand."); - return(1); + return (1); } - if(obj->quan > 1) + if (obj->quan > 1) setuwep(splitobj(obj, 1)); else setuwep((struct obj *) 0); - } - else if(obj->quan > 1) + } else if (obj->quan > 1) (void) splitobj(obj, 1); freeinv(obj); - if(u.uswallow) { + if (u.uswallow) { mon = u.ustuck; bhitpos.x = mon->mx; bhitpos.y = mon->my; - } else if(u.dz) { - if(u.dz < 0) { - pline("%s hits the ceiling, then falls back on top of your head.", - Doname(obj)); /* note: obj->quan == 1 */ - if(obj->olet == POTION_SYM) - potionhit(&youmonst, obj); - else { - if(uarmh) pline("Fortunately, you are wearing a helmet!"); - losehp(uarmh ? 1 : rnd((int)(obj->owt)), "falling object"); - dropy(obj); - } - } else { - pline("%s hits the floor.", Doname(obj)); - if(obj->otyp == EXPENSIVE_CAMERA) { - pline("It is shattered in a thousand pieces!"); - obfree(obj, Null(obj)); - } else if(obj->otyp == EGG) { - pline("\"Splash!\""); - obfree(obj, Null(obj)); - } else if(obj->olet == POTION_SYM) { - pline("The flask breaks, and you smell a peculiar odor ..."); - potionbreathe(obj); - obfree(obj, Null(obj)); - } else { - dropy(obj); - } - } - return(1); - } else if(obj->otyp == BOOMERANG) { + } else if (u.dz) { + if (u.dz < 0) { + pline("%s hits the ceiling, then falls back on top of your head.", + Doname(obj)); /* note: obj->quan == 1 */ + if (obj->olet == POTION_SYM) + potionhit(&youmonst, obj); + else { + if (uarmh) + pline("Fortunately, you are wearing a helmet!"); + losehp(uarmh ? 1 : rnd((int) (obj->owt)), "falling object"); + dropy(obj); + } + } else { + pline("%s hits the floor.", Doname(obj)); + if (obj->otyp == EXPENSIVE_CAMERA) { + pline("It is shattered in a thousand pieces!"); + obfree(obj, Null(obj)); + } else if (obj->otyp == EGG) { + pline("\"Splash!\""); + obfree(obj, Null(obj)); + } else if (obj->olet == POTION_SYM) { + pline("The flask breaks, and you smell a peculiar odor ..."); + potionbreathe(obj); + obfree(obj, Null(obj)); + } else { + dropy(obj); + } + } + return (1); + } else if (obj->otyp == BOOMERANG) { mon = boomhit(u.dx, u.dy); - if(mon == &youmonst) { /* the thing was caught */ + if (mon == &youmonst) { /* the thing was caught */ (void) addinv(obj); - return(1); + return (1); } } else { - if(obj->otyp == PICK_AXE && shkcatch(obj)) - return(1); + if (obj->otyp == PICK_AXE && shkcatch(obj)) + return (1); mon = bhit(u.dx, u.dy, (obj->otyp == ICE_BOX) ? 1 : (!Punished || obj != uball) ? 8 : !u.ustuck ? 5 : 1, - obj->olet, - (int (*)()) 0, (int (*)()) 0, obj); + obj->olet, + (void (*) __P((struct monst *, struct obj *))) 0, + (int (*) __P((struct obj *, struct obj *))) 0, obj); } - if(mon) { + if (mon) { /* awake monster if sleeping */ wakeup(mon); - if(obj->olet == WEAPON_SYM) { - tmp = -1+u.ulevel+mon->data->ac+abon(); - if(obj->otyp < ROCK) { - if(!uwep || - uwep->otyp != obj->otyp+(BOW-ARROW)) + if (obj->olet == WEAPON_SYM) { + tmp = -1 + u.ulevel + mon->data->ac + abon(); + if (obj->otyp < ROCK) { + if (!uwep || + uwep->otyp != obj->otyp + (BOW - ARROW)) tmp -= 4; else { tmp += uwep->spe; } - } else - if(obj->otyp == BOOMERANG) tmp += 4; + } else if (obj->otyp == BOOMERANG) + tmp += 4; tmp += obj->spe; - if(u.uswallow || tmp >= rnd(20)) { - if(hmon(mon,obj,1) == TRUE){ - /* mon still alive */ + if (u.uswallow || tmp >= rnd(20)) { + if (hmon(mon, obj, 1) == TRUE) { + /* mon still alive */ #ifndef NOWORM - cutworm(mon,bhitpos.x,bhitpos.y,obj->otyp); -#endif NOWORM - } else mon = 0; + cutworm(mon, bhitpos.x, bhitpos.y, obj->otyp); +#endif /* NOWORM */ + } else + mon = 0; /* weapons thrown disappear sometimes */ - if(obj->otyp < BOOMERANG && rn2(3)) { + if (obj->otyp < BOOMERANG && rn2(3)) { /* check bill; free */ obfree(obj, (struct obj *) 0); - return(1); + return (1); } - } else miss(objects[obj->otyp].oc_name, mon); - } else if(obj->otyp == HEAVY_IRON_BALL) { - tmp = -1+u.ulevel+mon->data->ac+abon(); - if(!Punished || obj != uball) tmp += 2; - if(u.utrap) tmp -= 2; - if(u.uswallow || tmp >= rnd(20)) { - if(hmon(mon,obj,1) == FALSE) + } else + miss(objects[obj->otyp].oc_name, mon); + } else if (obj->otyp == HEAVY_IRON_BALL) { + tmp = -1 + u.ulevel + mon->data->ac + abon(); + if (!Punished || obj != uball) + tmp += 2; + if (u.utrap) + tmp -= 2; + if (u.uswallow || tmp >= rnd(20)) { + if (hmon(mon, obj, 1) == FALSE) mon = 0; /* he died */ - } else miss("iron ball", mon); - } else if(obj->olet == POTION_SYM && u.ulevel > rn2(15)) { + } else + miss("iron ball", mon); + } else if (obj->olet == POTION_SYM && u.ulevel > rn2(15)) { potionhit(mon, obj); - return(1); + return (1); } else { - if(cansee(bhitpos.x,bhitpos.y)) - pline("You miss %s.",monnam(mon)); - else pline("You miss it."); - if(obj->olet == FOOD_SYM && mon->data->mlet == 'd') - if(tamedog(mon,obj)) return(1); - if(obj->olet == GEM_SYM && mon->data->mlet == 'u' && - !mon->mtame){ - if(obj->dknown && objects[obj->otyp].oc_name_known){ - if(objects[obj->otyp].g_val > 0){ - u.uluck += 5; - goto valuable; - } else { - pline("%s is not interested in your junk.", - Monnam(mon)); - } - } else { /* value unknown to @ */ - u.uluck++; + if (cansee(bhitpos.x, bhitpos.y)) + pline("You miss %s.", monnam(mon)); + else + pline("You miss it."); + if (obj->olet == FOOD_SYM && mon->data->mlet == 'd') + if (tamedog(mon, obj)) + return (1); + if (obj->olet == GEM_SYM && mon->data->mlet == 'u' && + !mon->mtame) { + if (obj->dknown && objects[obj->otyp].oc_name_known) { + if (objects[obj->otyp].g_val > 0) { + u.uluck += 5; + goto valuable; + } else { + pline("%s is not interested in your junk.", + Monnam(mon)); + } + } else { /* value unknown to @ */ + u.uluck++; valuable: - if(u.uluck > LUCKMAX) /* dan@ut-ngp */ - u.uluck = LUCKMAX; - pline("%s graciously accepts your gift.", - Monnam(mon)); - mpickobj(mon, obj); - rloc(mon); - return(1); - } + if (u.uluck > LUCKMAX) /* dan@ut-ngp */ + u.uluck = LUCKMAX; + pline("%s graciously accepts your gift.", + Monnam(mon)); + mpickobj(mon, obj); + rloc(mon); + return (1); + } } } } - /* the code following might become part of dropy() */ - if(obj->otyp == CRYSKNIFE) + /* the code following might become part of dropy() */ + if (obj->otyp == CRYSKNIFE) obj->otyp = WORM_TOOTH; obj->ox = bhitpos.x; obj->oy = bhitpos.y; @@ -411,21 +440,21 @@ dothrow() /* prevent him from throwing articles to the exit and escaping */ /* subfrombill(obj); */ stackobj(obj); - if(Punished && obj == uball && - (bhitpos.x != u.ux || bhitpos.y != u.uy)){ + if (Punished && obj == uball && + (bhitpos.x != u.ux || bhitpos.y != u.uy)) { freeobj(uchain); unpobj(uchain); - if(u.utrap){ - if(u.utraptype == TT_PIT) + if (u.utrap) { + if (u.utraptype == TT_PIT) pline("The ball pulls you out of the pit!"); else { - register long side = + long side = rn2(3) ? LEFT_SIDE : RIGHT_SIDE; - pline("The ball pulls you out of the bear trap."); - pline("Your %s leg is severely damaged.", - (side == LEFT_SIDE) ? "left" : "right"); - set_wounded_legs(side, 500+rn2(1000)); - losehp(2, "thrown ball"); + pline("The ball pulls you out of the bear trap."); + pline("Your %s leg is severely damaged.", + (side == LEFT_SIDE) ? "left" : "right"); + set_wounded_legs(side, 500 + rn2(1000)); + losehp(2, "thrown ball"); } u.utrap = 0; } @@ -437,15 +466,19 @@ dothrow() setsee(); (void) inshop(); } - if(cansee(bhitpos.x, bhitpos.y)) prl(bhitpos.x,bhitpos.y); - return(1); + if (cansee(bhitpos.x, bhitpos.y)) + prl(bhitpos.x, bhitpos.y); + return (1); } /* split obj so that it gets size num */ /* remainder is put in the object structure delivered by this call */ -struct obj * -splitobj(obj, num) register struct obj *obj; register int num; { -register struct obj *otmp; +struct obj * +splitobj(obj, num) + struct obj *obj; + int num; +{ + struct obj *otmp; otmp = newobj(0); *otmp = *obj; /* copies whole structure */ otmp->o_id = flags.ident++; @@ -455,36 +488,39 @@ register struct obj *otmp; otmp->quan -= num; otmp->owt = weight(otmp); /* -= obj->owt ? */ obj->nobj = otmp; - if(obj->unpaid) splitbill(obj,otmp); - return(otmp); + if (obj->unpaid) + splitbill(obj, otmp); + return (otmp); } -more_experienced(exp,rexp) -register int exp, rexp; +void +more_experienced(exp, rexp) + int exp, rexp; { - extern char pl_character[]; - u.uexp += exp; - u.urexp += 4*exp + rexp; - if(exp) flags.botl = 1; - if(u.urexp >= ((pl_character[0] == 'W') ? 1000 : 2000)) + u.urexp += 4 * exp + rexp; + if (exp) + flags.botl = 1; + if (u.urexp >= ((pl_character[0] == 'W') ? 1000 : 2000)) flags.beginner = 0; } +void set_wounded_legs(side, timex) -register long side; -register int timex; + long side; + int timex; { - if(!Wounded_legs || (Wounded_legs & TIMEOUT)) + if (!Wounded_legs || (Wounded_legs & TIMEOUT)) Wounded_legs |= side + timex; else Wounded_legs |= side; } +void heal_legs() { - if(Wounded_legs) { - if((Wounded_legs & BOTH_SIDES) == BOTH_SIDES) + if (Wounded_legs) { + if ((Wounded_legs & BOTH_SIDES) == BOTH_SIDES) pline("Your legs feel somewhat better."); else pline("Your leg feels somewhat better."); |