Longbow of Diana

Give an extra +1 to potential multi-shot to rangers wielding the
Longbow of Diana and shooting any type of arrow.  When an elf ranger
has been wielding an elven bow to shoot elvish arrows or an orc
ranger has been wielding an orcish bow to shoot orcish arrows, they
lose their racial bonus but won't lose any multi-shot capability by
switching to their quest artifact.  Human and gnome rangers gain the
+1 bonus.  (I have no idea how a gnome could wield a longbow.  One
would need a step ladder to hold it vertically, and could only draw
the string back a stubby arm's length if they held if horizonally.)

That bonus gets applied before feeding the multi-shot counter to
rnd() so doesn't mean an extra arrow every time.  And you have to
be wielding your own quest artifact--in addition to it being the
appropriate launcher for the ammo you're shooting--so doesn't provide
any multi-shot benefit to other types of characters who wish for it.
This commit is contained in:
PatR
2022-10-31 23:13:05 -07:00
parent f3579ef4a5
commit 55ec68ef0a
2 changed files with 20 additions and 8 deletions

View File

@@ -1869,6 +1869,8 @@ mouse buttons can be bound to extended commands
hero poly'd into purple worm can gain intrinsics from digesting whole monster
add some tins of spinach to monk's quest (vegan => no Str from giant corpses)
very large humanoids can wear mummy wrappings
for ranger characters, shooting any type of arrow while wielding the Longbow
of Diana gets an extra +1 to multi-shot
Platform- and/or Interface-Specific New Features

View File

@@ -33,8 +33,10 @@ static boolean mhurtle_step(genericptr_t, coordxy, coordxy);
/* g.thrownobj (decl.c) tracks an object until it lands */
int
multishot_class_bonus(int pm, struct obj *ammo,
struct obj *launcher) /* can be NULL */
multishot_class_bonus(
int pm,
struct obj *ammo,
struct obj *launcher) /* can be NULL */
{
int multishot = 0;
schar skill = objects[ammo->otyp].oc_skill;
@@ -182,7 +184,7 @@ throw_obj(struct obj *obj, int shotlimit)
multishot += multishot_class_bonus(Role_switch, obj, uwep);
/* ...or using their race's special bow; no bonus for spears */
if (!weakmultishot)
if (!weakmultishot) {
switch (Race_switch) {
case PM_ELF:
if (obj->otyp == ELVEN_ARROW && uwep
@@ -205,6 +207,15 @@ throw_obj(struct obj *obj, int shotlimit)
break; /* No bonus */
}
/* when launcher is own quest artifact, give extra +1 with any
type of ammo appropriate for that launcher (compensates for
elven and orcish rangers loss of bonus for use of racial bow
plus racial arrows if they switch to the Longbow of Diana) */
if (uwep && is_quest_artifact(uwep)
&& ammo_and_launcher(obj, uwep))
++multishot;
}
/* crossbows are slow to load and probably shouldn't allow multiple
shots at all, but that would result in players never using them;
instead, high strength is necessary to load and shoot quickly */
@@ -1969,11 +1980,10 @@ thitmonst(
if ((Race_if(PM_ELF) || Role_if(PM_SAMURAI))
&& (!Upolyd || your_race(g.youmonst.data))
&& objects[uwep->otyp].oc_skill == P_BOW) {
tmp++;
if (Race_if(PM_ELF) && uwep->otyp == ELVEN_BOW)
tmp++;
else if (Role_if(PM_SAMURAI) && uwep->otyp == YUMI)
tmp++;
++tmp;
if ((Race_if(PM_ELF) && uwep->otyp == ELVEN_BOW)
|| (Role_if(PM_SAMURAI) && uwep->otyp == YUMI))
++tmp;
}
}
} else { /* thrown non-ammo or applied polearm/grapnel */