diff options
author | 1997-10-19 16:56:41 +0000 | |
---|---|---|
committer | 1997-10-19 16:56:41 +0000 | |
commit | 84e7d0704483ce39bbdeacd5e676168db6fa664f (patch) | |
tree | f9ffeffa1a4342e749494bc3f5618552435839af /hack/hack.wizard.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.wizard.c')
-rw-r--r-- | hack/hack.wizard.c | 296 |
1 files changed, 162 insertions, 134 deletions
diff --git a/hack/hack.wizard.c b/hack/hack.wizard.c index 984c8b63..e26e480d 100644 --- a/hack/hack.wizard.c +++ b/hack/hack.wizard.c @@ -1,194 +1,222 @@ +/* $NetBSD: hack.wizard.c,v 1.4 1997/10/19 16:59:28 christos Exp $ */ + /* * Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ +#include <sys/cdefs.h> #ifndef lint -static char rcsid[] = "$NetBSD: hack.wizard.c,v 1.3 1995/03/23 08:32:09 cgd Exp $"; -#endif /* not lint */ +__RCSID("$NetBSD: hack.wizard.c,v 1.4 1997/10/19 16:59:28 christos Exp $"); +#endif /* not lint */ /* wizard code - inspired by rogue code from Merlyn Leroy (digi-g!brian) */ #include "hack.h" -extern struct permonst pm_wizard; -extern struct monst *makemon(); +#include "extern.h" -#define WIZSHOT 6 /* one chance in WIZSHOT that wizard will try magic */ -#define BOLT_LIM 8 /* from this distance D and 1 will try to hit you */ +#define WIZSHOT 6 /* one chance in WIZSHOT that wizard will try + * magic */ +#define BOLT_LIM 8 /* from this distance D and 1 will try to hit + * you */ -char wizapp[] = "@DNPTUVXcemntx"; +char wizapp[] = "@DNPTUVXcemntx"; /* If he has found the Amulet, make the wizard appear after some time */ -amulet(){ - register struct obj *otmp; - register struct monst *mtmp; +void +amulet() +{ + struct obj *otmp; + struct monst *mtmp; - if(!flags.made_amulet || !flags.no_of_wizards) + if (!flags.made_amulet || !flags.no_of_wizards) return; /* find wizard, and wake him if necessary */ - for(mtmp = fmon; mtmp; mtmp = mtmp->nmon) - if(mtmp->data->mlet == '1' && mtmp->msleep && !rn2(40)) - for(otmp = invent; otmp; otmp = otmp->nobj) - if(otmp->olet == AMULET_SYM && !otmp->spe) { - mtmp->msleep = 0; - if(dist(mtmp->mx,mtmp->my) > 2) - pline( - "You get the creepy feeling that somebody noticed your taking the Amulet." - ); - return; - } + for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) + if (mtmp->data->mlet == '1' && mtmp->msleep && !rn2(40)) + for (otmp = invent; otmp; otmp = otmp->nobj) + if (otmp->olet == AMULET_SYM && !otmp->spe) { + mtmp->msleep = 0; + if (dist(mtmp->mx, mtmp->my) > 2) + pline( + "You get the creepy feeling that somebody noticed your taking the Amulet." + ); + return; + } } +int wiz_hit(mtmp) -register struct monst *mtmp; + struct monst *mtmp; { /* if we have stolen or found the amulet, we disappear */ - if(mtmp->minvent && mtmp->minvent->olet == AMULET_SYM && + if (mtmp->minvent && mtmp->minvent->olet == AMULET_SYM && mtmp->minvent->spe == 0) { /* vanish -- very primitive */ fall_down(mtmp); - return(1); + return (1); } - /* if it is lying around someplace, we teleport to it */ - if(!carrying(AMULET_OF_YENDOR)) { - register struct obj *otmp; - - for(otmp = fobj; otmp; otmp = otmp->nobj) - if(otmp->olet == AMULET_SYM && !otmp->spe) { - if((u.ux != otmp->ox || u.uy != otmp->oy) && - !m_at(otmp->ox, otmp->oy)) { - - /* teleport to it and pick it up */ - mtmp->mx = otmp->ox; - mtmp->my = otmp->oy; - freeobj(otmp); - mpickobj(mtmp, otmp); - pmon(mtmp); - return(0); - } - goto hithim; - } - return(0); /* we don't know where it is */ + if (!carrying(AMULET_OF_YENDOR)) { + struct obj *otmp; + + for (otmp = fobj; otmp; otmp = otmp->nobj) + if (otmp->olet == AMULET_SYM && !otmp->spe) { + if ((u.ux != otmp->ox || u.uy != otmp->oy) && + !m_at(otmp->ox, otmp->oy)) { + + /* teleport to it and pick it up */ + mtmp->mx = otmp->ox; + mtmp->my = otmp->oy; + freeobj(otmp); + mpickobj(mtmp, otmp); + pmon(mtmp); + return (0); + } + goto hithim; + } + return (0); /* we don't know where it is */ } hithim: - if(rn2(2)) { /* hit - perhaps steal */ - - /* if hit 1/20 chance of stealing amulet & vanish - - amulet is on level 26 again. */ - if(hitu(mtmp, d(mtmp->data->damn,mtmp->data->damd)) - && !rn2(20) && stealamulet(mtmp)) - ; - } - else - inrange(mtmp); /* try magic */ - return(0); + if (rn2(2)) { /* hit - perhaps steal */ + + /* + * if hit 1/20 chance of stealing amulet & vanish - amulet is + * on level 26 again. + */ + if (hitu(mtmp, d(mtmp->data->damn, mtmp->data->damd)) + && !rn2(20) && stealamulet(mtmp)); + } else + inrange(mtmp); /* try magic */ + return (0); } +void inrange(mtmp) -register struct monst *mtmp; + struct monst *mtmp; { - register schar tx,ty; + schar tx, ty; /* do nothing if cancelled (but make '1' say something) */ - if(mtmp->data->mlet != '1' && mtmp->mcan) + if (mtmp->data->mlet != '1' && mtmp->mcan) return; /* spit fire only when both in a room or both in a corridor */ - if(inroom(u.ux,u.uy) != inroom(mtmp->mx,mtmp->my)) return; + if (inroom(u.ux, u.uy) != inroom(mtmp->mx, mtmp->my)) + return; tx = u.ux - mtmp->mx; ty = u.uy - mtmp->my; - if((!tx && abs(ty) < BOLT_LIM) || (!ty && abs(tx) < BOLT_LIM) - || (abs(tx) == abs(ty) && abs(tx) < BOLT_LIM)){ - switch(mtmp->data->mlet) { - case 'D': - /* spit fire in the direction of @ (not nec. hitting) */ - buzz(-1,mtmp->mx,mtmp->my,sgn(tx),sgn(ty)); - break; - case '1': - if(rn2(WIZSHOT)) break; - /* if you zapped wizard with wand of cancellation, - he has to shake off the effects before he can throw - spells successfully. 1/2 the time they fail anyway */ - if(mtmp->mcan || rn2(2)) { - if(canseemon(mtmp)) - pline("%s makes a gesture, then curses.", - Monnam(mtmp)); - else - pline("You hear mumbled cursing."); - if(!rn2(3)) { - mtmp->mspeed = 0; - mtmp->minvis = 0; - } - if(!rn2(3)) - mtmp->mcan = 0; - } else { - if(canseemon(mtmp)){ - if(!rn2(6) && !Invis) { - pline("%s hypnotizes you.", Monnam(mtmp)); - nomul(rn2(3) + 3); - break; - } else - pline("%s chants an incantation.", - Monnam(mtmp)); - } else - pline("You hear a mumbled incantation."); - switch(rn2(Invis ? 5 : 6)) { - case 0: - /* create a nasty monster from a deep level */ - /* (for the moment, 'nasty' is not implemented) */ - (void) makemon((struct permonst *)0, u.ux, u.uy); - break; - case 1: - pline("\"Destroy the thief, my pets!\""); - aggravate(); /* aggravate all the monsters */ - /* fall into next case */ - case 2: - if (flags.no_of_wizards == 1 && rnd(5) == 0) - /* if only 1 wizard, clone himself */ - clonewiz(mtmp); - break; - case 3: - if(mtmp->mspeed == MSLOW) - mtmp->mspeed = 0; - else - mtmp->mspeed = MFAST; - break; - case 4: - mtmp->minvis = 1; - break; - case 5: - /* Only if not Invisible */ - pline("You hear a clap of thunder!"); - /* shoot a bolt of fire or cold, or a sleep ray */ - buzz(-rnd(3),mtmp->mx,mtmp->my,sgn(tx),sgn(ty)); + if ((!tx && abs(ty) < BOLT_LIM) || (!ty && abs(tx) < BOLT_LIM) + || (abs(tx) == abs(ty) && abs(tx) < BOLT_LIM)) { + switch (mtmp->data->mlet) { + case 'D': + /* spit fire in the direction of @ (not nec. hitting) */ + buzz(-1, mtmp->mx, mtmp->my, sgn(tx), sgn(ty)); break; - } + case '1': + if (rn2(WIZSHOT)) + break; + /* + * if you zapped wizard with wand of cancellation, he + * has to shake off the effects before he can throw + * spells successfully. 1/2 the time they fail + * anyway + */ + if (mtmp->mcan || rn2(2)) { + if (canseemon(mtmp)) + pline("%s makes a gesture, then curses.", + Monnam(mtmp)); + else + pline("You hear mumbled cursing."); + if (!rn2(3)) { + mtmp->mspeed = 0; + mtmp->minvis = 0; + } + if (!rn2(3)) + mtmp->mcan = 0; + } else { + if (canseemon(mtmp)) { + if (!rn2(6) && !Invis) { + pline("%s hypnotizes you.", Monnam(mtmp)); + nomul(rn2(3) + 3); + break; + } else + pline("%s chants an incantation.", + Monnam(mtmp)); + } else + pline("You hear a mumbled incantation."); + switch (rn2(Invis ? 5 : 6)) { + case 0: + /* + * create a nasty monster from a deep + * level + */ + /* + * (for the moment, 'nasty' is not + * implemented) + */ + (void) makemon((struct permonst *) 0, u.ux, u.uy); + break; + case 1: + pline("\"Destroy the thief, my pets!\""); + aggravate(); /* aggravate all the + * monsters */ + /* fall into next case */ + case 2: + if (flags.no_of_wizards == 1 && rnd(5) == 0) + /* + * if only 1 wizard, clone + * himself + */ + clonewiz(mtmp); + break; + case 3: + if (mtmp->mspeed == MSLOW) + mtmp->mspeed = 0; + else + mtmp->mspeed = MFAST; + break; + case 4: + mtmp->minvis = 1; + break; + case 5: + /* Only if not Invisible */ + pline("You hear a clap of thunder!"); + /* + * shoot a bolt of fire or cold, or a + * sleep ray + */ + buzz(-rnd(3), mtmp->mx, mtmp->my, sgn(tx), sgn(ty)); + break; + } + } } - } - if(u.uhp < 1) done_in_by(mtmp); + if (u.uhp < 1) + done_in_by(mtmp); } } +void aggravate() { - register struct monst *mtmp; + struct monst *mtmp; - for(mtmp = fmon; mtmp; mtmp = mtmp->nmon) { + for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) { mtmp->msleep = 0; - if(mtmp->mfroz && !rn2(5)) + if (mtmp->mfroz && !rn2(5)) mtmp->mfroz = 0; } } +void clonewiz(mtmp) -register struct monst *mtmp; + struct monst *mtmp; { - register struct monst *mtmp2; + struct monst *mtmp2; - if(mtmp2 = makemon(PM_WIZARD, mtmp->mx, mtmp->my)) { + if ((mtmp2 = makemon(PM_WIZARD, mtmp->mx, mtmp->my)) != NULL) { flags.no_of_wizards = 2; unpmon(mtmp2); - mtmp2->mappearance = wizapp[rn2(sizeof(wizapp)-1)]; + mtmp2->mappearance = wizapp[rn2(sizeof(wizapp) - 1)]; pmon(mtmp); } } |