#if defined(macintosh) #include <types.h> #else #include <sys/types.h> #include <sys/time.h> #endif #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> #include <time.h> #include "merc.h" #include "interp.h" #include "magic.h" #include "recycle.h" #include "tables.h" #include "lookup.h" void take_item(CHAR_DATA * ch, OBJ_DATA * obj) { if (obj == NULL) return; obj_from_char(obj); obj_to_room(obj, ch->in_room); act("You wince in pain and $p falls to the ground.", ch, obj, NULL, TO_CHAR); act("$n winces in pain and $p falls to the ground.", ch, obj, NULL, TO_ROOM); return; } void make_part(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; int vnum; argument = one_argument(argument, arg); vnum = 0; if (arg[0] == '\0') return; if (ch->in_room == NULL) return; if (!str_cmp(arg, "head")) vnum = OBJ_VNUM_SEVERED_HEAD; else if (!str_cmp(arg, "arm")) vnum = OBJ_VNUM_SLICED_ARM; else if (!str_cmp(arg, "leg")) vnum = OBJ_VNUM_SLICED_LEG; else if (!str_cmp(arg, "heart")) vnum = OBJ_VNUM_TORN_HEART; else if (!str_cmp(arg, "turd")) vnum = OBJ_VNUM_TORN_HEART; else if (!str_cmp(arg, "entrails")) vnum = OBJ_VNUM_SPILLED_ENTRAILS; else if (!str_cmp(arg, "brain")) vnum = OBJ_VNUM_QUIVERING_BRAIN; else if (!str_cmp(arg, "eyeball")) vnum = OBJ_VNUM_SQUIDGY_EYEBALL; else if (!str_cmp(arg, "blood")) vnum = OBJ_VNUM_SPILT_BLOOD; else if (!str_cmp(arg, "face")) vnum = OBJ_VNUM_RIPPED_FACE; else if (!str_cmp(arg, "windpipe")) vnum = OBJ_VNUM_TORN_WINDPIPE; else if (!str_cmp(arg, "cracked_head")) vnum = OBJ_VNUM_CRACKED_HEAD; else if (!str_cmp(arg, "ear")) vnum = OBJ_VNUM_SLICED_EAR; else if (!str_cmp(arg, "nose")) vnum = OBJ_VNUM_SLICED_NOSE; else if (!str_cmp(arg, "tooth")) vnum = OBJ_VNUM_KNOCKED_TOOTH; else if (!str_cmp(arg, "tongue")) vnum = OBJ_VNUM_TORN_TONGUE; else if (!str_cmp(arg, "hand")) vnum = OBJ_VNUM_SEVERED_HAND; else if (!str_cmp(arg, "foot")) vnum = OBJ_VNUM_SEVERED_FOOT; else if (!str_cmp(arg, "thumb")) vnum = OBJ_VNUM_SEVERED_THUMB; else if (!str_cmp(arg, "index")) vnum = OBJ_VNUM_SEVERED_INDEX; else if (!str_cmp(arg, "middle")) vnum = OBJ_VNUM_SEVERED_MIDDLE; else if (!str_cmp(arg, "ring")) vnum = OBJ_VNUM_SEVERED_RING; else if (!str_cmp(arg, "little")) vnum = OBJ_VNUM_SEVERED_LITTLE; else if (!str_cmp(arg, "toe")) vnum = OBJ_VNUM_SEVERED_TOE; if (vnum != 0) { char buf[MAX_STRING_LENGTH]; OBJ_DATA *obj; char *name; name = IS_NPC(ch) ? ch->short_descr : ch->name; obj = create_object(get_obj_index(vnum), 0); obj->timer = number_range(4, 7); if (!str_cmp(arg, "head") && IS_NPC(ch)) obj->value[1] = ch->pIndexData->vnum; else if (!str_cmp(arg, "head") && !IS_NPC(ch)) { // ch->pcdata->chobj = obj; // obj->chobj = ch; obj->timer = number_range(1, 2); obj->item_type = ITEM_HEAD; } else if (!str_cmp(arg, "brain") && !IS_NPC(ch) && IS_AFFECTED(ch, AFF_POLYMORPH) && IS_HEAD(ch, LOST_HEAD)) { // if (ch->pcdata->chobj != NULL) // ch->pcdata->chobj->chobj = NULL; // ch->pcdata->chobj = obj; // obj->chobj = ch; obj->timer = number_range(1, 2); obj->item_type = ITEM_HEAD; } if (vnum == OBJ_VNUM_SPILT_BLOOD) obj->timer = 2; if (!IS_NPC(ch)) { sprintf(buf, obj->name, name); free_string(obj->name); obj->name = str_dup(buf); } else { sprintf(buf, obj->name, "mob"); free_string(obj->name); obj->name = str_dup(buf); } sprintf(buf, obj->short_descr, name); free_string(obj->short_descr); obj->short_descr = str_dup(buf); sprintf(buf, obj->description, name); free_string(obj->description); obj->description = str_dup(buf); obj_to_room(obj, ch->in_room); } return; } void critical_hit(CHAR_DATA * ch, CHAR_DATA * victim, int dt, int dam) { // const char *attack; OBJ_DATA *obj; OBJ_DATA *damaged; char buf[MAX_STRING_LENGTH]; char buf2[20]; // int dtype; int critical = 0; // int wpn = 0; // int wpn2 = 0; int count; int count2; if (IS_NPC(ch)) critical += ((ch->level + 1) / 5); if (!IS_NPC(ch)) critical += 15; // if (IS_NPC(victim)) // critical -= ((victim->level + 1) / 250); /* if (!IS_NPC(victim)) { obj = get_eq_char(victim, WEAR_WIELD); dtype = TYPE_HIT; if (obj != NULL && obj->item_type == ITEM_WEAPON) dtype += obj->value[3]; obj = get_eq_char(victim, WEAR_HOLD); dtype = TYPE_HIT; if (obj != NULL && obj->item_type == ITEM_WEAPON) dtype += obj->value[3]; } */ if (critical < 1) critical = 1; else if (IS_NPC(ch) && critical > 45) critical = 45; if (number_percent() > critical) return; critical = number_range(1, 23); if (critical == 1) { if (IS_HEAD(victim, LOST_EYE_L) && IS_HEAD(victim, LOST_EYE_R)) return; if ((damaged = get_eq_char(victim, WEAR_EYES)) != NULL && damaged->toughness > 0) { act("$p prevents you from loosing an eye.", victim, damaged, NULL, TO_CHAR); act("$p prevents $n from loosing an eye.", victim, damaged, NULL, TO_ROOM); if (dam - damaged->toughness < 0) return; if ((dam - damaged->toughness > damaged->resistance)) damaged->condition -= damaged->resistance; else damaged->condition -= (dam - damaged->toughness); if (damaged->condition < 1) { act("$p falls broken to the ground.", ch, damaged, NULL, TO_CHAR); act("$p falls broken to the ground.", ch, damaged, NULL, TO_ROOM); obj_from_char(damaged); extract_obj(damaged); } return; } /* * Stone skin will prevent any damage done to arms/legs. */ if (is_affected(victim, skill_lookup("stone skin"))) return; if (!IS_HEAD(victim, LOST_EYE_L) && number_percent() < 50) SET_BIT(victim->loc_hp[0], LOST_EYE_L); else if (!IS_HEAD(victim, LOST_EYE_R)) SET_BIT(victim->loc_hp[0], LOST_EYE_R); else if (!IS_HEAD(victim, LOST_EYE_L)) SET_BIT(victim->loc_hp[0], LOST_EYE_L); else return; act("Your skillful blow takes out $N's eye!", ch, NULL, victim, TO_CHAR); act("$n's skillful blow takes out $N's eye!", ch, NULL, victim, TO_NOTVICT); act("$n's skillful blow takes out your eye!", ch, NULL, victim, TO_VICT); make_part(victim, "eyeball"); return; } else if (critical == 2) { if (IS_HEAD(victim, LOST_EAR_L) && IS_HEAD(victim, LOST_EAR_R)) return; if ((damaged = get_eq_char(victim, WEAR_HEAD)) != NULL && damaged->toughness > 0) { act("$p prevents you from loosing an ear.", victim, damaged, NULL, TO_CHAR); act("$p prevents $n from loosing an ear.", victim, damaged, NULL, TO_ROOM); if (dam - damaged->toughness < 0) return; if ((dam - damaged->toughness > damaged->resistance)) damaged->condition -= damaged->resistance; else damaged->condition -= (dam - damaged->toughness); if (damaged->condition < 1) { act("$p falls broken to the ground.", ch, damaged, NULL, TO_CHAR); act("$p falls broken to the ground.", ch, damaged, NULL, TO_ROOM); obj_from_char(damaged); extract_obj(damaged); } return; } /* * Stone skin will prevent any damage done to arms/legs. */ if (is_affected(victim, skill_lookup("stone skin"))) return; if (!IS_HEAD(victim, LOST_EAR_L) && number_percent() < 50) SET_BIT(victim->loc_hp[0], LOST_EAR_L); else if (!IS_HEAD(victim, LOST_EAR_R)) SET_BIT(victim->loc_hp[0], LOST_EAR_R); else if (!IS_HEAD(victim, LOST_EAR_L)) SET_BIT(victim->loc_hp[0], LOST_EAR_L); else return; act("Your skillful blow cuts off $N's ear!", ch, NULL, victim, TO_CHAR); act("$n's skillful blow cuts off $N's ear!", ch, NULL, victim, TO_NOTVICT); act("$n's skillful blow cuts off your ear!", ch, NULL, victim, TO_VICT); make_part(victim, "ear"); return; } else if (critical == 3) { if (IS_HEAD(victim, LOST_NOSE)) return; if ((damaged = get_eq_char(victim, WEAR_EYES)) != NULL && damaged->toughness > 0) { act("$p prevents you from loosing your nose.", victim, damaged, NULL, TO_CHAR); act("$p prevents $n from loosing $s nose.", victim, damaged, NULL, TO_ROOM); if (dam - damaged->toughness < 0) return; if ((dam - damaged->toughness > damaged->resistance)) damaged->condition -= damaged->resistance; else damaged->condition -= (dam - damaged->toughness); if (damaged->condition < 1) { act("$p falls broken to the ground.", ch, damaged, NULL, TO_CHAR); act("$p falls broken to the ground.", ch, damaged, NULL, TO_ROOM); obj_from_char(damaged); extract_obj(damaged); } return; } /* * Stone skin will prevent any damage done to arms/legs. */ if (is_affected(victim, skill_lookup("stone skin"))) return; SET_BIT(victim->loc_hp[0], LOST_NOSE); act("Your skillful blow cuts off $N's nose!", ch, NULL, victim, TO_CHAR); act("$n's skillful blow cuts off $N's nose!", ch, NULL, victim, TO_NOTVICT); act("$n's skillful blow cuts off your nose!", ch, NULL, victim, TO_VICT); make_part(victim, "nose"); return; } else if (critical == 4) { if (IS_HEAD(victim, LOST_NOSE) || IS_HEAD(victim, BROKEN_NOSE)) return; if ((damaged = get_eq_char(victim, WEAR_EYES)) != NULL && damaged->toughness > 0) { act("$p prevents you from breaking your nose.", victim, damaged, NULL, TO_CHAR); act("$p prevents $n from breaking $s nose.", victim, damaged, NULL, TO_ROOM); if (dam - damaged->toughness < 0) return; if ((dam - damaged->toughness > damaged->resistance)) damaged->condition -= damaged->resistance; else damaged->condition -= (dam - damaged->toughness); if (damaged->condition < 1) { act("$p falls broken to the ground.", ch, damaged, NULL, TO_CHAR); act("$p falls broken to the ground.", ch, damaged, NULL, TO_ROOM); obj_from_char(damaged); extract_obj(damaged); } return; } /* * Stone skin will prevent any damage done to arms/legs. */ if (is_affected(victim, skill_lookup("stone skin"))) return; if (!IS_HEAD(victim, LOST_NOSE) && !IS_HEAD(victim, BROKEN_NOSE)) SET_BIT(victim->loc_hp[0], BROKEN_NOSE); else return; act("Your skillful blow breaks $N's nose!", ch, NULL, victim, TO_CHAR); act("$n's skillful blow breaks $N's nose!", ch, NULL, victim, TO_NOTVICT); act("$n's skillful blow breaks your nose!", ch, NULL, victim, TO_VICT); return; } else if (critical == 5) { if (IS_HEAD(victim, BROKEN_JAW)) return; if ((damaged = get_eq_char(victim, WEAR_EYES)) != NULL && damaged->toughness > 0) { act("$p prevents you from breaking your jaw.", victim, damaged, NULL, TO_CHAR); act("$p prevents $n from breaking $s jaw.", victim, damaged, NULL, TO_ROOM); if (dam - damaged->toughness < 0) return; if ((dam - damaged->toughness > damaged->resistance)) damaged->condition -= damaged->resistance; else damaged->condition -= (dam - damaged->toughness); if (damaged->condition < 1) { act("$p falls broken to the ground.", ch, damaged, NULL, TO_CHAR); act("$p falls broken to the ground.", ch, damaged, NULL, TO_ROOM); obj_from_char(damaged); extract_obj(damaged); } return; } /* * Stone skin will prevent any damage done to arms/legs. */ if (is_affected(victim, skill_lookup("stone skin"))) return; if (!IS_HEAD(victim, BROKEN_JAW)) SET_BIT(victim->loc_hp[0], BROKEN_JAW); else return; act("Your skillful blow breaks $N's jaw!", ch, NULL, victim, TO_CHAR); act("$n's skillful blow breaks $N's jaw!", ch, NULL, victim, TO_NOTVICT); act("$n's skillful blow breaks your jaw!", ch, NULL, victim, TO_VICT); return; } else if (critical == 6) { if (IS_ARM_L(victim, LOST_ARM)) return; if ((damaged = get_eq_char(victim, WEAR_ARMS)) != NULL && damaged->toughness > 0) { act("$p prevent you from loosing your left arm.", victim, damaged, NULL, TO_CHAR); act("$p prevent $n from loosing $s left arm.", victim, damaged, NULL, TO_ROOM); if (dam - damaged->toughness < 0) return; if ((dam - damaged->toughness > damaged->resistance)) damaged->condition -= damaged->resistance; else damaged->condition -= (dam - damaged->toughness); if (damaged->condition < 1) { act("$p fall broken to the ground.", ch, damaged, NULL, TO_CHAR); act("$p fall broken to the ground.", ch, damaged, NULL, TO_ROOM); obj_from_char(damaged); extract_obj(damaged); } return; } /* * Stone skin will prevent any damage done to arms/legs. */ if (is_affected(victim, skill_lookup("stone skin"))) return; if (!IS_ARM_L(victim, LOST_ARM)) SET_BIT(victim->loc_hp[2], LOST_ARM); else return; if (!IS_BLEEDING(victim, BLEEDING_ARM_L)) SET_BIT(victim->loc_hp[6], BLEEDING_ARM_L); if (IS_BLEEDING(victim, BLEEDING_HAND_L)) REMOVE_BIT(victim->loc_hp[6], BLEEDING_HAND_L); act("Your skillful blow cuts off $N's left arm!", ch, NULL, victim, TO_CHAR); act("$n's skillful blow cuts off $N's left arm!", ch, NULL, victim, TO_NOTVICT); act("$n's skillful blow cuts off your left arm!", ch, NULL, victim, TO_VICT); make_part(victim, "arm"); if (IS_ARM_L(victim, LOST_ARM) && IS_ARM_R(victim, LOST_ARM)) { if ((obj = get_eq_char(victim, WEAR_ARMS)) != NULL) take_item(victim, obj); } if ((obj = get_eq_char(victim, WEAR_HOLD)) != NULL) take_item(victim, obj); if ((obj = get_eq_char(victim, WEAR_HANDS)) != NULL) take_item(victim, obj); if ((obj = get_eq_char(victim, WEAR_WRIST_L)) != NULL) take_item(victim, obj); if ((obj = get_eq_char(victim, WEAR_FINGER_L)) != NULL) take_item(victim, obj); return; } else if (critical == 7) { if (IS_ARM_R(victim, LOST_ARM)) return; if ((damaged = get_eq_char(victim, WEAR_ARMS)) != NULL && damaged->toughness > 0) { act("$p prevent you from loosing your right arm.", victim, damaged, NULL, TO_CHAR); act("$p prevent $n from loosing $s right arm.", victim, damaged, NULL, TO_ROOM); if (dam - damaged->toughness < 0) return; if ((dam - damaged->toughness > damaged->resistance)) damaged->condition -= damaged->resistance; else damaged->condition -= (dam - damaged->toughness); if (damaged->condition < 1) { act("$p fall broken to the ground.", ch, damaged, NULL, TO_CHAR); act("$p fall broken to the ground.", ch, damaged, NULL, TO_ROOM); obj_from_char(damaged); extract_obj(damaged); } return; } /* * Stone skin will prevent any damage done to arms/legs. */ if (is_affected(victim, skill_lookup("stone skin"))) return; if (!IS_ARM_R(victim, LOST_ARM)) SET_BIT(victim->loc_hp[3], LOST_ARM); else return; if (!IS_BLEEDING(victim, BLEEDING_ARM_R)) SET_BIT(victim->loc_hp[6], BLEEDING_ARM_R); if (IS_BLEEDING(victim, BLEEDING_HAND_R)) REMOVE_BIT(victim->loc_hp[6], BLEEDING_HAND_R); act("Your skillful blow cuts off $N's right arm!", ch, NULL, victim, TO_CHAR); act("$n's skillful blow cuts off $N's right arm!", ch, NULL, victim, TO_NOTVICT); act("$n's skillful blow cuts off your right arm!", ch, NULL, victim, TO_VICT); make_part(victim, "arm"); if (IS_ARM_L(victim, LOST_ARM) && IS_ARM_R(victim, LOST_ARM)) { if ((obj = get_eq_char(victim, WEAR_ARMS)) != NULL) take_item(victim, obj); } if ((obj = get_eq_char(victim, WEAR_WIELD)) != NULL) take_item(victim, obj); if ((obj = get_eq_char(victim, WEAR_HANDS)) != NULL) take_item(victim, obj); if ((obj = get_eq_char(victim, WEAR_WRIST_R)) != NULL) take_item(victim, obj); if ((obj = get_eq_char(victim, WEAR_FINGER_R)) != NULL) take_item(victim, obj); return; } else if (critical == 8) { if (IS_ARM_L(victim, LOST_ARM) || IS_ARM_L(victim, BROKEN_ARM)) return; if ((damaged = get_eq_char(victim, WEAR_ARMS)) != NULL && damaged->toughness > 0) { act("$p prevent you from breaking your left arm.", victim, damaged, NULL, TO_CHAR); act("$p prevent $n from breaking $s left arm.", victim, damaged, NULL, TO_ROOM); if (dam - damaged->toughness < 0) return; if ((dam - damaged->toughness > damaged->resistance)) damaged->condition -= damaged->resistance; else damaged->condition -= (dam - damaged->toughness); if (damaged->condition < 1) { act("$p fall broken to the ground.", ch, damaged, NULL, TO_CHAR); act("$p fall broken to the ground.", ch, damaged, NULL, TO_ROOM); obj_from_char(damaged); extract_obj(damaged); } return; } /* * Stone skin will prevent any damage done to arms/legs. */ if (is_affected(victim, skill_lookup("stone skin"))) return; if (!IS_ARM_L(victim, BROKEN_ARM) && !IS_ARM_L(victim, LOST_ARM)) SET_BIT(victim->loc_hp[2], BROKEN_ARM); else return; act("Your skillful blow breaks $N's left arm!", ch, NULL, victim, TO_CHAR); act("$n's skillful blow breaks $N's left arm!", ch, NULL, victim, TO_NOTVICT); act("$n's skillful blow breaks your left arm!", ch, NULL, victim, TO_VICT); if ((obj = get_eq_char(victim, WEAR_HOLD)) != NULL) take_item(victim, obj); return; } else if (critical == 9) { if (IS_ARM_R(victim, LOST_ARM) || IS_ARM_R(victim, BROKEN_ARM)) return; if ((damaged = get_eq_char(victim, WEAR_ARMS)) != NULL && damaged->toughness > 0) { act("$p prevent you from breaking your right arm.", victim, damaged, NULL, TO_CHAR); act("$p prevent $n from breaking $s right arm.", victim, damaged, NULL, TO_ROOM); if (dam - damaged->toughness < 0) return; if ((dam - damaged->toughness > damaged->resistance)) damaged->condition -= damaged->resistance; else damaged->condition -= (dam - damaged->toughness); if (damaged->condition < 1) { act("$p fall broken to the ground.", ch, damaged, NULL, TO_CHAR); act("$p fall broken to the ground.", ch, damaged, NULL, TO_ROOM); obj_from_char(damaged); extract_obj(damaged); } return; } /* * Stone skin will prevent any damage done to arms/legs. */ if (is_affected(victim, skill_lookup("stone skin"))) return; if (!IS_ARM_R(victim, BROKEN_ARM) && !IS_ARM_R(victim, LOST_ARM)) SET_BIT(victim->loc_hp[3], BROKEN_ARM); else return; act("Your skillful blow breaks $N's right arm!", ch, NULL, victim, TO_CHAR); act("$n's skillful blow breaks $N's right arm!", ch, NULL, victim, TO_NOTVICT); act("$n's skillful blow breaks your right arm!", ch, NULL, victim, TO_VICT); if ((obj = get_eq_char(victim, WEAR_WIELD)) != NULL) take_item(victim, obj); return; } else if (critical == 10) { if (IS_ARM_L(victim, LOST_HAND) || IS_ARM_L(victim, LOST_ARM)) return; if ((damaged = get_eq_char(victim, WEAR_HANDS)) != NULL && damaged->toughness > 0) { act("$p prevent you from loosing your left hand.", victim, damaged, NULL, TO_CHAR); act("$p prevent $n from loosing $s left hand.", victim, damaged, NULL, TO_ROOM); if (dam - damaged->toughness < 0) return; if ((dam - damaged->toughness > damaged->resistance)) damaged->condition -= damaged->resistance; else damaged->condition -= (dam - damaged->toughness); if (damaged->condition < 1) { act("$p fall broken to the ground.", ch, damaged, NULL, TO_CHAR); act("$p fall broken to the ground.", ch, damaged, NULL, TO_ROOM); obj_from_char(damaged); extract_obj(damaged); } return; } /* * Stone skin will prevent any damage done to arms/legs. */ if (is_affected(victim, skill_lookup("stone skin"))) return; if (!IS_ARM_L(victim, LOST_HAND) && !IS_ARM_L(victim, LOST_ARM)) SET_BIT(victim->loc_hp[2], LOST_HAND); else return; if (IS_BLEEDING(victim, BLEEDING_ARM_L)) REMOVE_BIT(victim->loc_hp[6], BLEEDING_ARM_L); if (!IS_BLEEDING(victim, BLEEDING_HAND_L)) SET_BIT(victim->loc_hp[6], BLEEDING_HAND_L); act("Your skillful blow cuts off $N's left hand!", ch, NULL, victim, TO_CHAR); act("$n's skillful blow cuts off $N's left hand!", ch, NULL, victim, TO_NOTVICT); act("$n's skillful blow cuts off your left hand!", ch, NULL, victim, TO_VICT); make_part(victim, "hand"); if ((obj = get_eq_char(victim, WEAR_HOLD)) != NULL) take_item(victim, obj); if ((obj = get_eq_char(victim, WEAR_HANDS)) != NULL) take_item(victim, obj); if ((obj = get_eq_char(victim, WEAR_WRIST_L)) != NULL) take_item(victim, obj); if ((obj = get_eq_char(victim, WEAR_FINGER_L)) != NULL) take_item(victim, obj); return; } else if (critical == 11) { if (IS_ARM_R(victim, LOST_HAND) || IS_ARM_R(victim, LOST_ARM)) return; if ((damaged = get_eq_char(victim, WEAR_HANDS)) != NULL && damaged->toughness > 0) { act("$p prevent you from loosing your right hand.", victim, damaged, NULL, TO_CHAR); act("$p prevent $n from loosing $s right hand.", victim, damaged, NULL, TO_ROOM); if (dam - damaged->toughness < 0) return; if ((dam - damaged->toughness > damaged->resistance)) damaged->condition -= damaged->resistance; else damaged->condition -= (dam - damaged->toughness); if (damaged->condition < 1) { act("$p fall broken to the ground.", ch, damaged, NULL, TO_CHAR); act("$p fall broken to the ground.", ch, damaged, NULL, TO_ROOM); obj_from_char(damaged); extract_obj(damaged); } return; } /* * Stone skin will prevent any damage done to arms/legs. */ if (is_affected(victim, skill_lookup("stone skin"))) return; if (!IS_ARM_R(victim, LOST_HAND) && !IS_ARM_R(victim, LOST_ARM)) SET_BIT(victim->loc_hp[3], LOST_HAND); else return; if (IS_BLEEDING(victim, BLEEDING_ARM_R)) REMOVE_BIT(victim->loc_hp[6], BLEEDING_ARM_R); if (!IS_BLEEDING(victim, BLEEDING_HAND_R)) SET_BIT(victim->loc_hp[6], BLEEDING_HAND_R); act("Your skillful blow cuts off $N's right hand!", ch, NULL, victim, TO_CHAR); act("$n's skillful blow cuts off $N's right hand!", ch, NULL, victim, TO_NOTVICT); act("$n's skillful blow cuts off your right hand!", ch, NULL, victim, TO_VICT); make_part(victim, "hand"); if ((obj = get_eq_char(victim, WEAR_WIELD)) != NULL) take_item(victim, obj); if ((obj = get_eq_char(victim, WEAR_HANDS)) != NULL) take_item(victim, obj); if ((obj = get_eq_char(victim, WEAR_WRIST_R)) != NULL) take_item(victim, obj); if ((obj = get_eq_char(victim, WEAR_FINGER_R)) != NULL) take_item(victim, obj); return; } else if (critical == 12) { if (IS_ARM_L(victim, LOST_ARM)) return; if (IS_ARM_L(victim, LOST_HAND)) return; if (IS_ARM_L(victim, LOST_THUMB) && IS_ARM_L(victim, LOST_FINGER_I) && IS_ARM_L(victim, LOST_FINGER_M) && IS_ARM_L(victim, LOST_FINGER_R) && IS_ARM_L(victim, LOST_FINGER_L)) return; if ((damaged = get_eq_char(victim, WEAR_HANDS)) != NULL && damaged->toughness > 0) { act("$p prevent you from loosing some fingers from your left hand.", victim, damaged, NULL, TO_CHAR); act("$p prevent $n from loosing some fingers from $s left hand.", victim, damaged, NULL, TO_ROOM); if (dam - damaged->toughness < 0) return; if ((dam - damaged->toughness > damaged->resistance)) damaged->condition -= damaged->resistance; else damaged->condition -= (dam - damaged->toughness); if (damaged->condition < 1) { act("$p fall broken to the ground.", ch, damaged, NULL, TO_CHAR); act("$p fall broken to the ground.", ch, damaged, NULL, TO_ROOM); obj_from_char(damaged); extract_obj(damaged); } return; } /* * Stone skin will prevent any damage done to arms/legs. */ if (is_affected(victim, skill_lookup("stone skin"))) return; count = 0; count2 = 0; if (!IS_ARM_L(victim, LOST_THUMB) && number_percent() < 25) { SET_BIT(victim->loc_hp[2], LOST_THUMB); count2 += 1; make_part(victim, "thumb"); } if (!IS_ARM_L(victim, LOST_FINGER_I) && number_percent() < 25) { SET_BIT(victim->loc_hp[2], LOST_FINGER_I); count += 1; make_part(victim, "index"); } if (!IS_ARM_L(victim, LOST_FINGER_M) && number_percent() < 25) { SET_BIT(victim->loc_hp[2], LOST_FINGER_M); count += 1; make_part(victim, "middle"); } if (!IS_ARM_L(victim, LOST_FINGER_R) && number_percent() < 25) { SET_BIT(victim->loc_hp[2], LOST_FINGER_R); count += 1; make_part(victim, "ring"); if ((obj = get_eq_char(victim, WEAR_FINGER_L)) != NULL) take_item(victim, obj); } if (!IS_ARM_L(victim, LOST_FINGER_L) && number_percent() < 25) { SET_BIT(victim->loc_hp[2], LOST_FINGER_L); count += 1; make_part(victim, "little"); } if (count == 1) sprintf(buf2, "finger"); else sprintf(buf2, "fingers"); if (count > 0 && count2 > 0) { sprintf(buf, "Your skillful blow cuts off %d %s and the thumb from $N's left hand.", count, buf2); act(buf, ch, NULL, victim, TO_CHAR); sprintf(buf, "$n's skillful blow cuts off %d %s and the thumb from $N's left hand.", count, buf2); act(buf, ch, NULL, victim, TO_NOTVICT); sprintf(buf, "$n's skillful blow cuts off %d %s and the thumb from your left hand.", count, buf2); act(buf, ch, NULL, victim, TO_VICT); if ((obj = get_eq_char(victim, WEAR_HOLD)) != NULL) take_item(victim, obj); return; } else if (count > 0) { sprintf(buf, "Your skillful blow cuts off %d %s from $N's left hand.", count, buf2); act(buf, ch, NULL, victim, TO_CHAR); sprintf(buf, "$n's skillful blow cuts off %d %s from $N's left hand.", count, buf2); act(buf, ch, NULL, victim, TO_NOTVICT); sprintf(buf, "$n's skillful blow cuts off %d %s from your left hand.", count, buf2); act(buf, ch, NULL, victim, TO_VICT); if ((obj = get_eq_char(victim, WEAR_HOLD)) != NULL) take_item(victim, obj); return; } else if (count2 > 0) { sprintf(buf, "Your skillful blow cuts off the thumb from $N's left hand."); act(buf, ch, NULL, victim, TO_CHAR); sprintf(buf, "$n's skillful blow cuts off the thumb from $N's left hand."); act(buf, ch, NULL, victim, TO_NOTVICT); sprintf(buf, "$n's skillful blow cuts off the thumb from your left hand."); act(buf, ch, NULL, victim, TO_VICT); if ((obj = get_eq_char(victim, WEAR_HOLD)) != NULL) take_item(victim, obj); return; } return; } else if (critical == 13) { if (IS_ARM_L(victim, LOST_ARM)) return; if (IS_ARM_L(victim, LOST_HAND)) return; if ((IS_ARM_L(victim, LOST_THUMB) || IS_ARM_L(victim, BROKEN_THUMB)) && (IS_ARM_L(victim, LOST_FINGER_I) || IS_ARM_L(victim, BROKEN_FINGER_I)) && (IS_ARM_L(victim, LOST_FINGER_M) || IS_ARM_L(victim, BROKEN_FINGER_M)) && (IS_ARM_L(victim, LOST_FINGER_R) || IS_ARM_L(victim, BROKEN_FINGER_R)) && (IS_ARM_L(victim, LOST_FINGER_L) || IS_ARM_L(victim, BROKEN_FINGER_L))) return; if ((damaged = get_eq_char(victim, WEAR_HANDS)) != NULL && damaged->toughness > 0) { act("$p prevent you from breaking some fingers on your left hand.", victim, damaged, NULL, TO_CHAR); act("$p prevent $n from breaking some fingers on $s left hand.", victim, damaged, NULL, TO_ROOM); if (dam - damaged->toughness < 0) return; if ((dam - damaged->toughness > damaged->resistance)) damaged->condition -= damaged->resistance; else damaged->condition -= (dam - damaged->toughness); if (damaged->condition < 1) { act("$p fall broken to the ground.", ch, damaged, NULL, TO_CHAR); act("$p fall broken to the ground.", ch, damaged, NULL, TO_ROOM); obj_from_char(damaged); extract_obj(damaged); } return; } /* * Stone skin will prevent any damage done to arms/legs. */ if (is_affected(victim, skill_lookup("stone skin"))) return; count = 0; count2 = 0; if (IS_ARM_L(victim, LOST_ARM)) return; if (IS_ARM_L(victim, LOST_HAND)) return; if (!IS_ARM_L(victim, BROKEN_THUMB) && !IS_ARM_L(victim, LOST_THUMB) && number_percent() < 25) { SET_BIT(victim->loc_hp[2], BROKEN_THUMB); count2 += 1; } if (!IS_ARM_L(victim, BROKEN_FINGER_I) && !IS_ARM_L(victim, LOST_FINGER_I) && number_percent() < 25) { SET_BIT(victim->loc_hp[2], BROKEN_FINGER_I); count += 1; } if (!IS_ARM_L(victim, BROKEN_FINGER_M) && !IS_ARM_L(victim, LOST_FINGER_M) && number_percent() < 25) { SET_BIT(victim->loc_hp[2], BROKEN_FINGER_M); count += 1; } if (!IS_ARM_L(victim, BROKEN_FINGER_R) && !IS_ARM_L(victim, LOST_FINGER_R) && number_percent() < 25) { SET_BIT(victim->loc_hp[2], BROKEN_FINGER_R); count += 1; } if (!IS_ARM_L(victim, BROKEN_FINGER_L) && !IS_ARM_L(victim, LOST_FINGER_L) && number_percent() < 25) { SET_BIT(victim->loc_hp[2], BROKEN_FINGER_L); count += 1; } if (count == 1) sprintf(buf2, "finger"); else sprintf(buf2, "fingers"); if (count > 0 && count2 > 0) { sprintf(buf, "Your skillful breaks %d %s and the thumb on $N's left hand.", count, buf2); act(buf, ch, NULL, victim, TO_CHAR); sprintf(buf, "$n's skillful blow breaks %d %s and the thumb on $N's left hand.", count, buf2); act(buf, ch, NULL, victim, TO_NOTVICT); sprintf(buf, "$n's skillful blow breaks %d %s and the thumb on your left hand.", count, buf2); act(buf, ch, NULL, victim, TO_VICT); if ((obj = get_eq_char(victim, WEAR_HOLD)) != NULL) take_item(victim, obj); return; } else if (count > 0) { sprintf(buf, "Your skillful blow breaks %d %s on $N's left hand.", count, buf2); act(buf, ch, NULL, victim, TO_CHAR); sprintf(buf, "$n's skillful blow breaks %d %s on $N's left hand.", count, buf2); act(buf, ch, NULL, victim, TO_NOTVICT); sprintf(buf, "$n's skillful blow breaks %d %s on your left hand.", count, buf2); act(buf, ch, NULL, victim, TO_VICT); if ((obj = get_eq_char(victim, WEAR_HOLD)) != NULL) take_item(victim, obj); return; } else if (count2 > 0) { sprintf(buf, "Your skillful blow breaks the thumb on $N's left hand."); act(buf, ch, NULL, victim, TO_CHAR); sprintf(buf, "$n's skillful blow breaks the thumb on $N's left hand."); act(buf, ch, NULL, victim, TO_NOTVICT); sprintf(buf, "$n's skillful blow breaks the thumb on your left hand."); act(buf, ch, NULL, victim, TO_VICT); if ((obj = get_eq_char(victim, WEAR_HOLD)) != NULL) take_item(victim, obj); return; } return; } else if (critical == 14) { if (IS_ARM_R(victim, LOST_ARM)) return; if (IS_ARM_R(victim, LOST_HAND)) return; if (IS_ARM_R(victim, LOST_THUMB) && IS_ARM_R(victim, LOST_FINGER_I) && IS_ARM_R(victim, LOST_FINGER_M) && IS_ARM_R(victim, LOST_FINGER_R) && IS_ARM_R(victim, LOST_FINGER_L)) return; if ((damaged = get_eq_char(victim, WEAR_HANDS)) != NULL && damaged->toughness > 0) { act("$p prevent you from loosing some fingers from your right hand.", victim, damaged, NULL, TO_CHAR); act("$p prevent $n from loosing some fingers from $s right hand.", victim, damaged, NULL, TO_ROOM); if (dam - damaged->toughness < 0) return; if ((dam - damaged->toughness > damaged->resistance)) damaged->condition -= damaged->resistance; else damaged->condition -= (dam - damaged->toughness); if (damaged->condition < 1) { act("$p fall broken to the ground.", ch, damaged, NULL, TO_CHAR); act("$p fall broken to the ground.", ch, damaged, NULL, TO_ROOM); obj_from_char(damaged); extract_obj(damaged); } return; } /* * Stone skin will prevent any damage done to arms/legs. */ if (is_affected(victim, skill_lookup("stone skin"))) return; count = 0; count2 = 0; if (IS_ARM_R(victim, LOST_ARM)) return; if (IS_ARM_R(victim, LOST_HAND)) return; if (!IS_ARM_R(victim, LOST_THUMB) && number_percent() < 25) { SET_BIT(victim->loc_hp[3], LOST_THUMB); count2 += 1; make_part(victim, "thumb"); } if (!IS_ARM_R(victim, LOST_FINGER_I) && number_percent() < 25) { SET_BIT(victim->loc_hp[3], LOST_FINGER_I); count += 1; make_part(victim, "index"); } if (!IS_ARM_R(victim, LOST_FINGER_M) && number_percent() < 25) { SET_BIT(victim->loc_hp[3], LOST_FINGER_M); count += 1; make_part(victim, "middle"); } if (!IS_ARM_R(victim, LOST_FINGER_R) && number_percent() < 25) { SET_BIT(victim->loc_hp[3], LOST_FINGER_R); count += 1; make_part(victim, "ring"); if ((obj = get_eq_char(victim, WEAR_FINGER_R)) != NULL) take_item(victim, obj); } if (!IS_ARM_R(victim, LOST_FINGER_L) && number_percent() < 25) { SET_BIT(victim->loc_hp[3], LOST_FINGER_L); count += 1; make_part(victim, "little"); } if (count == 1) sprintf(buf2, "finger"); else sprintf(buf2, "fingers"); if (count > 0 && count2 > 0) { sprintf(buf, "Your skillful blow cuts off %d %s and the thumb from $N's right hand.", count, buf2); act(buf, ch, NULL, victim, TO_CHAR); sprintf(buf, "$n's skillful blow cuts off %d %s and the thumb from $N's right hand.", count, buf2); act(buf, ch, NULL, victim, TO_NOTVICT); sprintf(buf, "$n's skillful blow cuts off %d %s and the thumb from your right hand.", count, buf2); act(buf, ch, NULL, victim, TO_VICT); if ((obj = get_eq_char(victim, WEAR_WIELD)) != NULL) take_item(victim, obj); return; } else if (count > 0) { sprintf(buf, "Your skillful blow cuts off %d %s from $N's right hand.", count, buf2); act(buf, ch, NULL, victim, TO_CHAR); sprintf(buf, "$n's skillful blow cuts off %d %s from $N's right hand.", count, buf2); act(buf, ch, NULL, victim, TO_NOTVICT); sprintf(buf, "$n's skillful blow cuts off %d %s from your right hand.", count, buf2); act(buf, ch, NULL, victim, TO_VICT); if ((obj = get_eq_char(victim, WEAR_WIELD)) != NULL) take_item(victim, obj); return; } else if (count2 > 0) { sprintf(buf, "Your skillful blow cuts off the thumb from $N's right hand."); act(buf, ch, NULL, victim, TO_CHAR); sprintf(buf, "$n's skillful blow cuts off the thumb from $N's right hand."); act(buf, ch, NULL, victim, TO_NOTVICT); sprintf(buf, "$n's skillful blow cuts off the thumb from your right hand."); act(buf, ch, NULL, victim, TO_VICT); if ((obj = get_eq_char(victim, WEAR_WIELD)) != NULL) take_item(victim, obj); return; } return; } else if (critical == 15) { if (IS_ARM_R(victim, LOST_ARM)) return; if (IS_ARM_R(victim, LOST_HAND)) return; if ((IS_ARM_R(victim, LOST_THUMB) || IS_ARM_R(victim, BROKEN_THUMB)) && (IS_ARM_R(victim, LOST_FINGER_I) || IS_ARM_R(victim, BROKEN_FINGER_I)) && (IS_ARM_R(victim, LOST_FINGER_M) || IS_ARM_R(victim, BROKEN_FINGER_M)) && (IS_ARM_R(victim, LOST_FINGER_R) || IS_ARM_R(victim, BROKEN_FINGER_R)) && (IS_ARM_R(victim, LOST_FINGER_L) || IS_ARM_R(victim, BROKEN_FINGER_L))) return; if ((damaged = get_eq_char(victim, WEAR_HANDS)) != NULL && damaged->toughness > 0) { act("$p prevent you from breaking some fingers on your right hand.", victim, damaged, NULL, TO_CHAR); act("$p prevent $n from breaking some fingers on $s right hand.", victim, damaged, NULL, TO_ROOM); if (dam - damaged->toughness < 0) return; if ((dam - damaged->toughness > damaged->resistance)) damaged->condition -= damaged->resistance; else damaged->condition -= (dam - damaged->toughness); if (damaged->condition < 1) { act("$p fall broken to the ground.", ch, damaged, NULL, TO_CHAR); act("$p fall broken to the ground.", ch, damaged, NULL, TO_ROOM); obj_from_char(damaged); extract_obj(damaged); } return; } /* * Stone skin will prevent any damage done to arms legs. */ if (is_affected(victim, skill_lookup("stone skin"))) return; count = 0; count2 = 0; if (IS_ARM_R(victim, LOST_ARM)) return; if (IS_ARM_R(victim, LOST_HAND)) return; if (!IS_ARM_R(victim, BROKEN_THUMB) && !IS_ARM_R(victim, LOST_THUMB) && number_percent() < 25) { SET_BIT(victim->loc_hp[3], BROKEN_THUMB); count2 += 1; } if (!IS_ARM_R(victim, BROKEN_FINGER_I) && !IS_ARM_R(victim, LOST_FINGER_I) && number_percent() < 25) { SET_BIT(victim->loc_hp[3], BROKEN_FINGER_I); count += 1; } if (!IS_ARM_R(victim, BROKEN_FINGER_M) && !IS_ARM_R(victim, LOST_FINGER_M) && number_percent() < 25) { SET_BIT(victim->loc_hp[3], BROKEN_FINGER_M); count += 1; } if (!IS_ARM_R(victim, BROKEN_FINGER_R) && !IS_ARM_R(victim, LOST_FINGER_R) && number_percent() < 25) { SET_BIT(victim->loc_hp[3], BROKEN_FINGER_R); count += 1; } if (!IS_ARM_R(victim, BROKEN_FINGER_L) && !IS_ARM_R(victim, LOST_FINGER_L) && number_percent() < 25) { SET_BIT(victim->loc_hp[3], BROKEN_FINGER_L); count += 1; } if (count == 1) sprintf(buf2, "finger"); else sprintf(buf2, "fingers"); if (count > 0 && count2 > 0) { sprintf(buf, "Your skillful breaks %d %s and the thumb on $N's right hand.", count, buf2); act(buf, ch, NULL, victim, TO_CHAR); sprintf(buf, "$n's skillful blow breaks %d %s and the thumb on $N's right hand.", count, buf2); act(buf, ch, NULL, victim, TO_NOTVICT); sprintf(buf, "$n's skillful blow breaks %d %s and the thumb on your right hand.", count, buf2); act(buf, ch, NULL, victim, TO_VICT); if ((obj = get_eq_char(victim, WEAR_WIELD)) != NULL) take_item(victim, obj); return; } else if (count > 0) { sprintf(buf, "Your skillful blow breaks %d %s on $N's right hand.", count, buf2); act(buf, ch, NULL, victim, TO_CHAR); sprintf(buf, "$n's skillful blow breaks %d %s on $N's right hand.", count, buf2); act(buf, ch, NULL, victim, TO_NOTVICT); sprintf(buf, "$n's skillful blow breaks %d %s on your right hand.", count, buf2); act(buf, ch, NULL, victim, TO_VICT); if ((obj = get_eq_char(victim, WEAR_WIELD)) != NULL) take_item(victim, obj); return; } else if (count2 > 0) { sprintf(buf, "Your skillful blow breaks the thumb on $N's right hand."); act(buf, ch, NULL, victim, TO_CHAR); sprintf(buf, "$n's skillful blow breaks the thumb on $N's right hand."); act(buf, ch, NULL, victim, TO_NOTVICT); sprintf(buf, "$n's skillful blow breaks the thumb on your right hand."); act(buf, ch, NULL, victim, TO_VICT); if ((obj = get_eq_char(victim, WEAR_WIELD)) != NULL) take_item(victim, obj); return; } return; } else if (critical == 16) { if (IS_LEG_L(victim, LOST_LEG)) return; if ((damaged = get_eq_char(victim, WEAR_LEGS)) != NULL && damaged->toughness > 0) { act("$p prevent you from loosing your left leg.", victim, damaged, NULL, TO_CHAR); act("$p prevent $n from loosing $s left leg.", victim, damaged, NULL, TO_ROOM); if (dam - damaged->toughness < 0) return; if ((dam - damaged->toughness > damaged->resistance)) damaged->condition -= damaged->resistance; else damaged->condition -= (dam - damaged->toughness); if (damaged->condition < 1) { act("$p fall broken to the ground.", ch, damaged, NULL, TO_CHAR); act("$p fall broken to the ground.", ch, damaged, NULL, TO_ROOM); obj_from_char(damaged); extract_obj(damaged); } return; } /* * Stone skin will prevent any damage done to arms/legs. */ if (is_affected(victim, skill_lookup("stone skin"))) return; if (!IS_LEG_L(victim, LOST_LEG)) SET_BIT(victim->loc_hp[4], LOST_LEG); else return; if (!IS_BLEEDING(victim, BLEEDING_LEG_L)) SET_BIT(victim->loc_hp[6], BLEEDING_LEG_L); if (IS_BLEEDING(victim, BLEEDING_FOOT_L)) REMOVE_BIT(victim->loc_hp[6], BLEEDING_FOOT_L); act("Your skillful blow cuts off $N's left leg!", ch, NULL, victim, TO_CHAR); act("$n's skillful blow cuts off $N's left leg!", ch, NULL, victim, TO_NOTVICT); act("$n's skillful blow cuts off your left leg!", ch, NULL, victim, TO_VICT); make_part(victim, "leg"); if (IS_LEG_L(victim, LOST_LEG) && IS_LEG_R(victim, LOST_LEG)) { if ((obj = get_eq_char(victim, WEAR_LEGS)) != NULL) take_item(victim, obj); } if ((obj = get_eq_char(victim, WEAR_FEET)) != NULL) take_item(victim, obj); return; } else if (critical == 17) { if (IS_LEG_R(victim, LOST_LEG)) return; if ((damaged = get_eq_char(victim, WEAR_LEGS)) != NULL && damaged->toughness > 0) { act("$p prevent you from loosing your right leg.", victim, damaged, NULL, TO_CHAR); act("$p prevent $n from loosing $s right leg.", victim, damaged, NULL, TO_ROOM); if (dam - damaged->toughness < 0) return; if ((dam - damaged->toughness > damaged->resistance)) damaged->condition -= damaged->resistance; else damaged->condition -= (dam - damaged->toughness); if (damaged->condition < 1) { act("$p fall broken to the ground.", ch, damaged, NULL, TO_CHAR); act("$p fall broken to the ground.", ch, damaged, NULL, TO_ROOM); obj_from_char(damaged); extract_obj(damaged); } return; } /* * Stone skin will prevent any damage done to arms/legs. */ if (is_affected(victim, skill_lookup("stone skin"))) return; if (!IS_LEG_R(victim, LOST_LEG)) SET_BIT(victim->loc_hp[5], LOST_LEG); else return; if (!IS_BLEEDING(victim, BLEEDING_LEG_R)) SET_BIT(victim->loc_hp[6], BLEEDING_LEG_R); if (IS_BLEEDING(victim, BLEEDING_FOOT_R)) REMOVE_BIT(victim->loc_hp[6], BLEEDING_FOOT_R); act("Your skillful blow cuts off $N's right leg!", ch, NULL, victim, TO_CHAR); act("$n's skillful blow cuts off $N's right leg!", ch, NULL, victim, TO_NOTVICT); act("$n's skillful blow cuts off your right leg!", ch, NULL, victim, TO_VICT); make_part(victim, "leg"); if (IS_LEG_L(victim, LOST_LEG) && IS_LEG_R(victim, LOST_LEG)) { if ((obj = get_eq_char(victim, WEAR_LEGS)) != NULL) take_item(victim, obj); } if ((obj = get_eq_char(victim, WEAR_FEET)) != NULL) take_item(victim, obj); return; } else if (critical == 18) { if (IS_LEG_L(victim, BROKEN_LEG) || IS_LEG_L(victim, LOST_LEG)) return; if ((damaged = get_eq_char(victim, WEAR_LEGS)) != NULL && damaged->toughness > 0) { act("$p prevent you from breaking your left leg.", victim, damaged, NULL, TO_CHAR); act("$p prevent $n from breaking $s left leg.", victim, damaged, NULL, TO_ROOM); if (dam - damaged->toughness < 0) return; if ((dam - damaged->toughness > damaged->resistance)) damaged->condition -= damaged->resistance; else damaged->condition -= (dam - damaged->toughness); if (damaged->condition < 1) { act("$p fall broken to the ground.", ch, damaged, NULL, TO_CHAR); act("$p fall broken to the ground.", ch, damaged, NULL, TO_ROOM); obj_from_char(damaged); extract_obj(damaged); } return; } /* * Stone skin will prevent any damage done to arms/legs. */ if (is_affected(victim, skill_lookup("stone skin"))) return; if (!IS_LEG_L(victim, BROKEN_LEG) && !IS_LEG_L(victim, LOST_LEG)) SET_BIT(victim->loc_hp[4], BROKEN_LEG); else return; act("Your skillful blow breaks $N's left leg!", ch, NULL, victim, TO_CHAR); act("$n's skillful blow breaks $N's left leg!", ch, NULL, victim, TO_NOTVICT); act("$n's skillful blow breaks your left leg!", ch, NULL, victim, TO_VICT); return; } else if (critical == 19) { if (IS_LEG_R(victim, BROKEN_LEG) || IS_LEG_R(victim, LOST_LEG)) return; if ((damaged = get_eq_char(victim, WEAR_LEGS)) != NULL && damaged->toughness > 0) { act("$p prevent you from breaking your right leg.", victim, damaged, NULL, TO_CHAR); act("$p prevent $n from breaking $s right leg.", victim, damaged, NULL, TO_ROOM); if (dam - damaged->toughness < 0) return; if ((dam - damaged->toughness > damaged->resistance)) damaged->condition -= damaged->resistance; else damaged->condition -= (dam - damaged->toughness); if (damaged->condition < 1) { act("$p fall broken to the ground.", ch, damaged, NULL, TO_CHAR); act("$p fall broken to the ground.", ch, damaged, NULL, TO_ROOM); obj_from_char(damaged); extract_obj(damaged); } return; } /* * Stone skin will prevent any damage done to arms/legs. */ if (is_affected(victim, skill_lookup("stone skin"))) return; if (!IS_LEG_R(victim, BROKEN_LEG) && !IS_LEG_R(victim, LOST_LEG)) SET_BIT(victim->loc_hp[5], BROKEN_LEG); else return; act("Your skillful blow breaks $N's right leg!", ch, NULL, victim, TO_CHAR); act("$n's skillful blow breaks $N's right leg!", ch, NULL, victim, TO_NOTVICT); act("$n's skillful blow breaks your right leg!", ch, NULL, victim, TO_VICT); return; } else if (critical == 20) { if (IS_LEG_L(victim, LOST_LEG) || IS_LEG_L(victim, LOST_FOOT)) return; if ((damaged = get_eq_char(victim, WEAR_FEET)) != NULL && damaged->toughness > 0) { act("$p prevent you from loosing your left foot.", victim, damaged, NULL, TO_CHAR); act("$p prevent $n from loosing $s left foot.", victim, damaged, NULL, TO_ROOM); if (dam - damaged->toughness < 0) return; if ((dam - damaged->toughness > damaged->resistance)) damaged->condition -= damaged->resistance; else damaged->condition -= (dam - damaged->toughness); if (damaged->condition < 1) { act("$p fall broken to the ground.", ch, damaged, NULL, TO_CHAR); act("$p fall broken to the ground.", ch, damaged, NULL, TO_ROOM); obj_from_char(damaged); extract_obj(damaged); } return; } /* * Stone skin will prevent any damage done to arms/legs. */ if (is_affected(victim, skill_lookup("stone skin"))) return; if (!IS_LEG_L(victim, LOST_LEG) && !IS_LEG_L(victim, LOST_FOOT)) SET_BIT(victim->loc_hp[4], LOST_FOOT); else return; if (IS_BLEEDING(victim, BLEEDING_LEG_L)) REMOVE_BIT(victim->loc_hp[6], BLEEDING_LEG_L); if (!IS_BLEEDING(victim, BLEEDING_FOOT_L)) SET_BIT(victim->loc_hp[6], BLEEDING_FOOT_L); act("Your skillful blow cuts off $N's left foot!", ch, NULL, victim, TO_CHAR); act("$n's skillful blow cuts off $N's left foot!", ch, NULL, victim, TO_NOTVICT); act("$n's skillful blow cuts off your left foot!", ch, NULL, victim, TO_VICT); make_part(victim, "foot"); if ((obj = get_eq_char(victim, WEAR_FEET)) != NULL) take_item(victim, obj); return; } else if (critical == 21) { if (IS_LEG_R(victim, LOST_LEG) || IS_LEG_R(victim, LOST_FOOT)) return; if ((damaged = get_eq_char(victim, WEAR_FEET)) != NULL && damaged->toughness > 0) { act("$p prevent you from loosing your right foot.", victim, damaged, NULL, TO_CHAR); act("$p prevent $n from loosing $s right foot.", victim, damaged, NULL, TO_ROOM); if (dam - damaged->toughness < 0) return; if ((dam - damaged->toughness > damaged->resistance)) damaged->condition -= damaged->resistance; else damaged->condition -= (dam - damaged->toughness); if (damaged->condition < 1) { act("$p fall broken to the ground.", ch, damaged, NULL, TO_CHAR); act("$p fall broken to the ground.", ch, damaged, NULL, TO_ROOM); obj_from_char(damaged); extract_obj(damaged); } return; } /* * Stone skin will prevent any damage done to arms/legs. */ if (is_affected(victim, skill_lookup("stone skin"))) return; if (!IS_LEG_R(victim, LOST_LEG) && !IS_LEG_R(victim, LOST_FOOT)) SET_BIT(victim->loc_hp[5], LOST_FOOT); else return; if (IS_BLEEDING(victim, BLEEDING_LEG_R)) REMOVE_BIT(victim->loc_hp[6], BLEEDING_LEG_R); if (!IS_BLEEDING(victim, BLEEDING_FOOT_R)) SET_BIT(victim->loc_hp[6], BLEEDING_FOOT_R); act("Your skillful blow cuts off $N's right foot!", ch, NULL, victim, TO_CHAR); act("$n's skillful blow cuts off $N's right foot!", ch, NULL, victim, TO_NOTVICT); act("$n's skillful blow cuts off your right foot!", ch, NULL, victim, TO_VICT); make_part(victim, "foot"); if ((obj = get_eq_char(victim, WEAR_FEET)) != NULL) take_item(victim, obj); return; } else if (critical == 22) { int bodyloc = 0; int broken = number_range(1, 3); if (IS_BODY(victim, BROKEN_RIBS_1)) bodyloc += 1; if (IS_BODY(victim, BROKEN_RIBS_2)) bodyloc += 2; if (IS_BODY(victim, BROKEN_RIBS_4)) bodyloc += 4; if (IS_BODY(victim, BROKEN_RIBS_8)) bodyloc += 8; if (IS_BODY(victim, BROKEN_RIBS_16)) bodyloc += 16; if (bodyloc >= 24) return; if ((damaged = get_eq_char(victim, WEAR_BODY)) != NULL && damaged->toughness > 0) { act("$p prevents you from breaking some ribs.", victim, damaged, NULL, TO_CHAR); act("$p prevents $n from breaking some ribs.", victim, damaged, NULL, TO_ROOM); if (dam - damaged->toughness < 0) return; if ((dam - damaged->toughness > damaged->resistance)) damaged->condition -= damaged->resistance; else damaged->condition -= (dam - damaged->toughness); if (damaged->condition < 1) { act("$p fall broken to the ground.", ch, damaged, NULL, TO_CHAR); act("$p fall broken to the ground.", ch, damaged, NULL, TO_ROOM); obj_from_char(damaged); extract_obj(damaged); } return; } /* * Stone skin will prevent any damage done to arms/legs. */ if (is_affected(victim, skill_lookup("stone skin"))) return; if (IS_BODY(victim, BROKEN_RIBS_1)) REMOVE_BIT(victim->loc_hp[1], BROKEN_RIBS_1); if (IS_BODY(victim, BROKEN_RIBS_2)) REMOVE_BIT(victim->loc_hp[1], BROKEN_RIBS_2); if (IS_BODY(victim, BROKEN_RIBS_4)) REMOVE_BIT(victim->loc_hp[1], BROKEN_RIBS_4); if (IS_BODY(victim, BROKEN_RIBS_8)) REMOVE_BIT(victim->loc_hp[1], BROKEN_RIBS_8); if (IS_BODY(victim, BROKEN_RIBS_16)) REMOVE_BIT(victim->loc_hp[1], BROKEN_RIBS_16); if (bodyloc + broken > 24) broken -= 1; if (bodyloc + broken > 24) broken -= 1; bodyloc += broken; if (bodyloc >= 16) { bodyloc -= 16; SET_BIT(victim->loc_hp[1], BROKEN_RIBS_16); } if (bodyloc >= 8) { bodyloc -= 8; SET_BIT(victim->loc_hp[1], BROKEN_RIBS_8); } if (bodyloc >= 4) { bodyloc -= 4; SET_BIT(victim->loc_hp[1], BROKEN_RIBS_4); } if (bodyloc >= 2) { bodyloc -= 2; SET_BIT(victim->loc_hp[1], BROKEN_RIBS_2); } if (bodyloc >= 1) { bodyloc -= 1; SET_BIT(victim->loc_hp[1], BROKEN_RIBS_1); } sprintf(buf, "Your skillful blow breaks %d of $N's ribs!", broken); act(buf, ch, NULL, victim, TO_CHAR); sprintf(buf, "$n's skillful blow breaks %d of $N's ribs!", broken); act(buf, ch, NULL, victim, TO_NOTVICT); sprintf(buf, "$n's skillful blow breaks %d of your ribs!", broken); act(buf, ch, NULL, victim, TO_VICT); return; } else if (critical == 23) { int bodyloc = 0; int broken = number_range(1, 3); if (IS_HEAD(victim, LOST_TOOTH_1)) bodyloc += 1; if (IS_HEAD(victim, LOST_TOOTH_2)) bodyloc += 2; if (IS_HEAD(victim, LOST_TOOTH_4)) bodyloc += 4; if (IS_HEAD(victim, LOST_TOOTH_8)) bodyloc += 8; if (IS_HEAD(victim, LOST_TOOTH_16)) bodyloc += 16; if (bodyloc >= 28) return; if ((damaged = get_eq_char(victim, WEAR_EYES)) != NULL && damaged->toughness > 0) { act("$p prevents you from loosing some teeth.", victim, damaged, NULL, TO_CHAR); act("$p prevents $n from loosing some teeth.", victim, damaged, NULL, TO_ROOM); if (dam - damaged->toughness < 0) return; if ((dam - damaged->toughness > damaged->resistance)) damaged->condition -= damaged->resistance; else damaged->condition -= (dam - damaged->toughness); if (damaged->condition < 1) { act("$p fall broken to the ground.", ch, damaged, NULL, TO_CHAR); act("$p fall broken to the ground.", ch, damaged, NULL, TO_ROOM); obj_from_char(damaged); extract_obj(damaged); } return; } /* * Stone skin will prevent any damage done to arms/legs. */ if (is_affected(victim, skill_lookup("stone skin"))) return; if (IS_HEAD(victim, LOST_TOOTH_1)) REMOVE_BIT(victim->loc_hp[LOC_HEAD], LOST_TOOTH_1); if (IS_HEAD(victim, LOST_TOOTH_2)) REMOVE_BIT(victim->loc_hp[LOC_HEAD], LOST_TOOTH_2); if (IS_HEAD(victim, LOST_TOOTH_4)) REMOVE_BIT(victim->loc_hp[LOC_HEAD], LOST_TOOTH_4); if (IS_HEAD(victim, LOST_TOOTH_8)) REMOVE_BIT(victim->loc_hp[LOC_HEAD], LOST_TOOTH_8); if (IS_HEAD(victim, LOST_TOOTH_16)) REMOVE_BIT(victim->loc_hp[LOC_HEAD], LOST_TOOTH_16); if (bodyloc + broken > 28) broken -= 1; if (bodyloc + broken > 28) broken -= 1; bodyloc += broken; if (bodyloc >= 16) { bodyloc -= 16; SET_BIT(victim->loc_hp[LOC_HEAD], LOST_TOOTH_16); } if (bodyloc >= 8) { bodyloc -= 8; SET_BIT(victim->loc_hp[LOC_HEAD], LOST_TOOTH_8); } if (bodyloc >= 4) { bodyloc -= 4; SET_BIT(victim->loc_hp[LOC_HEAD], LOST_TOOTH_4); } if (bodyloc >= 2) { bodyloc -= 2; SET_BIT(victim->loc_hp[LOC_HEAD], LOST_TOOTH_2); } if (bodyloc >= 1) { bodyloc -= 1; SET_BIT(victim->loc_hp[LOC_HEAD], LOST_TOOTH_1); } sprintf(buf, "Your skillful blow knocks out %d of $N's teeth!", broken); act(buf, ch, NULL, victim, TO_CHAR); sprintf(buf, "$n's skillful blow knocks out %d of $N's teeth!", broken); act(buf, ch, NULL, victim, TO_NOTVICT); sprintf(buf, "$n's skillful blow knocks out %d of your teeth!", broken); act(buf, ch, NULL, victim, TO_VICT); if (broken >= 1) make_part(victim, "tooth"); if (broken >= 2) make_part(victim, "tooth"); if (broken >= 3) make_part(victim, "tooth"); return; } return; }