inherit "/std/npc";

#include <new_skills.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 haut 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]));
}

