inherit "/std/npc";

#include <combat.h>
#include __PATH__(1)"defs.h"


protected void create() {
  if (!clonep()) {
    set_next_reset(-1);
    return;
  }
  ::create();

  create_default_npc(20, 600);

  SetProp(P_SHORT, "Ein kaempferischer Zwerg");
  SetProp(P_LONG, BSLF(
    "Dieser Zwerg wehrt sich ein wenig. Ausserdem verfuegt er Resistenzen."));
  SetProp(P_NAME, "Kawumm");
  SetProp(P_ARTICLE, 0);
  SetProp(P_GENDER, MALE);

  AddId(({"zwerg", "kawumm"}));
  SetProp(P_ALIGN, 100);
  SetProp(P_RACE, "Zwerg");
  SetProp(P_SIZE, 102);

  SetProp(P_MURDER_MSG,
    "He! Ich gehoere doch zu Notstroms Magiertutorial, %s.");
  SetProp(P_DIE_MSG, " kippt um wie eine leere Bierflasche.\n");


  /* Der Zwerg ist ein wenig anfaellig gegen satanisches Gebrabbel und
     Furchtschaden, sehr anfaellig gegen Wasser (und Seife), ein wenig
     resistent gegen Kaelte und recht resistent gegen Gift. */
  SetProp(P_RESISTANCE_STRENGTHS,
    ([DT_UNHOLY:     0.3,
      DT_TERROR:     0.3,
      DT_POISON:    -0.5,
      DT_COLD:      -0.3,
      DT_WATER:      0.6]));

  // Der Zwerg verfuegt ueber ein paar Spezialangriffe:
  SetProp(P_SPELLRATE, 80);

  AddSpell(25, 300+random(150),
           BSLF("Kawumm hat Dir voll aufs Schienbein. AUA!"),
           BSLF("Kawumm haut @WEM mal so richtig auf das Schienbein. Hoeher "
                "kommt er ja nicht dran."),
           ({DT_BLUDGEON}), 0,
           ([SP_PHYSICAL_ATTACK:1, SP_SHOW_DAMAGE:1]));
  AddSpell(25, 200+random(100),
           BSLF("Kawumm klettert auf einen Hocker und verpasst Dir einen "
                "Kinnhaken."),
           BSLF("Kawumm steigt auf einen Hocker, reckt sich noch ein Stueck "
                "und verpasst @WEM einen ordentlichen Kinnhaken."),
           ({DT_BLUDGEON}), 0,
           ([SP_PHYSICAL_ATTACK:1, SP_SHOW_DAMAGE:1]));
  AddSpell(25, 200+random(150),
           BSLF("Kawumm macht da unten etwas, Deine Fuesse tun auf einmal "
                "hoellisch weh."),
           BSLF("Kawumm tritt @WEM mal so richtig auf die Fuesse."),
           ({DT_BLUDGEON}), 0,
           ([SP_PHYSICAL_ATTACK:1, SP_SHOW_DAMAGE:1]));
  AddSpell(15, 500+random(150),
           BSLF("Kawumm kokelt Dich an."),
           BSLF("Kawumm haelt eine brennende Fackel in @WESSEN Schritt."),
           ({DT_FIRE}), 0,
           ([SP_PHYSICAL_ATTACK:0, SP_SHOW_DAMAGE:0]));
}

