normalize_defend_args()
***********************


FUNKTION
========

   protected nomask void normalize_defend_args(int dam,
      string|string* dam_types, int|mapping si_spell, object enemy)


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

   /std/living/combat.c


ARGUMENTE
=========

   Die Argumente sind die Argumente, welche Defend() uebergeben
   bekommt (siehe dort!)


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

   Defend bekommt aus historischem Code haeufig Argumente uebergeben,
   die nicht der aktuellen Konvention entsprechen (z.B. si_spell als 0
   oder 1 statt eines Mappings). Damit nun nicht jedes Objekt seine
   eigene Anpassung vornehmen muss und dabei evtl. noch etwas
   vergessen wird, kann man mit dieser Funktion die Argumente genauso
   "normieren", wie es in der Standardlib in Defend() auch gemacht
   wuerde.

   Dieses wird ganz dringend empfohlen statt diese Normierung selber
   vorzunehmen. Und sollte es hier Aenderungen geben, bekommt man
   diese automatisch mit.

   Nach dem Aufruf dieser Funktion (Argumente als Referenz
   uebergeben!) liegen die Argumente dann wie folgt vor:

   dam
      ein Integer (unveraendert)

   dam_types
      ein Array von Schadenstypen

   si_spell
      ein Mapping - wenn es neu angelegt wurde, enthaelt es die
      Eintraege SP_PHYSICAL_ATTACK, SP_SHOW_DAMAGE, SP_REDUCE_ARMOUR
      und EINFO_DEFEND. SP_PHYSICAL_ATTACK und SP_SHOW_DAMAGE sind 1,
      wenn si_spell 0 war, sonst 1.

   enemy
      ist das Objekt des Gegners oder this_player()

   Alternativ zum Ueberschreiben von Defend() und Nutzung dieser
   Funktion ist haeufig auch InternalModifyDefend() gut geeignet. Dort
   muss *keine* eigene Normierung der uebergebenen Argumente mehr
   vorgenommen werden!


BEISPIELE
=========

   // Ein eigenes Defend soll Dinge tun, bevor das geerbte Defend() gerufen
   // wird. Um den Code zu vereinfachen, sollen die Typen der Argumente aber
   // schon sicher in einem "normierten Zustand" sein.
   public int Defend(int dam, string|string* dam_types, int|mapping spell,
                     object enemy)
   {
     // Uebergabe per Referenz noetig!
     normalize_defend_args(&dam, &dam_type, &spell, &enemy);
     if (member(dam_types, DT_FIRE) > -1
         && si_spell[SP_NAME] == "Drachenfeuer")
       dam *= 2; // Schaden verdoppeln
     return ::Defend(dam, dam_types, si_spell, enemy);
   }


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

   Verwandt:
      InternalModifyDefend(), Defend(), DefendInfo()

16.01.2019 Zesstra
