#include <sys/types.h> #include <stdio.h> #include <string.h> #include <time.h> #include "merc.h" #include "interp.h" /* * bow_and_arrow() * * A replacement for one_hit if the player is using a bow */ void bow_and_arrow(CHAR_DATA * ch, CHAR_DATA * victim) { OBJ_DATA * bow; OBJ_DATA * arrow; //int victim_ac; int dam_type; //int sn = -1; if (victim == ch || ch == NULL || victim == NULL) return; /* Determine what were dealing with */ bow = get_eq_char (ch, WEAR_WIELD); arrow = get_eq_char (ch, WEAR_HOLD); /* Find damage type */ dam_type = attack_table[arrow->value[2]].damage; /* Cant see, cant hit */ if (!can_see (ch, victim)) return; } /* * critical_hit() * * Calculates the exact damage increase for critical hits */ int critical_hit(CHAR_DATA * ch, CHAR_DATA * victim, int dam) { int final = dam; int multi = (ch->level - 5) / 20; if (number_range(1, 100) >= 95) { final = final * multi; act("{5$n hits you with a critical hit!{x", ch,NULL,victim,TO_VICT); act("{5You hit $N with a critical hit!{x", ch,NULL,victim,TO_CHAR); } return final; } /* * vital_point() * * Finds a vital point of the victim and deals max damage * * TODO:Fix up message to show body hit */ int vital_point(CHAR_DATA * ch, CHAR_DATA * victim, int dam) { int final = dam; bool do_it = FALSE; int multi = 0; int tmp; if (number_range(1, 100) >= 50) { switch(number_range(1, 100)) { default: break; case WEAR_FINGER_L: if ( (get_eq_char (ch, WEAR_FINGER_L) != NULL)) { multi = 3; do_it = TRUE; } break; case WEAR_FINGER_R: if ( (get_eq_char (ch, WEAR_FINGER_R) != NULL)) { multi = 3; do_it = TRUE; } break; case WEAR_HEAD: if ( (get_eq_char (ch, WEAR_HEAD) != NULL)) { multi = 5; do_it = TRUE; } break; case WEAR_BODY: if ( (get_eq_char (ch, WEAR_BODY) != NULL)) { multi = 1.5; do_it = TRUE; } break; case WEAR_LEGS: if ( (get_eq_char (ch, WEAR_LEGS) != NULL)) { multi = 1.33; do_it = TRUE; } break; case WEAR_FEET_L: if ( (get_eq_char (ch, WEAR_FEET_L) != NULL)) { multi = 1.5; do_it = TRUE; } break; case WEAR_FEET_R: if ( (get_eq_char (ch, WEAR_FEET_R) != NULL)) { multi = 1.5; do_it = TRUE; } break; case WEAR_HANDS_L: if ( (get_eq_char (ch, WEAR_HANDS_L) != NULL)) { check_thief_disarm(ch, victim); multi = 2; do_it = TRUE; } break; case WEAR_HANDS_R: if ( (get_eq_char (ch, WEAR_HANDS_R) != NULL)) { check_thief_disarm(ch, victim); multi = 2; do_it = TRUE; } break; case WEAR_ARMS_L: if ( (get_eq_char (ch, WEAR_ARMS_L) != NULL)) { multi = 1.75; do_it = TRUE; } break; case WEAR_ARMS_R: if ( (get_eq_char (ch, WEAR_ARMS_R) != NULL)) { multi = 1.75; do_it = TRUE; } break; case WEAR_WAIST: if ( (get_eq_char (ch, WEAR_WAIST) != NULL)) { multi = 4; do_it = TRUE; } break; } if (do_it) { tmp = final *= multi; final = tmp; act("{5$n finds one of your vital points!{x", ch,NULL,victim,TO_VICT); act("{5You find one of $N's vital points!{x", ch,NULL,victim,TO_CHAR); } } return final; } /* * check_thief_disarm() * * Chance to disarm opponent, disabled */ void check_thief_disarm(CHAR_DATA * ch, CHAR_DATA * victim) { return; }