From 013ac7742311556022304e8b30ca170d48b3a016 Mon Sep 17 00:00:00 2001 From: "B. Watson" Date: Thu, 7 May 2015 16:32:32 -0400 Subject: initial commit --- hack/hack.wield.c | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 hack/hack.wield.c (limited to 'hack/hack.wield.c') diff --git a/hack/hack.wield.c b/hack/hack.wield.c new file mode 100644 index 0000000..1cf5ea7 --- /dev/null +++ b/hack/hack.wield.c @@ -0,0 +1,111 @@ +/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ +/* hack.wield.c - version 1.0.3 */ +/* $FreeBSD: src/games/hack/hack.wield.c,v 1.4 1999/11/16 10:26:38 marcel Exp $ */ +/* $DragonFly: src/games/hack/hack.wield.c,v 1.4 2006/08/21 19:45:32 pavalos Exp $ */ + +#include "hack.h" +extern struct obj zeroobj; + +void +setuwep(struct obj *obj) +{ + setworn(obj, W_WEP); +} + +int +dowield(void) +{ + struct obj *wep; + 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(NULL); + 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); +} + +void +corrode_weapon(void) +{ + 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--; + } +} + +bool +chwepon(struct obj *otmp, int amount) +{ + const char *color = (amount < 0) ? "black" : "green"; + const char *ltime; + + 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; + ltime = (amount * amount == 1) ? "moment" : "while"; + pline("Your %s %s for a %s.", + aobjnam(uwep, "glow"), color, ltime); + uwep->spe += amount; + if (amount > 0) + uwep->cursed = 0; + return (1); +} -- cgit v1.2.3