groundwork: u.twoweap manipulation
Toggle u.twoweap on or off in just one place.
This commit is contained in:
@@ -2989,6 +2989,7 @@ E int NDECL(dotwoweapon);
|
|||||||
E void NDECL(uwepgone);
|
E void NDECL(uwepgone);
|
||||||
E void NDECL(uswapwepgone);
|
E void NDECL(uswapwepgone);
|
||||||
E void NDECL(uqwepgone);
|
E void NDECL(uqwepgone);
|
||||||
|
E void FDECL(set_twoweap, (BOOLEAN_P));
|
||||||
E void NDECL(untwoweapon);
|
E void NDECL(untwoweapon);
|
||||||
E int FDECL(chwepon, (struct obj *, int));
|
E int FDECL(chwepon, (struct obj *, int));
|
||||||
E int FDECL(welded, (struct obj *));
|
E int FDECL(welded, (struct obj *));
|
||||||
|
|||||||
+6
-1
@@ -231,7 +231,12 @@ int x, y;
|
|||||||
{
|
{
|
||||||
struct obj *otmp;
|
struct obj *otmp;
|
||||||
|
|
||||||
u.twoweap = 0; /* ensure curse() won't cause swapwep to drop twice */
|
/* when dual-wielding, the second weapon gets dropped rather than welded if
|
||||||
|
it becomes cursed; ensure that that won't happen here by ending dual-wield */
|
||||||
|
u.twoweap = FALSE; /* bypass set_twoweap() */
|
||||||
|
|
||||||
|
/* all inventory is dropped (for the normal case), even non-droppable things
|
||||||
|
like worn armor and accessories, welded weapon, or cursed loadstones */
|
||||||
while ((otmp = g.invent) != 0) {
|
while ((otmp = g.invent) != 0) {
|
||||||
obj_extract_self(otmp);
|
obj_extract_self(otmp);
|
||||||
/* when turning into green slime, all gear remains held;
|
/* when turning into green slime, all gear remains held;
|
||||||
|
|||||||
+2
-2
@@ -2467,12 +2467,12 @@ do_takeoff()
|
|||||||
if (!cursed(uwep)) {
|
if (!cursed(uwep)) {
|
||||||
setuwep((struct obj *) 0);
|
setuwep((struct obj *) 0);
|
||||||
You("are empty %s.", body_part(HANDED));
|
You("are empty %s.", body_part(HANDED));
|
||||||
u.twoweap = FALSE;
|
set_twoweap(FALSE); /* u.twoweap = FALSE [ought to be in setuwep()] */
|
||||||
}
|
}
|
||||||
} else if (doff->what == W_SWAPWEP) {
|
} else if (doff->what == W_SWAPWEP) {
|
||||||
setuswapwep((struct obj *) 0);
|
setuswapwep((struct obj *) 0);
|
||||||
You("no longer have a second weapon readied.");
|
You("no longer have a second weapon readied.");
|
||||||
u.twoweap = FALSE;
|
set_twoweap(FALSE); /* u.twoweap = FALSE; [ought to be in setuswapwep()] */
|
||||||
} else if (doff->what == W_QUIVER) {
|
} else if (doff->what == W_QUIVER) {
|
||||||
setuqwep((struct obj *) 0);
|
setuqwep((struct obj *) 0);
|
||||||
You("no longer have ammunition readied.");
|
You("no longer have ammunition readied.");
|
||||||
|
|||||||
+3
-3
@@ -1193,7 +1193,7 @@ struct obj *oldslot; /* for thrown-and-return used with !fixinv */
|
|||||||
if (obj->owornmask & W_QUIVER) /* in case addinv() autoquivered */
|
if (obj->owornmask & W_QUIVER) /* in case addinv() autoquivered */
|
||||||
setuqwep((struct obj *) 0);
|
setuqwep((struct obj *) 0);
|
||||||
setuwep(obj);
|
setuwep(obj);
|
||||||
u.twoweap = twoweap;
|
set_twoweap(twoweap); /* u.twoweap = twoweap */
|
||||||
} else if (u.dz < 0) {
|
} else if (u.dz < 0) {
|
||||||
(void) toss_up(obj, rn2(5) && !Underwater);
|
(void) toss_up(obj, rn2(5) && !Underwater);
|
||||||
} else if (u.dz > 0 && u.usteed && obj->oclass == POTION_CLASS
|
} else if (u.dz > 0 && u.usteed && obj->oclass == POTION_CLASS
|
||||||
@@ -1217,7 +1217,7 @@ struct obj *oldslot; /* for thrown-and-return used with !fixinv */
|
|||||||
(void) encumber_msg();
|
(void) encumber_msg();
|
||||||
if (wep_mask && !(obj->owornmask & wep_mask)) {
|
if (wep_mask && !(obj->owornmask & wep_mask)) {
|
||||||
setworn(obj, wep_mask);
|
setworn(obj, wep_mask);
|
||||||
u.twoweap = twoweap;
|
set_twoweap(twoweap); /* u.twoweap = twoweap */
|
||||||
}
|
}
|
||||||
clear_thrownobj = TRUE;
|
clear_thrownobj = TRUE;
|
||||||
goto throwit_return;
|
goto throwit_return;
|
||||||
@@ -1352,7 +1352,7 @@ struct obj *oldslot; /* for thrown-and-return used with !fixinv */
|
|||||||
if (obj->owornmask & W_QUIVER)
|
if (obj->owornmask & W_QUIVER)
|
||||||
setuqwep((struct obj *) 0);
|
setuqwep((struct obj *) 0);
|
||||||
setuwep(obj);
|
setuwep(obj);
|
||||||
u.twoweap = twoweap;
|
set_twoweap(twoweap); /* u.twoweap = twoweap */
|
||||||
if (cansee(g.bhitpos.x, g.bhitpos.y))
|
if (cansee(g.bhitpos.x, g.bhitpos.y))
|
||||||
newsym(g.bhitpos.x, g.bhitpos.y);
|
newsym(g.bhitpos.x, g.bhitpos.y);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
+4
-4
@@ -603,7 +603,7 @@ u_init()
|
|||||||
uarm = uarmc = uarmh = uarms = uarmg = uarmf = 0;
|
uarm = uarmc = uarmh = uarms = uarmg = uarmf = 0;
|
||||||
uwep = uball = uchain = uleft = uright = 0;
|
uwep = uball = uchain = uleft = uright = 0;
|
||||||
uswapwep = uquiver = 0;
|
uswapwep = uquiver = 0;
|
||||||
u.twoweap = 0;
|
u.twoweap = FALSE; /* bypass set_twoweap() */
|
||||||
u.ublessed = 0; /* not worthy yet */
|
u.ublessed = 0; /* not worthy yet */
|
||||||
u.ugangr = 0; /* gods not angry */
|
u.ugangr = 0; /* gods not angry */
|
||||||
u.ugifts = 0; /* no divine gifts bestowed */
|
u.ugifts = 0; /* no divine gifts bestowed */
|
||||||
@@ -1114,11 +1114,11 @@ register struct trobj *trop;
|
|||||||
if (obj->oclass == ARMOR_CLASS) {
|
if (obj->oclass == ARMOR_CLASS) {
|
||||||
if (is_shield(obj) && !uarms && !(uwep && bimanual(uwep))) {
|
if (is_shield(obj) && !uarms && !(uwep && bimanual(uwep))) {
|
||||||
setworn(obj, W_ARMS);
|
setworn(obj, W_ARMS);
|
||||||
/* Prior to 3.6.2 this used to unset uswapwep if it was set, but
|
/* Prior to 3.6.2 this used to unset uswapwep if it was set,
|
||||||
wearing a shield doesn't prevent having an alternate
|
but wearing a shield doesn't prevent having an alternate
|
||||||
weapon ready to swap with the primary; just make sure we
|
weapon ready to swap with the primary; just make sure we
|
||||||
aren't two-weaponing (academic; no one starts that way) */
|
aren't two-weaponing (academic; no one starts that way) */
|
||||||
u.twoweap = FALSE;
|
set_twoweap(FALSE); /* u.twoweap = FALSE */
|
||||||
} else if (is_helmet(obj) && !uarmh)
|
} else if (is_helmet(obj) && !uarmh)
|
||||||
setworn(obj, W_ARMH);
|
setworn(obj, W_ARMH);
|
||||||
else if (is_gloves(obj) && !uarmg)
|
else if (is_gloves(obj) && !uarmg)
|
||||||
|
|||||||
+1
-1
@@ -1149,7 +1149,7 @@ int dieroll;
|
|||||||
if (jousting < 0) {
|
if (jousting < 0) {
|
||||||
pline("%s shatters on impact!", Yname2(obj));
|
pline("%s shatters on impact!", Yname2(obj));
|
||||||
/* (must be either primary or secondary weapon to get here) */
|
/* (must be either primary or secondary weapon to get here) */
|
||||||
u.twoweap = FALSE; /* untwoweapon() is too verbose here */
|
set_twoweap(FALSE); /* u.twoweap = FALSE; untwoweapon() is too verbose */
|
||||||
if (obj == uwep)
|
if (obj == uwep)
|
||||||
uwepgone(); /* set g.unweapon */
|
uwepgone(); /* set g.unweapon */
|
||||||
/* minor side-effect: broken lance won't split puddings */
|
/* minor side-effect: broken lance won't split puddings */
|
||||||
|
|||||||
+10
-3
@@ -719,13 +719,20 @@ drop_uswapwep()
|
|||||||
dropx(obj);
|
dropx(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
set_twoweap(on_off)
|
||||||
|
boolean on_off;
|
||||||
|
{
|
||||||
|
u.twoweap = on_off;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
dotwoweapon()
|
dotwoweapon()
|
||||||
{
|
{
|
||||||
/* You can always toggle it off */
|
/* You can always toggle it off */
|
||||||
if (u.twoweap) {
|
if (u.twoweap) {
|
||||||
You("switch to your primary weapon.");
|
You("switch to your primary weapon.");
|
||||||
u.twoweap = 0;
|
set_twoweap(FALSE); /* u.twoweap = FALSE */
|
||||||
update_inventory();
|
update_inventory();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -734,7 +741,7 @@ dotwoweapon()
|
|||||||
if (can_twoweapon()) {
|
if (can_twoweapon()) {
|
||||||
/* Success! */
|
/* Success! */
|
||||||
You("begin two-weapon combat.");
|
You("begin two-weapon combat.");
|
||||||
u.twoweap = 1;
|
set_twoweap(TRUE); /* u.twoweap = TRUE */
|
||||||
update_inventory();
|
update_inventory();
|
||||||
return (rnd(20) > ACURR(A_DEX));
|
return (rnd(20) > ACURR(A_DEX));
|
||||||
}
|
}
|
||||||
@@ -785,7 +792,7 @@ untwoweapon()
|
|||||||
{
|
{
|
||||||
if (u.twoweap) {
|
if (u.twoweap) {
|
||||||
You("can no longer use two weapons at once.");
|
You("can no longer use two weapons at once.");
|
||||||
u.twoweap = FALSE;
|
set_twoweap(FALSE); /* u.twoweap = FALSE */
|
||||||
update_inventory();
|
update_inventory();
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|||||||
+3
-3
@@ -66,7 +66,7 @@ long mask;
|
|||||||
impossible("Setworn: mask = %ld.", wp->w_mask);
|
impossible("Setworn: mask = %ld.", wp->w_mask);
|
||||||
if (oobj) {
|
if (oobj) {
|
||||||
if (u.twoweap && (oobj->owornmask & (W_WEP | W_SWAPWEP)))
|
if (u.twoweap && (oobj->owornmask & (W_WEP | W_SWAPWEP)))
|
||||||
u.twoweap = 0;
|
set_twoweap(FALSE); /* u.twoweap = FALSE */
|
||||||
oobj->owornmask &= ~wp->w_mask;
|
oobj->owornmask &= ~wp->w_mask;
|
||||||
if (wp->w_mask & ~(W_SWAPWEP | W_QUIVER)) {
|
if (wp->w_mask & ~(W_SWAPWEP | W_QUIVER)) {
|
||||||
/* leave as "x = x <op> y", here and below, for broken
|
/* leave as "x = x <op> y", here and below, for broken
|
||||||
@@ -120,8 +120,8 @@ register struct obj *obj;
|
|||||||
|
|
||||||
if (!obj)
|
if (!obj)
|
||||||
return;
|
return;
|
||||||
if (obj == uwep || obj == uswapwep)
|
if (u.twoweap && (obj == uwep || obj == uswapwep))
|
||||||
u.twoweap = 0;
|
set_twoweap(FALSE); /* u.twoweap = FALSE */
|
||||||
for (wp = worn; wp->w_mask; wp++)
|
for (wp = worn; wp->w_mask; wp++)
|
||||||
if (obj == *(wp->w_obj)) {
|
if (obj == *(wp->w_obj)) {
|
||||||
/* in case wearing or removal is in progress or removal
|
/* in case wearing or removal is in progress or removal
|
||||||
|
|||||||
@@ -1629,12 +1629,12 @@ int id;
|
|||||||
if (was_twohanded || !bimanual(otmp) || !uarms)
|
if (was_twohanded || !bimanual(otmp) || !uarms)
|
||||||
setuwep(otmp);
|
setuwep(otmp);
|
||||||
if (was_twoweap && uwep && !bimanual(uwep))
|
if (was_twoweap && uwep && !bimanual(uwep))
|
||||||
u.twoweap = TRUE;
|
set_twoweap(TRUE); /* u.twoweap = TRUE */
|
||||||
} else if ((new_wornmask & W_SWAPWEP) != 0L) {
|
} else if ((new_wornmask & W_SWAPWEP) != 0L) {
|
||||||
if (was_twohanded || !bimanual(otmp))
|
if (was_twohanded || !bimanual(otmp))
|
||||||
setuswapwep(otmp);
|
setuswapwep(otmp);
|
||||||
if (was_twoweap && uswapwep)
|
if (was_twoweap && uswapwep)
|
||||||
u.twoweap = TRUE;
|
set_twoweap(TRUE); /* u.twoweap = TRUE */
|
||||||
} else if ((new_wornmask & W_QUIVER) != 0L) {
|
} else if ((new_wornmask & W_QUIVER) != 0L) {
|
||||||
setuqwep(otmp);
|
setuqwep(otmp);
|
||||||
} else if (new_wornmask) {
|
} else if (new_wornmask) {
|
||||||
|
|||||||
Reference in New Issue
Block a user