/* ------------------------------------------- * Phase Skill for ROM24, 1.00 - 3/28/98 * ------------------------------------------- * The phase skill is a defensive skill similar * to dodge that allows the player to shift * out of phase to avoid incoming attacks. * * 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 */ { "phase", { 10, 15, 40, 53 }, { 1, 3, 6, 0}, spell_null, TAR_IGNORE, POS_FIGHTING, &gsn_phase, SLOT( 0), 0, 0, "", "!Phase!", "" }, /* ---------------------------------------------- * 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_phase; /* ---------------------------------------------- * In db.c, under new gsns, insert this line: */ sh_int gsn_phase; /* ---------------------------------------------- * In fight.c, in the local function declarations, * insert this line. */ bool check_phase 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_phase( CHAR_DATA *ch, CHAR_DATA *victim ) { int chance; if ( !IS_AWAKE(victim) ) return FALSE; chance = get_skill(victim,gsn_phase) / 2; if (!can_see(victim,ch)) chance /= 2; if ( number_percent( ) >= chance + victim->level - ch->level ) return FALSE; act( "Your body phases to avoid $n's attack.", ch, NULL, victim, TO_VICT ); act( "$N's body phases to avoid your attack.", ch, NULL, victim, TO_CHAR ); check_improve(victim,gsn_phase,TRUE,6); return TRUE; } /* ------------------------------------------- * In fight.c, inside BOTH damage and damage_old * functions, in the section where it checks * for parry/dodge, insert this line underneath * shield block */ if ( check_phase( ch, victim) ) return FALSE;