/* -------------------------------------------
* Critical Strike for ROM24, 1.00 - 3/28/98
* -------------------------------------------
* The critical strike is an automatic skill
* that allows players with 100% skill in the
* weapon they are using to get a little bonus
* out of it once in a while.
*
* As with all else, please email me if you use
* this code so I know my time is not going
* to waste. :)
*
* Brian Babey (aka Varen)
* [bribe@erols.com]
* ------------------------------------------- */
/* -----------------------------------------------
* In const.c, insert this into the skill table */
{
"critical strike", { 53, 53, 40, 35 }, { 0, 0, 8, 8},
spell_null, TAR_IGNORE, POS_FIGHTING,
&gsn_critical, SLOT( 0), 0, 0,
"", "!Critical Strike!", ""
},
/* ----------------------------------------------
* In merc.h, under Game Parameters, increment
* the variable MAX_SKILL by 1. */
/* ----------------------------------------------
* In merc.h, under the new gsns section, insert
* this line */
extern sh_int gsn_critical;
/* ----------------------------------------------
* In db.c, under new gsns, insert this line: */
sh_int gsn_critical;
/* ----------------------------------------------
* In fight.c, in the local function declarations,
* insert this line. */
bool check_critical args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
/* ---------------------------------------------
* In fight.c, insert this function wherever
* it belongs alphabetically (or wherever you'd
* like it to be - it really doesn't matter) */
bool check_critical(CHAR_DATA *ch, CHAR_DATA *victim)
{
OBJ_DATA *obj;
obj = get_eq_char(ch,WEAR_WIELD);
if (
( get_eq_char(ch,WEAR_WIELD) == NULL ) ||
( get_skill(ch,gsn_critical) < 1 ) ||
( get_weapon_skill(ch,get_weapon_sn(ch)) != 100 ) ||
( number_range(0,100) > get_skill(ch,gsn_critical) )
)
return FALSE;
if ( number_range(0,100) > 25 )
return FALSE;
/* Now, if it passed all the tests... */
act("$p CRITICALLY STRIKES $n!",victim,obj,NULL,TO_NOTVICT);
act("CRITICAL STRIKE!",ch,NULL,victim,TO_VICT);
check_improve(ch,gsn_critical,TRUE,6);
return TRUE;
}
/* -------------------------------------------
* In fight.c, in the function one_hit, insert
* this line into the bonus section, where
* enhanced damage is factored in. */
if ( check_critical(ch,victim) )
dam *= 1.40;