aboutsummaryrefslogtreecommitdiff
path: root/hack/hack.wield.c
diff options
context:
space:
mode:
authorB. Watson <yalhcru@gmail.com>2015-05-07 16:32:32 -0400
committerB. Watson <yalhcru@gmail.com>2015-05-07 16:32:32 -0400
commit013ac7742311556022304e8b30ca170d48b3a016 (patch)
tree53faa33e75991363f1a6dcc7edc83a66b70e6995 /hack/hack.wield.c
downloadbsd-games-extra-013ac7742311556022304e8b30ca170d48b3a016.tar.gz
initial commit
Diffstat (limited to 'hack/hack.wield.c')
-rw-r--r--hack/hack.wield.c111
1 files changed, 111 insertions, 0 deletions
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);
+}