From lerner@scf.usc.edu Thu Apr 7 18:37:15 1994
Received: from chaph.usc.edu by garnet.berkeley.edu (8.6.8/1.33r)
id SAA14256; Thu, 7 Apr 1994 18:37:15 -0700
Received: from phakt.usc.edu (lerner@phakt.usc.edu [128.125.253.144])
by chaph.usc.edu (8.6.8.1/8.6.4) with ESMTP
id SAA28034 for <merc@garnet.berkeley.edu>; Thu, 7 Apr 1994 18:37:13 -0700
Received: (lerner@localhost)
by phakt.usc.edu (8.6.8.1/8.6.7+ucs)
id SAA23894 for merc@garnet.berkeley.edu; Thu, 7 Apr 1994 18:37:08 -0700
Date: Thu, 7 Apr 94 18:37:07 PDT
From: Count Zero <lerner@scf.usc.edu>
To: merc@garnet.berkeley.edu
Subject: new warrior skills
Message-ID: <CMM.0.90.2.765769027.lerner@phakt.usc.edu>
Status: RO
Ok here we go ;)
*** Shield Block
in const.c
==========
{
"shield block", { 37, 37, 37, 7, 37 },
spell_null, TAR_IGNORE, POS_FIGHTING,
&gsn_shield_block, SLOT( 0), 0, 0,
"", "!Shield Block!"
},
in db.c
=======
sh_int gsn_shield_block;
in fight.c
==========
(local functions)
bool check_shield_block args( ( CHAR_DATA *ch, CHAR_DATA *victim ) );
(in this function add)
/*
* Check for disarm, trip, parry, and dodge. (and shield bloack)
*/
if ( dt >= TYPE_HIT )
{
if ( IS_NPC(ch) && number_percent( ) < ch->level / 5 )
disarm( ch, victim );
if ( IS_NPC(ch) && number_percent( ) < ch->level / 2 )
trip( ch, victim );
if ( check_parry( ch, victim ) )
return;
ADD-> if ( check_shield_block( ch, victim ) )
ADD-> return;
if ( check_dodge( ch, victim ) )
return;
}
(and finaly include this function)
/*
* Check for block.
*/
bool check_shield_block( CHAR_DATA *ch, CHAR_DATA *victim )
{
int chance;
if ( !IS_AWAKE(victim) )
return FALSE;
if ( IS_NPC(victim) )
return FALSE;
else
{
if ( get_eq_char( victim, WEAR_SHIELD ) == NULL )
return FALSE;
chance = victim->pcdata->learned[gsn_shield_block] / 2;
}
if ( number_percent( ) >= chance + victim->level - ch->level )
return FALSE;
act( "You block $n's attack with your shield.", ch, NULL, victim,
TO_VICT );
act( "$N blocks your attack with a shield.", ch, NULL, victim,
TO_CHAR );
return TRUE;
}
in merc.h
=========
(add the gsn)
extern sh_int gsn_shield_block;
*** Fast Healing
in const.c
==========
{
"fast healing", { 37, 37, 37, 20, 37 },
spell_null, TAR_IGNORE, POS_DEAD,
&gsn_fast_healing, SLOT( 0), 0, 0,
"", "!Fast Healing!"
},
in db.c
=======
sh_int gsn_fast_healing;
in merc.h
=========
(to gsns)
extern sh_int gsn_fast_healing;
in update.c
===========
(in this function add)
/*
* Regeneration stuff.
*/
int hit_gain( CHAR_DATA *ch )
{
int gain;
ADD-> int number;
if ( IS_NPC(ch) )
{
gain = ch->level * 3 / 2;
}
else
{
gain = UMIN( 5, ch->level );
ADD-> number = number_percent();
ADD-> if (number < ch->pcdata->learned[gsn_fast_healing])
ADD-> gain += number * gain / 100;
switch ( ch->position )
{
case POS_SLEEPING: gain += get_curr_con(ch); break;
case POS_RESTING: gain += get_curr_con(ch) / 2; break;
}
if ( ch->pcdata->condition[COND_FULL] == 0 )
gain /= 2;
if ( ch->pcdata->condition[COND_THIRST] == 0 )
gain /= 2;
}
if ( IS_AFFECTED(ch, AFF_POISON) )
gain /= 4;
return UMIN(gain, ch->max_hit - ch->hit);
}
*** Fourth Attack
in const.c
==========
{
"fourth attack", { 37, 37, 37, 25, 37 },
spell_null, TAR_IGNORE, POS_FIGHTING,
&gsn_fourth_attack, SLOT( 0), 0, 0,
"", "!Fourth Attack!"
},
in db.c
=======
sh_int gsn_fourth_attack;
in fight.c
==========
(in this function)
/*
* Do one group of attacks.
*/
[ a bunch of stuff here, but after third attack....]
/* add all of this */
chance = IS_NPC(ch) ? ch->level :
ch->pcdata->learned[gsn_fourth_attack]/4; /* <--- change this last number
to your discretion */
if ( number_percent( ) < chance )
{
one_hit( ch, victim, dt );
if ( ch->fighting != victim )
return;
}
in merc.h
=========
(to gsns)
extern sh_int gsn_fourth_attack;
***********
Well thats it, I told you they were easy.
You might want to look at the number() in fast healing
since I pulled that one from ROM code.
- Sandman