--- src/cmd1.c.orig Sat Jan 4 20:17:19 2003 +++ src/cmd1.c Sun Feb 2 20:11:30 2003 @@ -215,6 +215,7 @@ case TV_SHOT: case TV_ARROW: case TV_BOLT: + case TV_BOOMERANG: case TV_HAFTED: case TV_POLEARM: case TV_SWORD: --- src/object1.c.orig Sat Jan 18 18:58:59 2003 +++ src/object1.c Mon Feb 10 18:16:53 2003 @@ -2709,13 +2709,15 @@ { int dam; object_type *b_ptr = &inventory[INVEN_BOW]; - int tmul = get_shooter_mult(b_ptr); - tmul += p_ptr->xtra_might; + int is_boomerang = (o_ptr->tval == TV_BOOMERANG); + int tmul = get_shooter_mult(b_ptr) + p_ptr->xtra_might; + if (is_boomerang) tmul = p_ptr->throw_mult; dam = (o_ptr->dd + (o_ptr->dd * o_ptr->ds)) * 5; - dam += (o_ptr->to_d + b_ptr->to_d) * 10; + dam += o_ptr->to_d * 10; + if (!is_boomerang) dam += b_ptr->to_d * 10; dam *= tmul; - dam += (p_ptr->to_d_ranged) * 10; + if (!is_boomerang) dam += (p_ptr->to_d_ranged) * 10; dam *= mult; CHECK_FIRST("", *first); if (dam > 0) @@ -2732,9 +2734,10 @@ if (mult2) { dam = (o_ptr->dd + (o_ptr->dd * o_ptr->ds)) * 5; - dam += (o_ptr->to_d + b_ptr->to_d) * 10; + dam += o_ptr->to_d * 10; + if (!is_boomerang) dam += b_ptr->to_d * 10; dam *= tmul; - dam += (p_ptr->to_d_ranged) * 10; + if (!is_boomerang) dam += (p_ptr->to_d_ranged) * 10; dam *= mult2; CHECK_FIRST("", *first); if (dam > 0) @@ -2763,7 +2766,10 @@ /* Extract the flags */ object_flags(o_ptr, &f1, &f2, &f3, &f4, &f5, &esp); - roff("\nUsing it with your current shooter you would do an average damage per shot of "); + if (o_ptr->tval == TV_BOOMERANG) + roff("\nUsing it you would do an average damage per throw of "); + else + roff("\nUsing it with your current shooter you would do an average damage per shot of "); if (full && (f1 & TR1_SLAY_ANIMAL)) output_ammo_dam(o_ptr, 2, 0, "animals", NULL, &first); if (full && (f1 & TR1_SLAY_EVIL)) output_ammo_dam(o_ptr, 2, 0, "evil creatures", NULL, &first); if (full && (f1 & TR1_SLAY_ORC)) output_ammo_dam(o_ptr, 3, 0, "orcs", NULL, &first); @@ -3752,6 +3758,16 @@ /* Damage display for weapons */ if (wield_slot(o_ptr) == INVEN_WIELD) display_weapon_damage(o_ptr); + + /* Breakage/Damage display for boomerangs */ + if (o_ptr->tval == TV_BOOMERANG) + { + if (artifact_p(o_ptr)) + roff("\nIt can never be broken."); + else + roff("\nIt has 10% chance to break upon hit."); + display_ammo_damage(o_ptr); + } /* Breakage/Damage display for ammo */ if (wield_slot(o_ptr) == INVEN_AMMO)