 WAFFEN:

    a. Allgemeines

    Alle Waffen sollten ueber eine vernuenftige Beschreibung und auch Details
    verfuegen. Einfach "Ein Schwert" ist ein bissel arg duerftig und
    rechtfertigt auf keinen Fall irgendwelche hohen WCs oder gar HitFuncs!
    Darauf sollten schon die RMs achten...

    Nach Moeglichkeit auch P_INFO setzen, das ist fuer Spieler nicht so
    frustrierend und kann ja auch einen netten Spruch enthalten. P_INFO
    ist *zwingend* bei Waffen mit HitFuncs! Muss ja nicht absolut ein-
    deutig sein, aber etwas Liebe zum Detail sollte bei Sonderwaffen auf
    jeden Fall gelten.

    Waffen vom Typ WT_MISC duerfen weder ueber eine Defend- noch eine
    HitFunc verfuegen. Die AC solcher Waffen ist immer 0. Weiter duerfen
    solche Waffen keinerlei andere kampfrelevante Bedeutung besitzen
    oder Manipulationen am/im Spieler/Gegner verursachen.


    b. Bemerkungen zu einigen Properties:

     P_WC
     P_NR_HANDS
     P_DAM_TYPE
        Diese drei Properties sind fuer die Frage entscheidend, ob eine
        Waffe von der Balance genehmigt werden muss oder nicht, und ob sie
        ueberhaupt angeschlossen werden darf. Bitte schaut immer in "man
        grenzwerte" nach, was fuer die von euch geplante Kombination der
        drei Properties zutrifft.

        Allgemein gilt, dass die WC einigermassen realistisch gewaehlt
        werden sollte. Die Verantwortung hierfuer obliegt den jeweiligen RMs.

        Messer muessen generell einhaendig sein!

     P_WEIGHT
        Bitte realistisch halten. Damit ist *nicht* das RL-Gewicht
        gemeint, sondern man sollte am besten vergleichbare Waffen des
        MG als Massstab nutzen. Da hier z.T. gravierende Diskrepanzen
        bestehen, evtl. mal mehrere vergleichen. Die Verantwortung
        hierfuer obliegt den RMs.

        Waffen mit einem Gewicht von ueber 4000 Gramm sollten normalerweise
        auch zweihaendig sein oder muessen der Balance vorgelegt werden.

     ** Besondere Leichtgewichte bitte genehmigen lassen, um spaeterem     **
     ** Aerger vorzubeugen. Grade fuer Kaempfer ist das Gewicht von Waffen **
     ** sehr wichtig!                                                      **

    Zur Erinnerung: Spieler mit Kraft 20 koennen nur 25000 Gewichts-
    einheiten ("Gramm") tragen.

     P_SIZE
        Die Laenge der Waffe in cm. Setzt man sie nicht, so gilt der
        Defaultwert fuer den jeweiligen Waffentyp, welcher in der Manpage
        zu P_SIZE notiert ist.

     P_VALUE
        Wie bei P_WEIGHT sind die RMs gefragt: Augenmass zaehlt. Werte ueber
        10000 oder so sind zwar nett, aber sinnlos und unrealistisch.

     P_WEAPON_TYPE
        Nur zur Erinnerung: es gibt im MG zu viele Schwerter und Speere.
        Nutzt auch die anderen Waffentypen! (Messer und Peitschen sind sehr
        rar. Bitte angepasste WCs!)

     P_EFFECTIVE_WC
        Hier kann die evtl. durch eine HitFunc veraenderte WC angegeben
        werden. Der Durchschnittswert soll da stehen. Die Kaempfergilde kann
        das in gewissen Grenzen abschaetzen.

     P_EFFECTIVE_AC
        Fuer Paradewaffen setzen. Werte unbedingt mit Boing absprechen!

     P_NOBUY
        Folgende Waffen werden beim Verkauf im Laden aus dem Verkehr gezogen
        (d.h. zerstoert):
        P_NR_HANDS >= 2 und P_WC > 150
        P_NR_HANDS <= 1 und P_WC > 120
        P_HIT_FUNC gesetzt, egal ob fuer Spieler wirksam oder nicht.

    c. Spezialwaffen/Waffen mit Sonderfunktion

    ALLE Waffen mit HitFunc oder vergleichbarer Funktionalitaet muessen
    genehmigt werden, wenn sie fuer Spieler wirken und den Schaden erhoehen!
    Genaueres siehe man grenzwerte.

    Solche Waffen muessen ueber ein P_INFO verfuegen und irgendwo in
    ihrer Beschreibung oder im P_INFO mindestens eine Andeutung ueber
    die Herkunft oder den Grund ihrer besonderen Faehigkeit haben.

    Auch Spezialwaffen sollten nach Moeglichkeit nicht ueber eine
    P_EFFECTIVE_WC von 200 hinausgehen. Der Return-Wert der HitFunc,
    sofern er von 0 abweicht, MUSS per random() zurueckgegeben werden,
    da er ohne weiteres random() auf die WC aufaddiert wird.

    Zu beachten ist, dass man bei Waffen, die nur fuer NPCs mehr Schaden
    machen sollen, nicht (nur) ueber P_RACE prueft, ob der Benutzer ein
    solcher ist. Es ist denkbar, dass Spieler ihre Rasse temporaer ver-
    aendern koennen.

    Die Dichte solcher Waffen in einem Gebiet sollte ein vernuenftiges
    Mass nicht ueberschreiten. Fuer eine Sonderwaffe sollten auch
    etliche nicht-magische Waffen in der Umgebung sein. Zumindest die
    starken Waffen (also nicht die, die nur einen Gag oder so
    beinhalten, sondern wirklich in den Kampf eingreifen) sollten nicht
    zu leicht zu bekommen sein. Hierauf sollen die RMs achten. Solche
    Sachen gehoeren zu Monstern, die ein wenig schlechter erreichbar
    sind oder die besonders stark oder sonstwie unangenehm sind. Also
    nix verschenken.

    Waffen, die Monster vergiften (also nicht nur P_DAM_TYPE DT_POISON
    haben) sind zwar nicht grundsaetzlich verboten, aber doch
    unerwuenscht. Sie sind auf jeden Fall genehmigungspflichtig.
    Die genauen Modalitaeten sind mit der Objektbalance zu klaeren; als
    Richtwert sollte die Wahrscheinlichkeit einer Vergiftung pro Kampfrunde
    max. bei 1% liegen.

    Des weiteren muessen Waffen, die fuer bestimmte Gilden bestimmte
    Vorteile bringen (sich beim Kami der Tanjian nicht abnutzen zum
    Beispiel) ebenfalls von der Balance genehmigt werden.


    d. Genehmigungsgrenzen

    Bitte Genehmigungsgrenzen immer in man grenzwerte nachschlagen, dort
    sind die jeweils gueltigen Werte aufgefuehrt.


    e. Spezielle Properties fuer die Kaempfergilde

    Diese Properties sind definiert in '/p/kaempfer/kaempfer.h'. Mit ihnen
    kann man Boni fuer bestimmte Attacken der Kaempfer vergeben (z.B.
    Bonus auf Waffenschlag oder Todesstoss).

    Genauere Hinweise zu diesen Properties und den zu setzenden Werten
    findet man in 'man kaempferboni'.

    Prinzipiell gilt:

     ** Alle Waffen, in denen eine solche Property gesetzt wird,  **
     ** sind von der Objektbalance zu genehmigen.                 **


    f. Parierwaffen

    Parierwaffen sind Waffen, die die Verteidigung unterstuetzen.  Eine
    Waffe wird als Parierwaffe verwendet, wenn die Property P_PARRY
    gesetzt ist. Folgende Werte sind moeglich:

    PARRY_NOT     Die ist KEINE Parierwaffe (=default).

    PARRY_ONLY    Dies ist eine reine Parierwaffe.

    PARRY_TOO     Diese Waffe wird sowohl als Parierwaffe als auch
                  als Angriffswaffe benutzt

    Die Schutzwirkung der Parierwaffe wird wie bei Ruestungen ueber die
    Property P_AC gesetzt. Ueber die Property P_DEFEND_FUNC kann wie bei
    Ruestungen eine DefendFunc gesetzt werden.

    Waffen mit PARRY_ONLY unterliegen den gleichen P_AC-Grenzwerten wie
    Ruestungen vom Typ AT_SHIELD. Waffen mit PARRY_TOO oder einer
    DefendFunc muessen generell genehmigt werden.

 SIEHE AUCH:
     balance, ruestungen, fernwaffen, uniques, npcs, grenzwerte,
     attributsveraenderungen, resistenzen, kampfobjekte, kaempferboni

 LETZTE AeNDERUNG:
     2021-02-28 Arathorn
