From: "d. hall" Subject: Damage messages Notes: CharType is a typedef struct char_data ObjType is a typedef struct obj_data cache_t is a typedef char cache_t[__CACHE_SIZE] istrlist is a personal lib function I wrote which has variable arguments and strcats all arguments to the first. I use {variable-type}Type since I can have Emacs font-lock highlight them. CGRN and CNRM, etc... are a personal color system. Adjust to taste, please let sit for 5 minutes to cool before serving. d. typedef struct damage_message_type { char *to_room; char *to_char; char *to_vict; } DamMesgType; static DamMesgType dam_weapon[] = { // use #w for singular (i.e. "slash") and #W for plural (i.e. "slashes") { "$n grazes $N with $s #w", // 0: 1 "You graze $N with your #w", "$n grazes you with $s #w" }, { "$n barely #W $N", // 1: 2 "You barely #w $N", "$n barely #W you" }, { "$n lightly #W $N", // 2: 3 "You lightly #W $N", "$n lightly #W you" }, { "$n #W $N", // 3: 4-7 "You #w $N", "$n #W you" }, { "$n #W $N hard", // 4: 8-11 "You #w $N hard", "$n #W you hard" }, { "$n #W $N rather hard", // 5: 12-13 "You #w $N rather hard", "$n #W you rather hard" }, { "$n #W $N very hard", // 6: 14-17 "You #w $N very hard", "$n #W you very hard" }, { "$n #W $N extremely hard", // 7: 18-21 "You #w $N extremely hard", "$n #W you extremely hard" }, { "$n massacres $N with $s #w", // 8: 22-25 "You massacre $N with your #w", "$n massacres you with $s #w" }, { "$n annihilates $N with $s #w", // 9: > 25 "You annihilate $N with your #w", "$n annihilates you with $s #w" } }; static DamMesgType dam_amount[] = { { "$E hardly notices.", // 0: 1% "$E hardly notices.", "you hardly notice." }, { "barely hurts $M.", // 1: 2% "barely hurts $M.", "barely hurts you." }, { "slightly wounds $M.", // 2: 5% "slightly wounds $M.", "slightly wounds you." }, { "wounds $M.", // 3: 10% "wounds $M.", "wounds you." }, { "severely wounds $M.", // 4: 20% "severely wounds $M.", "severely wounds you." }, { "maims $M.", // 5: 30% "maims $M.", "maims you." }, { "seriously maims $M!", // 6: 45% "seriously maims $M!", "seriously maims you!" }, { "cripples $M!", // 7: 60% "cripples $M!", "cripples you!" }, { "completely cripples $M!", // 8: 80% "completely cripples $M!", "completely cripples you!" }, { "totally ANNIHILATES $M!!", // 9: 100% "totally ANNIHILATES $M!!", "totally ANNIHILATES you!!" } }; /* message for doing damage with a weapon */ void dam_message (int damage, CharType *ch, CharType *vict, int w_type) { static cache_t message; int amount_index, weapon_index, percent; w_type -= TYPE_HIT; // Change to base of table with text */ percent = (damage * 100 / GET_MAX_HIT (vict)); if (percent <= 1) amount_index = 0; else if (percent <= 2) amount_index = 1; else if (percent <= 5) amount_index = 2; else if (percent <= 10) amount_index = 3; else if (percent <= 20) amount_index = 4; else if (percent <= 30) amount_index = 5; else if (percent <= 45) amount_index = 6; else if (percent <= 60) amount_index = 7; else if (percent <= 80) amount_index = 8; else amount_index = 9; if (damage <= 1) weapon_index = 0; else if (damage <= 2) weapon_index = 1; else if (damage <= 3) weapon_index = 2; else if (damage <= 7) weapon_index = 3; else if (damage <= 11) weapon_index = 4; else if (damage <= 13) weapon_index = 5; else if (damage <= 17) weapon_index = 6; else if (damage <= 21) weapon_index = 7; else if (damage <= 25) weapon_index = 8; else weapon_index = 9; // message to onlookers *message = '\0'; // Reset the message cache istrlist (3, message, replace_string (dam_weapon[weapon_index].to_room, attack_hit_text[w_type].singular, attack_hit_text[w_type].plural), ", which ", dam_amount[amount_index].to_room); act (message, FALSE, ch, NULL, vict, TO_NOTVICT); // message to damager *message = '\0'; // Reset the message cache istrlist (5, message, CGRN (ch), replace_string (dam_weapon[weapon_index].to_char, attack_hit_text[w_type].singular, attack_hit_text[w_type].plural), ", which ", dam_amount[amount_index].to_room, CNRM (ch)); act (message, FALSE, ch, NULL, vict, TO_CHAR); // message to damagee *message = '\0'; // Reset the message cache istrlist (5, message, CRED (vict), replace_string (dam_weapon[weapon_index].to_vict, attack_hit_text[w_type].singular, attack_hit_text[w_type].plural), ", which ", dam_amount[amount_index].to_room, CNRM (vict)); act (message, FALSE, ch, NULL, vict, TO_VICT | TO_SLEEP); }