/*************************************************************************** * This code is free for use within any non-commercial MUD. * * *********************************************************************** * * This is a simple snippet to make weapons a bit more diverse, in the * * hopes that players will choose a weapon other than sword. The new * * capabilities for each weapon are as follows: * * * * Swords have a VERY SLIM chance of attacking two enemies at once. * * Daggers may recieve one additional attack. * * Spears apply your dexterity as additional damroll. * * Polearms can keep your opponent at bay for an extra defense. * * Axes can deliver a critical hit. * * Maces might knock your opponent down. * * Flails will inflict daze on your opponent. * * Whips apply your intelligence as additional damroll. * * * * You only need to edit one file to install this, fight.c. Afterwards, I * * would recommend noting these changes in a helpfile. I'd most certainly * * appreciate credit, but it isn't necessary, so long as you don't try to * * claim it as your own work. As always, if you have feedback, I'd love * * to hear from you. -- Midboss (eclipsing.souls@gmail.com) * * * ***************************************************************************/ //---| Add these at the top of the file: bool pole_special (CHAR_DATA * ch, CHAR_DATA * victim); int axe_special (CHAR_DATA * ch, CHAR_DATA * victim, int dam); //---| In multi_hit(), replace this: if (IS_AWAKE (ch) && ch->in_room == victim->in_room) multi_hit (ch, victim, TYPE_UNDEFINED); //---| With this: if (IS_AWAKE (ch) && ch->in_room == victim->in_room) { multi_hit (ch, victim, TYPE_UNDEFINED); /* * Swords will very rarely get in an extra round. */ if (get_weapon_sn (ch) == gsn_sword && ch->wait <= 0) { int chance; CHAR_DATA * was_fighting; CHAR_DATA * vch; chance = get_skill (ch, gsn_sword) / 15; /* * Penalty if the opponent can see. */ if (can_see (victim, ch)) chance = chance * 3 / 5; for (vch = ch->in_room->people; vch != NULL; vch = vch->next_in_room) { if (vch->fighting == ch || is_same_group (vch->fighting, ch)) { if (number_percent () < chance) { was_fighting = ch->fighting; ch->fighting = vch; multi_hit (ch, vch, TYPE_UNDEFINED); check_improve (ch, gsn_sword, TRUE, 2); ch->fighting = was_fighting; WAIT_STATE (ch, PULSE_VIOLENCE); break; } } } } } //---| Add this with the other defensive skill calls in damage(): if (pole_special (ch, victim)) return FALSE; //---| Add this after the enhanced damage check in one_hit(): dam = axe_special (ch, victim, dam); //---| Add these after the damroll is added in one_hit(): /* * Boosted damage for spears, based on dexterity. */ if (get_weapon_sn (ch) == gsn_spear && number_percent () < get_skill (ch, gsn_spear)) { dam += get_curr_stat (ch, STAT_DEX) * get_skill (ch, gsn_spear) / 100; check_improve (ch, gsn_spear, TRUE, 6); } //---| Add this above the block of code containing the weapon effects //---| in one_hit(): /* * Knockdown and daze effects for mace and flail. */ if (result && ch->fighting == victim) { /* * Maces knock the opponent down and lag them for a moment. */ if (get_weapon_sn (ch) == gsn_mace && number_percent () < get_skill (ch, gsn_mace) / 10) { WAIT_STATE (victim, PULSE_VIOLENCE*1); victim->position = POS_RESTING; act ("Your blow knocks $N to the ground.", ch, NULL, victim, TO_CHAR); act ("$n knocks you to the ground.", ch, NULL, victim, TO_VICT); check_improve (ch, gsn_mace, TRUE, 4); } /* * Flails daze the opponent and screw up their casting. */ if (get_weapon_sn (ch) == gsn_flail && number_percent () < get_skill (ch, gsn_flail) / 5) { DAZE_STATE (victim, PULSE_VIOLENCE*4); check_improve (ch, gsn_flail, TRUE, 4); } } //---| Add this RIGHT AFTER the first one_hit() call in multi_hit: if (ch->fighting != victim) return; /* * Extra hit for daggers. */ if (get_weapon_sn (ch) == gsn_dagger) { chance = get_skill (ch, gsn_dagger) / 2; if (IS_AFFECTED (ch, AFF_SLOW)) chance /= 1.5; if (IS_AFFECTED (ch, AFF_HASTE)) chance *= 2; if (number_percent () < chance) { one_hit (ch, victim, dt); check_improve (ch, gsn_dagger, TRUE, 4); if (ch->fighting != victim) return; } } //---| Add this before the last return in check_parry(): /* * Whip innate ability. */ if (get_weapon_sn (ch) == gsn_whip) { chance = get_skill (ch, gsn_whip) / 7; if (number_percent () < chance) { disarm (ch, victim); check_improve (ch, gsn_whip, TRUE, 3); } } else if (get_weapon_sn (victim) == gsn_whip) { chance = get_skill (ch, gsn_whip) / 8; if (number_percent () < chance) { disarm (victim, ch); check_improve (victim, gsn_whip, TRUE, 3); } } //---| Add these anywhere in fight.c you feel like. /* * Special defensive skill for polearms. Due to their extended range, * polearms are able to keep your opponent from closing on on you. */ bool pole_special (CHAR_DATA * ch, CHAR_DATA * victim) { int chance; if (!IS_AWAKE (victim)) return FALSE; if (get_weapon_sn (victim) != gsn_polearm) return FALSE; chance = get_skill (victim, gsn_polearm) / 3; if (!can_see (victim, ch)) chance /= 2; /* * It's harder to keep another polearm at bay. */ if (get_weapon_sn (ch) != gsn_polearm) chance -= chance / 3; if (number_percent () >= chance + victim->level - ch->level) return FALSE; act ("You manage to keep $n out of range.", ch, NULL, victim, TO_VICT); act ("$N's weapon keeps you out of range.", ch, NULL, victim, TO_CHAR); check_improve (victim, gsn_polearm, TRUE, 4); return TRUE; } /* * Critical hit damage modifier for axes. */ int axe_special (CHAR_DATA * ch, CHAR_DATA * victim, int dam) { int chance; /* * Make sure we have an axe. */ if (get_weapon_sn (ch) != gsn_axe) return dam; /* * Base is 1/5th our axe skill. Bonus if victim can't see us, penalty * if we can't see them. */ chance = get_skill (ch, gsn_axe) / 5; if (!can_see (victim, ch)) chance *= 1.5; if (!can_see (ch, victim)) chance /= 3; if (number_percent () >= chance) return dam; /* * We got a critical hit! */ dam += dam * (get_skill (ch, gsn_axe) / 2) / 100; check_improve (victim, gsn_axe, TRUE, 4); return dam; }