summaryrefslogtreecommitdiffstats
path: root/hack/hack.wield.c
diff options
context:
space:
mode:
authorcgd <cgd@NetBSD.org>1993-03-21 09:45:37 +0000
committercgd <cgd@NetBSD.org>1993-03-21 09:45:37 +0000
commit77e3814f0c0e3dea4d0032e25666f77e6f83bfff (patch)
tree7eddfcbf3dd12089e71dc3fafb0a106c5c5766c7 /hack/hack.wield.c
parente81d63576b2e46ab90da7d75fa155ea57ee4d32e (diff)
downloadbsdgames-darwin-77e3814f0c0e3dea4d0032e25666f77e6f83bfff.tar.gz
bsdgames-darwin-77e3814f0c0e3dea4d0032e25666f77e6f83bfff.tar.zst
bsdgames-darwin-77e3814f0c0e3dea4d0032e25666f77e6f83bfff.zip
initial import of 386bsd-0.1 sources
Diffstat (limited to 'hack/hack.wield.c')
-rw-r--r--hack/hack.wield.c99
1 files changed, 99 insertions, 0 deletions
diff --git a/hack/hack.wield.c b/hack/hack.wield.c
new file mode 100644
index 00000000..d0609a1c
--- /dev/null
+++ b/hack/hack.wield.c
@@ -0,0 +1,99 @@
+/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
+/* hack.wield.c - version 1.0.3 */
+
+#include "hack.h"
+extern struct obj zeroobj;
+
+setuwep(obj) register struct obj *obj; {
+ setworn(obj, W_WEP);
+}
+
+dowield()
+{
+ register struct obj *wep;
+ register int res = 0;
+
+ multi = 0;
+ if(!(wep = getobj("#-)", "wield"))) /* nothing */;
+ else if(uwep == wep)
+ pline("You are already wielding that!");
+ else if(uwep && uwep->cursed)
+ pline("The %s welded to your hand!",
+ aobjnam(uwep, "are"));
+ else if(wep == &zeroobj) {
+ if(uwep == 0){
+ pline("You are already empty handed.");
+ } else {
+ setuwep((struct obj *) 0);
+ res++;
+ pline("You are empty handed.");
+ }
+ } else if(uarms && wep->otyp == TWO_HANDED_SWORD)
+ pline("You cannot wield a two-handed sword and wear a shield.");
+ else if(wep->owornmask & (W_ARMOR | W_RING))
+ pline("You cannot wield that!");
+ else {
+ setuwep(wep);
+ res++;
+ if(uwep->cursed)
+ pline("The %s %s to your hand!",
+ aobjnam(uwep, "weld"),
+ (uwep->quan == 1) ? "itself" : "themselves"); /* a3 */
+ else prinv(uwep);
+ }
+ return(res);
+}
+
+corrode_weapon(){
+ if(!uwep || uwep->olet != WEAPON_SYM) return; /* %% */
+ if(uwep->rustfree)
+ pline("Your %s not affected.", aobjnam(uwep, "are"));
+ else {
+ pline("Your %s!", aobjnam(uwep, "corrode"));
+ uwep->spe--;
+ }
+}
+
+chwepon(otmp,amount)
+register struct obj *otmp;
+register amount;
+{
+register char *color = (amount < 0) ? "black" : "green";
+register char *time;
+ if(!uwep || uwep->olet != WEAPON_SYM) {
+ strange_feeling(otmp,
+ (amount > 0) ? "Your hands twitch."
+ : "Your hands itch.");
+ return(0);
+ }
+
+ if(uwep->otyp == WORM_TOOTH && amount > 0) {
+ uwep->otyp = CRYSKNIFE;
+ pline("Your weapon seems sharper now.");
+ uwep->cursed = 0;
+ return(1);
+ }
+
+ if(uwep->otyp == CRYSKNIFE && amount < 0) {
+ uwep->otyp = WORM_TOOTH;
+ pline("Your weapon looks duller now.");
+ return(1);
+ }
+
+ /* there is a (soft) upper limit to uwep->spe */
+ if(amount > 0 && uwep->spe > 5 && rn2(3)) {
+ pline("Your %s violently green for a while and then evaporate%s.",
+ aobjnam(uwep, "glow"), plur(uwep->quan));
+ while(uwep) /* let all of them disappear */
+ /* note: uwep->quan = 1 is nogood if unpaid */
+ useup(uwep);
+ return(1);
+ }
+ if(!rn2(6)) amount *= 2;
+ time = (amount*amount == 1) ? "moment" : "while";
+ pline("Your %s %s for a %s.",
+ aobjnam(uwep, "glow"), color, time);
+ uwep->spe += amount;
+ if(amount > 0) uwep->cursed = 0;
+ return(1);
+}