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

