diff options
-rw-r--r-- | crawl-ref/source/describe.cc | 23 | ||||
-rw-r--r-- | crawl-ref/source/item_use.cc | 16 | ||||
-rw-r--r-- | crawl-ref/source/itemprop.cc | 15 | ||||
-rw-r--r-- | crawl-ref/source/itemprop.h | 3 | ||||
-rw-r--r-- | crawl-ref/source/makeitem.cc | 13 |
5 files changed, 58 insertions, 12 deletions
diff --git a/crawl-ref/source/describe.cc b/crawl-ref/source/describe.cc index ea37a0c283..ce0448e2cb 100644 --- a/crawl-ref/source/describe.cc +++ b/crawl-ref/source/describe.cc @@ -1442,8 +1442,10 @@ static std::string describe_ammo( const item_def &item ) break; } - switch ( get_equip_race(item) ) + if ( has_launcher(item) ) { + switch ( get_equip_race(item) ) + { case ISFLAG_DWARVEN: description += "$It is more effective in conjunction with dwarven launchers."; @@ -1456,6 +1458,25 @@ static std::string describe_ammo( const item_def &item ) description += "$It is more effective in conjunction with orcish launchers."; break; + } + } + else + { + switch ( get_equip_race(item) ) + { + case ISFLAG_DWARVEN: + description += + "$It is most deadly when thrown by dwarves."; + break; + case ISFLAG_ELVEN: + description += + "$It is most deadly when thrown by elves."; + break; + case ISFLAG_ORCISH: + description += + "$It is most deadly when thrown by orcs."; + break; + } } if (item.special != 0 && item_type_known(item)) diff --git a/crawl-ref/source/item_use.cc b/crawl-ref/source/item_use.cc index 5fbaf7423c..98f9377224 100644 --- a/crawl-ref/source/item_use.cc +++ b/crawl-ref/source/item_use.cc @@ -2079,7 +2079,8 @@ bool throw_it(bolt &pbolt, int throw_2, bool teleport, int acc_bonus, // all weapons that use 'throwing' go here.. if (wepClass == OBJ_WEAPONS || (wepClass == OBJ_MISSILES - && (wepType == MI_STONE || wepType == MI_LARGE_ROCK))) + && (wepType == MI_STONE || wepType == MI_LARGE_ROCK + || wepType == MI_JAVELIN))) { // elves with elven weapons if (get_equip_race(item) == ISFLAG_ELVEN @@ -2106,6 +2107,17 @@ bool throw_it(bolt &pbolt, int throw_2, bool teleport, int acc_bonus, break; } } + else if (wepClass == OBJ_MISSILES) + { + switch (wepType) + { + case MI_JAVELIN: + baseHit += 1; + break; + default: + break; + } + } exHitBonus = you.skills[SK_THROWING] * 2; @@ -2152,8 +2164,6 @@ bool throw_it(bolt &pbolt, int throw_2, bool teleport, int acc_bonus, break; case MI_JAVELIN: // Javelins use throwing skill. - baseHit = 1; - baseDam = property( item, PWPN_DAMAGE ); exHitBonus += skill_bump(SK_THROWING); exDamBonus += you.skills[SK_THROWING] * 3 / 5; diff --git a/crawl-ref/source/itemprop.cc b/crawl-ref/source/itemprop.cc index 2bb580de93..69da6bcc42 100644 --- a/crawl-ref/source/itemprop.cc +++ b/crawl-ref/source/itemprop.cc @@ -709,8 +709,11 @@ void set_equip_race( item_def &item, unsigned long flags ) } break; case OBJ_MISSILES: - if (item.sub_type == MI_ARROW) + if (item.sub_type == MI_ARROW + || item.sub_type == MI_JAVELIN) + { return; + } break; default: break; @@ -1855,7 +1858,15 @@ const char * ammo_name( const item_def &bow ) { ASSERT( is_range_weapon( bow ) ); return ammo_name(fires_ammo_type( bow )); -} +} + +// returns true if item has an associated launcher +bool has_launcher( const item_def &wpn ) +{ + return (wpn.sub_type != MI_LARGE_ROCK && + wpn.sub_type != MI_JAVELIN && + wpn.sub_type != MI_THROWING_NET); +} // returns true if item can be reasonably thrown without a launcher bool is_throwable( const item_def &wpn, size_type bodysize ) diff --git a/crawl-ref/source/itemprop.h b/crawl-ref/source/itemprop.h index 07848add5e..39292bcbd5 100644 --- a/crawl-ref/source/itemprop.h +++ b/crawl-ref/source/itemprop.h @@ -672,8 +672,9 @@ missile_type fires_ammo_type( const item_def &item ); missile_type fires_ammo_type( weapon_type wtype ); const char * ammo_name( const item_def &bow ); const char * ammo_name( missile_type mtyp ); +bool has_launcher( const item_def &wpn ); bool is_throwable( const item_def &wpn, - size_type bodysize = SIZE_MEDIUM ); + size_type bodysize = SIZE_MEDIUM ); launch_retval is_launched(actor *actor, const item_def *launcher, const item_def &missile); diff --git a/crawl-ref/source/makeitem.cc b/crawl-ref/source/makeitem.cc index aa21dfa01c..7df3bd4615 100644 --- a/crawl-ref/source/makeitem.cc +++ b/crawl-ref/source/makeitem.cc @@ -1625,7 +1625,8 @@ static item_status_flag_type determine_missile_race(const item_def& item, case MAKE_ITEM_RANDOM_RACE: // Elves don't make bolts, sling bullets, or throwing nets if ((item.sub_type == MI_ARROW - || item.sub_type == MI_DART) + || item.sub_type == MI_DART + || item.sub_type == MI_JAVELIN) && one_chance_in(4)) { rc = ISFLAG_ELVEN; @@ -1634,13 +1635,15 @@ static item_status_flag_type determine_missile_race(const item_def& item, // Orcs don't make sling bullets or throwing nets if ((item.sub_type == MI_ARROW || item.sub_type == MI_BOLT - || item.sub_type == MI_DART) + || item.sub_type == MI_DART + || item.sub_type == MI_JAVELIN) && one_chance_in(4)) { rc = ISFLAG_ORCISH; } - // Dwarves don't make arrows, sling bullets, or throwing nets + // Dwarves don't make arrows, sling bullets, javelins, or + // throwing nets if ((item.sub_type == MI_DART || item.sub_type == MI_BOLT) && one_chance_in(6)) @@ -1696,9 +1699,9 @@ static special_missile_type determine_missile_brand(const item_def& item, if (get_equip_race(item) == ISFLAG_ORCISH && one_chance_in(3)) rc = SPMSL_POISONED; - // Un-poison sling bullets, unbrand nets. + // Un-poison sling bullets; unbrand javelins and throwing nets. if ((item.sub_type == MI_SLING_BULLET && rc == SPMSL_POISONED) - || item.sub_type == MI_THROWING_NET) + || item.sub_type == MI_JAVELIN || item.sub_type == MI_THROWING_NET) { rc = SPMSL_NORMAL; } |