P_FISH
======

NAME
----
::

    P_FISH                        "fish"

DEFINIERT IN
------------
::

    /sys/fishing.h

BESCHREIBUNG
------------
::

    Enthaelt Einstellungen zu allem, was mit Fischen zu tun hat. 
    Kann in Fischen, Raeumen und Koedern gesetzt werden. Die verfuegbaren 
    Optionen und Funktionsweisen sind in den nachfolgenden Abschnitten 
    aufgefuehrt.

    Fische:
    *******
    Die Property legt zusaetzliche Eigenschaften fest:

      F_NOROTTEN
        Fisch fault nicht; ggf. sollte hier auch gleich F_NOHEAL gesetzt 
        werden, weil sonst eine unverderbliche tragbare Tanke erzeugt wuerde.
      F_NOTHUNGRY
        Fisch frisst Koeder nur, wenn er auch wirklich nachher an der Angel
        haengt. Ist er zu schwer fuer die Angel und reisst ab, bleibt der
        Koeder erhalten.
      F_REPLACE
        Fisch soll sich beim Entfernen von der Angel verwandeln. Hierzu ist
        die Funktion ReplaceFish() im Fisch zu definieren, die sich um die
        Verwandlung kuemmert (z.B. Monster clonen und Fisch zerstoeren; ein
        Beispiel findet sich in /d/ebene/fraggle/angel2/obj/saegefisch.c).
      F_NOHEAL
        Fisch heilt nicht bei Verzehr

    Raum (OPTIONAL):
    ****************
    Legt die Fischdichte des Gewaessers fest. Der eingestellte Wert wirkt 
    sich auf die Wartezeit aus, die der Angler verbringen muss, bis ein 
    Fisch anbeisst. Berechnung im Detail (alle Zahlenwerte in Sekunden):
    - Basis-Wartezeit: delay = 80
    - Die Werte von P_FISH von Raum und Koeder werden addiert:
      summe = raum->QueryProp(P_FISH) + koeder->QueryProp(P_FISH)
      -> positive Werte (Bonus) werden auf 60 begrenzt und mit Zufalls-
         komponente von <delay> abgezogen:
         delay -= random(summe)
      -> negative Werte (Malus) werden auf -300 begrenzt und mit Zufalls-
         komponente auf <delay> aufgeschlagen:
         delay += random(-summe)

    Zusaetzlich wird ein weiterer Malus auf die Wartezeit faellig, falls 
    P_WATER in der Angel und/oder P_WATER im Koeder nicht zum aktuellen 
    Gewaesser passen. Der Malus betraegt jeweils 60+random(60) Sekunden.

    

    Der Standardwert fuer P_FISH im Raum ist 0 und bedeutet 100 % Bestand.
    Positive Werte erhoehen die Dichte, negative senken sie. Positive Werte 
    sollten nicht >100 sein.

    Sofern sich die Werte fuer P_FISH in den empfohlenen Grenzen bewegen,
    koennen Abzuege fuer falsches Gewaesser ueblicherweise kaum durch
    Boni auf Angel oder Koeder kompensiert werden. Ausserdem ist zu
    bedenken, dass es keine Boni fuer richtige Gewaesserwahl gibt.

 

    Koeder (OPTIONAL):
    ******************
    Ein Koeder kann mittels P_FISH die Fischdichte modifizieren, um hierueber
    ein besseres Beissen der Fische zu simulieren (reduziert die Wartezeit
    beim Angeln, siehe oben unter "Raum"). Wenn also der Raum einen Wert
    von -100 gesetzt hat und der Koeder +100, entspricht die Fischdichte im 
    Gewaesser wieder dem Normalwert.

SIEHE AUCH
----------
::

    Properties: P_WATER
    Methoden:   GetAquarium(L)


Zuletzt geaendert: 2014-Aug-21, Arathorn

