// thus on Sun, 17 Aug 1997 15:34:49 -0500, Justin virtually wrote:
Justin> This is probably the best solution to the damage message issue.
Justin> Wish I had thought of it.
Someone sent email asking about it, lost the email, just going to post the
snippet to the list instead.
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.
--8<--
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);
}
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
+------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/08/00 PST