reduce_hit_points()
*******************


FUNKTION
========

   int reduce_hit_points(int damage)


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

   /std/living/life.c


ARGUMENTE
=========

   int damage  - der zugefuegte Schaden


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

   Dem Lebewesen werden damage Lebenspunkte abgezogen, aber das Lebewesen
   wird hinterher nicht weniger als 1 Lebenspunkt haben und es wird
   dadurch nicht sterben.


RUECKGABEWERT
=============

   Die Lebenspunkte nach der Aenderung.


BEISPIELE
=========

   write("Ploetzlich schiesst eine scheussliche Kreatur aus der Pfuetze "+
         "heraus und\nbeisst Dich ins Bein, sie verschwindet so schnell, "+
         "wie sie gekommen ist.\n");
   this_player()->reduce_hit_points(50);
   (Auszug aus /players/boing/friedhof/room/cat1x9)


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

   damage kann auch ein negativer Wert sein, dann werden dem Lebewesen
   diese Lebenspunkte gutgeschrieben und auf die aktuellen Lebenspunkte
   addiert. Da dies eine Form der Heilung ist, ist die Verwendung mit dem
   Regionsmagier abzustimmen und dem EM fuer Heilungsbalance zur
   Genehmigung vorzulegen.

   Heilstellen sollten in neuem Code mit der Funktion restore_hit_points()
   realisiert werden.

   Bei Heilstellen sollte eine evtl. Heilung des Spielers mit der eigens
   dafuer eingerichteten Funktion check_and_update_timed_key() realisiert
   werden.


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

   Gegenpart: restore_hit_points()
   Verwandt:    do_damage(), Defend(), reduce_spell_points(),
              restore_spell_points(), check_and_update_timed_key()
   Props:         P_HP
   Konzept:   heilung

Last modified: 20. Jan. 2020, Arathorn
