Fight

Aus AntamarWiki
Version vom 2. Juli 2011, 22:28 Uhr von Gaddezwerch (Diskussion | Beiträge) (Gegner tot oder geflohen?: neu: abfragbare Attribute von NPCs nach dem Kampf)
Wechseln zu: Navigation, Suche

Es sollte zwar in Mini-Quests, die ja auch für Nicht-Kämpfer sein sollen, immer Pfade ohne Kampf geben, aber wenn der Held sich entsprechend anstellt, wird ein Kampf oft nicht zu vermeiden sein. Daher kann man in Quests natürlich auch Kämpfe aufsetzen:

Kampf definieren

<fight>
  <rivals>
    <!-- gegen einen Goblin kämpfen -->
    <npc npcid="326" />
  </rivals>
  <victory takeDroppedWeapons="true">
    <p>Gewonnen!</p>
  </victory>
  <escape>
    <p>Du bist vor dem Goblin geflohen.</p>
  </escape>
  <defeat>
    <p>Du wurdest besiegt.</p>
  </defeat>
</fight>

Kämpfe werden also mit dem Tag <fight> durchgeführt, Gegner mit via npc-Tag innerhalb von <rivals> eingebaut. Wenn der Held gesiegt hat, wird der <victory>-Zweig ausgeführt. Ist er geflüchtet, wird der <escape>-Zweig ausgeführt. Hat der Held verloren, wird der <defeat>-Zweig ausgeführt.

Das Attribut takeDroppedWeapons="true" in <victory> bewirkt, dass bei einem Sieg des Helden dieser die Waffen und Schilde bzw. Parierwaffen der Gegner, die den Kampf verloren haben, automatisch aufsammelt. Mit anderen Worten: Die Beutewaffen werden automatisch aufgehoben.

Gegner definieren

Möchte man mehrere Gegner nutzen, kann man das npc-Tag mehrfach angeben.

...
  <rivals>
    <!-- 3 Goblins als Gegner -->
    <npc npcid="326" />
    <npc npcid="326" />
    <npc npcid="326" />
  </rivals>
...

Erlaubte Attribute für <npc> innerhalb von <rivals> oder <friends> sind:

  • npcid (wird immer benötigt): eine GegnerID aus der Datenbank, siehe NPC Liste. Dieser Gegner wird aus der Datenbank geladen und kann durch weitere Attribute angepasst/individualisiert werden (die folgenden Attribute sind optional):
  • weapon: entweder den Namen der Waffe eintragen oder die WaffeID mit führendem #, siehe Waffenliste
  • lefthand: entweder den Namen des Schildes oder die WareID mit führendem # angeben
  • gender: 'male' der Vorgabewert oder 'female'
  • surrender-below: Dient dazu, den Gegner einen Fluchtversuch unternehmen zu lassen, wenn die LE unter den angegebenen Wert gefallen ist
  • escape: gibt an, ob eine Flucht für diesen Gegner möglich sein soll, standardmäßig ist 'true' eingestellt. Um eine Flucht des Gegners zu verhindern, muss also escape="false" angegeben werden.
  • wounds: eine Zahl, die angibt, wie viele Wunden der NPC bereits hat (natürlich standardmäßig 0, also keine Wunden).
  • LEP: Die Lebenspunkte des NPC
  • AUP: Die Ausdauerpunkte des NPC
  • ini: Die Basis-Initiative des NPC
  • RS: Ein allgemeiner Wert für den Rüstunggschutz. Dieser Wert wird für alle Trefferzonen übernommen.
  • BE: Behinderung des NPC
  • enabled (true/false): Wenn 'false' kämpft dieser NPC im Kampf nicht mit. Dieses Attribut kann dabei helfen, zufallsbedingt unterschiedliche Anzahl an Gegnern für einen Kampf festzulegen.
...
<!-- ein Wütender Goblin mit Holzspeer und Lederschild, der bereits eine Wunde hat -->
<npc npcid="326" name="Wütender Goblin" gender="male" weapon="Holzspeer" lefthand="Lederschild" surrender-below="10" wounds="1" escape="true" /> 
...

Mitstreiter hinzufügen

Um Freunde/Mitstreiter auf der Seite der Helden kämpfen zu lassen, kann das <friends>-Tag benutzt werden, das sich analog zum <rivals>-Tag benutzen lässt:

<fight>
  <friends>
    <!-- z.B. Gruumsh 1:1 aus der DB; soll nicht fliehen dürfen -->
    <npc npcid="67" escape="false" />
  </friends>
  <rivals>
    <!-- z.B. ein Hauptmann aus der DB als Salina mit einem Säbel -->
    <npc npcid="34" name="Salina" gender="female" weapon="Säbel" surrender-below="10"/>
  </rivals>
  <defeat>
    <include target="kampf-verloren"/>
  </defeat>
  <escape>
     <include target="kampf-gefluechtet"/>
  </escape>
  <victory>
    <include target="kampf-gewonnen"/>
  </victory>
</fight>


Gegner variieren

Um für einen Kampf unterschiedliche Gegner auswählen zu können gibt es folgende Möglichkeit: Zunächst wird per Random oder einer beliebigen anderen Möglichkeit eine Variable gespeichert, deren Inhalt true oder false lauten muss. Diese kann dann wie folgt in den Kampf integriert werden:

<store name="AlbertEnabled">true</store>
<store name="AlgolfEnabled">false</store>
<store name="AlbertaEnabled">false</store>

...
<fight>
  <rivals>
    <npc npcid="32" name="Albert" gender="male" enabled="${AlbertEnabled}"/><!-- Kämpft mit, da true --> 
    <npc npcid="32" name="Algolf" gender="male" enabled="${AlgolfEnabled}"/><!-- Kämpft nicht, da false --> 
    <npc npcid="32" name="Alberta" gender="female" enabled="${AlbertaEnabled}"/><!-- dito -->

Keine Flucht des Helden

Das Fluchtverhalten des Helden kann durch das Attribut 'escape' im fight-Tag definiert werden, bei 'false' kämpft er bis zuletzt.

<fight escape="false"><!-- Held kämpft bis zum bitteren Ende -->
...
</fight>

bewirkt, dass der Held nie fliehen darf. Standardmäßig ist escape="true" - das escape-Attribut kann also auch weggelassen werden.


Gegner tot oder geflohen?

Alle NPCs, die im Kampf mitgekämpft haben, können im Nachhinein auf bestimmte Attribute abgefragt werden. Die abfragbaren Attribute sind:

  • lep -> liefert die verbliebenen LEP
  • wounds -> liefert die Anzahl an Wunden
  • status -> liefert 'gewonnen', 'verloren', 'geflohen' oder 'unentschieden' (wenn Kampf noch im Gang)

Beachte, dass auch bei einer Niederlage (Status 'verloren') die LEP durchaus noch größer als 0 sein können.

Zugriff auf diese Attribute erfolgt über eine Variable nach dem Schema rivals:#1:lep (für die Gegner) bzw. friends:#1:lep (für NPC-Freunde). Die Variable steht nur in der kampfausführenden Szene bereit, sie hat also den scope 'scene'.

Beispiel:

<fight>
  <friends>
    <npc npcid="1" />
  </friends>
  <rivals>
    <npc npcid="331" name="Ork 1" gender="male" weapon="#31" lefthand="Reiterschild" escape="true" LEP="30" />
    <npc npcid="331" name="Ork 2" gender="male" weapon="Säbel" lefthand="Lederschild" escape="true" wounds="1"/>
    <npc npcid="331" name="Ork 3" LEP="25" AUP="100" RS="6" BE="8" ini="1" />
  </rivals>
  <victory takeDroppedWeapons="false">
    <p>Sieg!</p>
  </victory>
  <escape>
    <p>Du bist geflohen</p>
  </escape>
  <defeat>
    <p>Du bist zu Boden gegangen.</p>
  </defeat>
</fight>

<p>Ork1-Status: <fetch name="rivals:#1:status" /></p>
<p>Ork1-Leben: <fetch name="rivals:#1:lep" /></p>
<p>Ork1-Wunden: <fetch name="rivals:#1:wounds" /></p>

<p>Ork2-Status: <fetch name="rivals:#2:status" /></p>
<p>Ork2-Leben: <fetch name="rivals:#2:lep" /></p>
<p>Ork2-Wunden: <fetch name="rivals:#2:wounds" /></p>

<p>Ork3-Status: <fetch name="rivals:#3:status" /></p>
<p>Ork3-Leben: <fetch name="rivals:#3:lep" /></p>
<p>Ork3-Wunden: <fetch name="rivals:#3:wounds" /></p>

<p>Freund-Status: <fetch name="friends:#1:status" /></p>
<p>Freund-Leben: <fetch name="friends:#1:lep" /></p>
<p>Freund-Wunden: <fetch name="friends:#1:wounds" /></p>