(linenum→info "unix/slp.c:2238")

bsd-games/2.17/hack/hack.wield.c

    1: /*      $NetBSD: hack.wield.c,v 1.6 2003/04/02 18:36:41 jsm Exp $    */
    2: 
    3: /*
    4:  * Copyright (c) 1985, Stichting Centrum voor Wiskunde en Informatica,
    5:  * Amsterdam
    6:  * All rights reserved.
    7:  *
    8:  * Redistribution and use in source and binary forms, with or without
    9:  * modification, are permitted provided that the following conditions are
   10:  * met:
   11:  *
   12:  * - Redistributions of source code must retain the above copyright notice,
   13:  * this list of conditions and the following disclaimer.
   14:  *
   15:  * - Redistributions in binary form must reproduce the above copyright
   16:  * notice, this list of conditions and the following disclaimer in the
   17:  * documentation and/or other materials provided with the distribution.
   18:  *
   19:  * - Neither the name of the Stichting Centrum voor Wiskunde en
   20:  * Informatica, nor the names of its contributors may be used to endorse or
   21:  * promote products derived from this software without specific prior
   22:  * written permission.
   23:  *
   24:  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
   25:  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
   26:  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
   27:  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
   28:  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
   29:  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
   30:  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
   31:  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
   32:  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
   33:  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
   34:  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   35:  */
   36: 
   37: /*
   38:  * Copyright (c) 1982 Jay Fenlason <hack@gnu.org>
   39:  * All rights reserved.
   40:  *
   41:  * Redistribution and use in source and binary forms, with or without
   42:  * modification, are permitted provided that the following conditions
   43:  * are met:
   44:  * 1. Redistributions of source code must retain the above copyright
   45:  *    notice, this list of conditions and the following disclaimer.
   46:  * 2. Redistributions in binary form must reproduce the above copyright
   47:  *    notice, this list of conditions and the following disclaimer in the
   48:  *    documentation and/or other materials provided with the distribution.
   49:  * 3. The name of the author may not be used to endorse or promote products
   50:  *    derived from this software without specific prior written permission.
   51:  *
   52:  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
   53:  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
   54:  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
   55:  * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
   56:  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
   57:  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
   58:  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
   59:  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
   60:  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
   61:  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   62:  */
   63: 
   64: #include <sys/cdefs.h>
   65: #ifndef lint
   66: __RCSID("$NetBSD: hack.wield.c,v 1.6 2003/04/02 18:36:41 jsm Exp $");
   67: #endif                          /* not lint */
   68: 
   69: #include "hack.h"
   70: #include "extern.h"
   71: 
   72: void
   73: setuwep(obj)
   74:         struct obj     *obj;
   75: {
   76:         setworn(obj, W_WEP);
   77: }
   78: 
   79: int
   80: dowield()
   81: {
   82:         struct obj     *wep;
   83:         int             res = 0;
   84: 
   85:         multi = 0;
   86:         if (!(wep = getobj("#-)", "wield")))   /* nothing */
   87:                 ;
   88:         else if (uwep == wep)
   89:                 pline("You are already wielding that!");
   90:         else if (uwep && uwep->cursed)
   91:                 pline("The %s welded to your hand!",
   92:                       aobjnam(uwep, "are"));
   93:         else if (wep == &zeroobj) {
   94:                 if (uwep == 0) {
   95:                         pline("You are already empty handed.");
   96:                 } else {
   97:                         setuwep((struct obj *) 0);
   98:                         res++;
   99:                         pline("You are empty handed.");
  100:                 }
  101:         } else if (uarms && wep->otyp == TWO_HANDED_SWORD)
  102:                 pline("You cannot wield a two-handed sword and wear a shield.");
  103:         else if (wep->owornmask & (W_ARMOR | W_RING))
  104:                 pline("You cannot wield that!");
  105:         else {
  106:                 setuwep(wep);
  107:                 res++;
  108:                 if (uwep->cursed)
  109:                         pline("The %s %s to your hand!",
  110:                               aobjnam(uwep, "weld"),
  111:                               (uwep->quan == 1) ? "itself" : "themselves");  /* a3 */
  112:                 else
  113:                         prinv(uwep);
  114:         }
  115:         return (res);
  116: }
  117: 
  118: void
  119: corrode_weapon()
  120: {
  121:         if (!uwep || uwep->olet != WEAPON_SYM)
  122:                 return;               /* %% */
  123:         if (uwep->rustfree)
  124:                 pline("Your %s not affected.", aobjnam(uwep, "are"));
  125:         else {
  126:                 pline("Your %s!", aobjnam(uwep, "corrode"));
  127:                 uwep->spe--;
  128:         }
  129: }
  130: 
  131: int
  132: chwepon(otmp, amount)
  133:         struct obj     *otmp;
  134:         int amount;
  135: {
  136:         const char *color = (amount < 0) ? "black" : "green";
  137:         const char *time;
  138:         if (!uwep || uwep->olet != WEAPON_SYM) {
  139:                 strange_feeling(otmp,
  140:                                 (amount > 0) ? "Your hands twitch."
  141:                                 : "Your hands itch.");
  142:                 return (0);
  143:         }
  144:         if (uwep->otyp == WORM_TOOTH && amount > 0) {
  145:                 uwep->otyp = CRYSKNIFE;
  146:                 pline("Your weapon seems sharper now.");
  147:                 uwep->cursed = 0;
  148:                 return (1);
  149:         }
  150:         if (uwep->otyp == CRYSKNIFE && amount < 0) {
  151:                 uwep->otyp = WORM_TOOTH;
  152:                 pline("Your weapon looks duller now.");
  153:                 return (1);
  154:         }
  155:         /* there is a (soft) upper limit to uwep->spe */
  156:         if (amount > 0 && uwep->spe > 5 && rn2(3)) {
  157:                 pline("Your %s violently green for a while and then evaporate%s.",
  158:                       aobjnam(uwep, "glow"), plur(uwep->quan));
  159:                 while (uwep)  /* let all of them disappear */
  160:                         /* note: uwep->quan = 1 is nogood if unpaid */
  161:                         useup(uwep);
  162:                 return (1);
  163:         }
  164:         if (!rn2(6))
  165:                 amount *= 2;
  166:         time = (amount * amount == 1) ? "moment" : "while";
  167:         pline("Your %s %s for a %s.",
  168:               aobjnam(uwep, "glow"), color, time);
  169:         uwep->spe += amount;
  170:         if (amount > 0)
  171:                 uwep->cursed = 0;
  172:         return (1);
  173: }
Syntax (Markdown)