386BSD 0.1 development
[unix-history] / usr / othersrc / games / hack / hack.wield.c
CommitLineData
7c496796
WJ
1/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
2/* hack.wield.c - version 1.0.3 */
3
4#include "hack.h"
5extern struct obj zeroobj;
6
7setuwep(obj) register struct obj *obj; {
8 setworn(obj, W_WEP);
9}
10
11dowield()
12{
13 register struct obj *wep;
14 register int res = 0;
15
16 multi = 0;
17 if(!(wep = getobj("#-)", "wield"))) /* nothing */;
18 else if(uwep == wep)
19 pline("You are already wielding that!");
20 else if(uwep && uwep->cursed)
21 pline("The %s welded to your hand!",
22 aobjnam(uwep, "are"));
23 else if(wep == &zeroobj) {
24 if(uwep == 0){
25 pline("You are already empty handed.");
26 } else {
27 setuwep((struct obj *) 0);
28 res++;
29 pline("You are empty handed.");
30 }
31 } else if(uarms && wep->otyp == TWO_HANDED_SWORD)
32 pline("You cannot wield a two-handed sword and wear a shield.");
33 else if(wep->owornmask & (W_ARMOR | W_RING))
34 pline("You cannot wield that!");
35 else {
36 setuwep(wep);
37 res++;
38 if(uwep->cursed)
39 pline("The %s %s to your hand!",
40 aobjnam(uwep, "weld"),
41 (uwep->quan == 1) ? "itself" : "themselves"); /* a3 */
42 else prinv(uwep);
43 }
44 return(res);
45}
46
47corrode_weapon(){
48 if(!uwep || uwep->olet != WEAPON_SYM) return; /* %% */
49 if(uwep->rustfree)
50 pline("Your %s not affected.", aobjnam(uwep, "are"));
51 else {
52 pline("Your %s!", aobjnam(uwep, "corrode"));
53 uwep->spe--;
54 }
55}
56
57chwepon(otmp,amount)
58register struct obj *otmp;
59register amount;
60{
61register char *color = (amount < 0) ? "black" : "green";
62register char *time;
63 if(!uwep || uwep->olet != WEAPON_SYM) {
64 strange_feeling(otmp,
65 (amount > 0) ? "Your hands twitch."
66 : "Your hands itch.");
67 return(0);
68 }
69
70 if(uwep->otyp == WORM_TOOTH && amount > 0) {
71 uwep->otyp = CRYSKNIFE;
72 pline("Your weapon seems sharper now.");
73 uwep->cursed = 0;
74 return(1);
75 }
76
77 if(uwep->otyp == CRYSKNIFE && amount < 0) {
78 uwep->otyp = WORM_TOOTH;
79 pline("Your weapon looks duller now.");
80 return(1);
81 }
82
83 /* there is a (soft) upper limit to uwep->spe */
84 if(amount > 0 && uwep->spe > 5 && rn2(3)) {
85 pline("Your %s violently green for a while and then evaporate%s.",
86 aobjnam(uwep, "glow"), plur(uwep->quan));
87 while(uwep) /* let all of them disappear */
88 /* note: uwep->quan = 1 is nogood if unpaid */
89 useup(uwep);
90 return(1);
91 }
92 if(!rn2(6)) amount *= 2;
93 time = (amount*amount == 1) ? "moment" : "while";
94 pline("Your %s %s for a %s.",
95 aobjnam(uwep, "glow"), color, time);
96 uwep->spe += amount;
97 if(amount > 0) uwep->cursed = 0;
98 return(1);
99}