Re: Damage messages

From: d. hall (dhall@APK.NET)
Date: 08/17/97


// 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