
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
