/* ------------------------------------------- * 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;