From: iks Date: Mon, 18 Feb 2013 13:55:40 +0000 (+0000) Subject: Thrown torches given pretty larger dice, fire brand, kill undead when them has fuel X-Git-Tag: v2.1.2~61 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=fcd037c6541e681cf05f7fc886115f39baba3ed6;p=hengbandforosx%2Fhengbandosx.git Thrown torches given pretty larger dice, fire brand, kill undead when them has fuel --- diff --git a/src/cmd1.c b/src/cmd1.c index b7124ee13..dfdd5ec52 100644 --- a/src/cmd1.c +++ b/src/cmd1.c @@ -230,6 +230,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo /* Extract the flags */ object_flags(o_ptr, flgs); + torch_flags(o_ptr, flgs); /* torches has secret flags */ if (!thrown) { @@ -251,6 +252,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo case TV_POLEARM: case TV_SWORD: case TV_DIGGING: + case TV_LITE: { /* Slay Animal */ if ((have_flag(flgs, TR_SLAY_ANIMAL)) && diff --git a/src/cmd2.c b/src/cmd2.c index c365b5911..760c6f5e4 100644 --- a/src/cmd2.c +++ b/src/cmd2.c @@ -4129,7 +4129,7 @@ bool do_cmd_throw_aux(int mult, bool boomerang, int shuriken) int i, j, y, x, ty, tx, prev_y, prev_x; int ny[19], nx[19]; int chance, tdam, tdis; - int mul, div; + int mul, div, dd, ds; int cur_dis, visible; object_type forge; @@ -4250,6 +4250,7 @@ bool do_cmd_throw_aux(int mult, bool boomerang, int shuriken) /* Extract the thrown object's flags. */ object_flags(q_ptr, flgs); + torch_flags(q_ptr, flgs); /* Distribute the charges of rods/wands between the stacks */ distribute_charges(o_ptr, q_ptr, 1); @@ -4464,7 +4465,10 @@ bool do_cmd_throw_aux(int mult, bool boomerang, int shuriken) } /* Hack -- Base damage from thrown object */ - tdam = damroll(q_ptr->dd, q_ptr->ds); + dd = q_ptr->dd; + ds = q_ptr->ds; + torch_dice(q_ptr, &dd, &ds); /* throwing a torch */ + tdam = damroll(dd, ds); /* Apply special damage XXX XXX XXX */ tdam = tot_dam_aux(q_ptr, tdam, m_ptr, 0, TRUE); tdam = critical_shot(q_ptr->weight, q_ptr->to_h, tdam); @@ -4554,6 +4558,9 @@ bool do_cmd_throw_aux(int mult, bool boomerang, int shuriken) } } + /* decrease toach's fuel */ + if (hit_body) torch_lost_fuel(q_ptr); + /* Chance of breakage (during attacks) */ j = (hit_body ? breakage_chance(q_ptr) : 0); diff --git a/src/externs.h b/src/externs.h index ebfc91cdd..188462632 100644 --- a/src/externs.h +++ b/src/externs.h @@ -1073,6 +1073,9 @@ extern void display_koff(int k_idx); extern object_type *choose_warning_item(void); extern bool process_warning(int xx, int yy); extern void do_cmd_kaji(bool only_browse); +extern void torch_flags(object_type *o_ptr, u32b *flgs); +extern void torch_dice(object_type *o_ptr, int *dd, int *ds); +extern void torch_lost_fuel(object_type *o_ptr); /* racial.c */ extern bool gain_magic(void); diff --git a/src/object2.c b/src/object2.c index 1d9b8d1a3..a541130ce 100644 --- a/src/object2.c +++ b/src/object2.c @@ -8615,3 +8615,41 @@ void do_cmd_kaji(bool only_browse) case 5: add_essence(10);break; } } + + +/* + * Torches have special abilities when they are flaming. + */ +void torch_flags(object_type *o_ptr, u32b *flgs) +{ + if ((o_ptr->tval == TV_LITE) && (o_ptr->sval == SV_LITE_TORCH)) + { + if (o_ptr->xtra4 > 0) + { + add_flag(flgs, TR_BRAND_FIRE); + add_flag(flgs, TR_KILL_UNDEAD); + add_flag(flgs, TR_THROW); + } + } +} + +void torch_dice(object_type *o_ptr, int *dd, int *ds) +{ + if ((o_ptr->tval == TV_LITE) && (o_ptr->sval == SV_LITE_TORCH)) + { + if (o_ptr->xtra4 > 0) + { + (*dd) = 2; + (*ds) = 4; + } + } +} + +void torch_lost_fuel(object_type *o_ptr) +{ + if ((o_ptr->tval == TV_LITE) && (o_ptr->sval == SV_LITE_TORCH)) + { + o_ptr->xtra4 -= (FUEL_TORCH / 25); + if (o_ptr->xtra4 < 0) o_ptr->xtra4; + } +}