Unblind telepathy range
Unblind telepathy range depends on the number of telepathy granting items worn. Breaks saves.
This commit is contained in:
@@ -1392,6 +1392,7 @@ Sunsword can be invoked to create a blinding ray
|
|||||||
Excalibur is much harder to get if hero is not a knight
|
Excalibur is much harder to get if hero is not a knight
|
||||||
pets considered any noise made by hero made as whistling
|
pets considered any noise made by hero made as whistling
|
||||||
silent monsters in stinking clouds don't cough
|
silent monsters in stinking clouds don't cough
|
||||||
|
unblind telepathy range depends on number of telepathy granting items worn
|
||||||
|
|
||||||
|
|
||||||
Fixes to 3.7.0-x General Problems Exposed Via git Repository
|
Fixes to 3.7.0-x General Problems Exposed Via git Repository
|
||||||
|
|||||||
+1
-1
@@ -47,7 +47,7 @@
|
|||||||
/* OR 2b. hero is using a telepathy inducing */ \
|
/* OR 2b. hero is using a telepathy inducing */ \
|
||||||
/* object and in range */ \
|
/* object and in range */ \
|
||||||
|| (Unblind_telepat \
|
|| (Unblind_telepat \
|
||||||
&& (mdistu(mon) <= (BOLT_LIM * BOLT_LIM)))))
|
&& (mdistu(mon) <= u.unblind_telepat_range))))
|
||||||
|
|
||||||
/* organized to perform cheaper tests first;
|
/* organized to perform cheaper tests first;
|
||||||
is_pool() vs is_pool_or_lava(): hero who is underwater can see adjacent
|
is_pool() vs is_pool_or_lava(): hero who is underwater can see adjacent
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
* Incrementing EDITLEVEL can be used to force invalidation of old bones
|
* Incrementing EDITLEVEL can be used to force invalidation of old bones
|
||||||
* and save files.
|
* and save files.
|
||||||
*/
|
*/
|
||||||
#define EDITLEVEL 101
|
#define EDITLEVEL 102
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Development status possibilities.
|
* Development status possibilities.
|
||||||
|
|||||||
@@ -389,6 +389,7 @@ struct you {
|
|||||||
/* These ranges can never be more than MAX_RANGE (vision.h). */
|
/* These ranges can never be more than MAX_RANGE (vision.h). */
|
||||||
int nv_range; /* current night vision range */
|
int nv_range; /* current night vision range */
|
||||||
int xray_range; /* current xray vision range */
|
int xray_range; /* current xray vision range */
|
||||||
|
int unblind_telepat_range;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* These variables are valid globally only when punished and blind.
|
* These variables are valid globally only when punished and blind.
|
||||||
|
|||||||
@@ -928,6 +928,8 @@ u_init(void)
|
|||||||
*/
|
*/
|
||||||
u.nv_range = 1;
|
u.nv_range = 1;
|
||||||
u.xray_range = -1;
|
u.xray_range = -1;
|
||||||
|
u.unblind_telepat_range = -1;
|
||||||
|
|
||||||
/* OPTIONS:blind results in permanent blindness (unless overridden
|
/* OPTIONS:blind results in permanent blindness (unless overridden
|
||||||
by the Eyes of the Overworld, which will clear 'u.uroleplay.blind'
|
by the Eyes of the Overworld, which will clear 'u.uroleplay.blind'
|
||||||
to void the conduct, but will leave the PermaBlind bit set so that
|
to void the conduct, but will leave the PermaBlind bit set so that
|
||||||
|
|||||||
+22
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
#include "hack.h"
|
#include "hack.h"
|
||||||
|
|
||||||
|
staticfn void recalc_telepat_range(void);
|
||||||
staticfn void m_lose_armor(struct monst *, struct obj *, boolean) NONNULLPTRS;
|
staticfn void m_lose_armor(struct monst *, struct obj *, boolean) NONNULLPTRS;
|
||||||
staticfn void clear_bypass(struct obj *) NO_NNARGS;
|
staticfn void clear_bypass(struct obj *) NO_NNARGS;
|
||||||
staticfn void m_dowear_type(struct monst *, long, boolean, boolean) NONNULLARG1;
|
staticfn void m_dowear_type(struct monst *, long, boolean, boolean) NONNULLARG1;
|
||||||
@@ -44,6 +45,25 @@ static const struct worn {
|
|||||||
/* note: monsters don't have clairvoyance, so dependency on hero's role here
|
/* note: monsters don't have clairvoyance, so dependency on hero's role here
|
||||||
has no significant effect on their use of w_blocks() */
|
has no significant effect on their use of w_blocks() */
|
||||||
|
|
||||||
|
/* calc the range of hero's unblind telepathy */
|
||||||
|
staticfn void
|
||||||
|
recalc_telepat_range(void)
|
||||||
|
{
|
||||||
|
const struct worn *wp;
|
||||||
|
int nobjs = 0;
|
||||||
|
|
||||||
|
for (wp = worn; wp->w_mask; wp++) {
|
||||||
|
struct obj *oobj = *(wp->w_obj);
|
||||||
|
|
||||||
|
if (oobj && objects[oobj->otyp].oc_oprop == TELEPAT)
|
||||||
|
nobjs++;
|
||||||
|
}
|
||||||
|
if (nobjs)
|
||||||
|
u.unblind_telepat_range = (BOLT_LIM * BOLT_LIM) * nobjs;
|
||||||
|
else
|
||||||
|
u.unblind_telepat_range = -1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Updated to use the extrinsic and blocked fields. */
|
/* Updated to use the extrinsic and blocked fields. */
|
||||||
void
|
void
|
||||||
setworn(struct obj *obj, long mask)
|
setworn(struct obj *obj, long mask)
|
||||||
@@ -114,6 +134,7 @@ setworn(struct obj *obj, long mask)
|
|||||||
iflags.tux_penalty = (uarm && Role_if(PM_MONK) && gu.urole.spelarmr);
|
iflags.tux_penalty = (uarm && Role_if(PM_MONK) && gu.urole.spelarmr);
|
||||||
}
|
}
|
||||||
update_inventory();
|
update_inventory();
|
||||||
|
recalc_telepat_range();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* called e.g. when obj is destroyed */
|
/* called e.g. when obj is destroyed */
|
||||||
@@ -147,6 +168,7 @@ setnotworn(struct obj *obj)
|
|||||||
if (!uarm)
|
if (!uarm)
|
||||||
iflags.tux_penalty = FALSE;
|
iflags.tux_penalty = FALSE;
|
||||||
update_inventory();
|
update_inventory();
|
||||||
|
recalc_telepat_range();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* called when saving with FREEING flag set has just discarded inventory */
|
/* called when saving with FREEING flag set has just discarded inventory */
|
||||||
|
|||||||
Reference in New Issue
Block a user