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 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]));
}

