do_damage()
***********

do_damage(L)


FUNKTION
========

   int do_damage(int dam,mixed enemy);


DEFINIERT IN
============

   /std/living/life.c


ARGUMENTE
=========

   int dam
        Die abzuziehenden Lebenspunkte (HP).
   object enemy
        Das Objekt, welches den Schaden zufuegt.


BESCHREIBUNG
============

   Dem Lebewesen werden <dam> HP abgezogen. Falls weniger als 0 HP uebrig
   bleiben, so stirbt es automatisch mittels die().
   Ein Lebewesen, welches sich bewegt hat, trifft die ersten Kampfrunden
   sehr viel schlechter, um Rein-Raus-Attacken zu verhindern. Dieses
   Vorgehen kann man mittels P_ENABLE_IN_ATTACK_OUT deaktivieren.
   Lebewesen, welche P_NO_ATTACK gesetzt haben, kann man mit dieser
   Funktion nicht schaden.


RUeCKGABEWERT
=============

   Der tatsaechlich verursachte Schaden.


BEMERKUNGEN
===========

   Beim Gegner <enemy>, falls vorhanden, werden XP und ALIGN entsprechend
   angepasst, im Opfer wird der Gegner in P_KILLER vermerkt, der Kampf wird
   beendet.
   Diese Funktion sollte nur selten direkt verwendet werden. Meist ist der
   uebliche Weg ueber Defend() -> do_damage() -> die() die logisch bessere
   und balancetechnisch guenstigere Loesung, da Defend() magische
   Verteidigungen, die der Spieler bei sich hat beruecksichtigt.
   Es sollte also allein schon aus Fairness gegenueber den Objekten
   anderer Magier Defend() immer dem direkten reduce_hit_points() oder
   do_damage() vorgezogen werden. Mittels der Flags in 'spell' kann man
   sehr viele Parameter beeinflussen.


SIEHE AUCH
==========

   Verwandt:  Defend(L), reduce_hit_points(L), die(L)
   Props:     P_NO_ATTACK, P_ENABLE_IN_ATTACK_OUT, P_KILLER
              P_XP, P_ALIGN

23.Feb.2004 Gloinson
