Kampfregeln (Spezialfälle)

Aus Eressea
Zur Navigation springenZur Suche springen

Gegenwärtiger Zustand (März 2024)

Beim Kampf wird eine Freund-Feind-Matrix erstellt. Zwei Heere können entweder Feinde, Freunde oder gar nix sein. Wenn Einheit a angreifen will, sucht sie sich eine Einheit x aus ihren Feinden in einer Kampfreihe, die sie erreichen kann. Feinde sind nicht nur Einheiten, die das Heer von a angegriffen hat, sondern alle Heere, die Freund von x und Feind von a sind. Diese Feindheere sind auch für das Überrennen maßgeblich.

Die Frage ist nun, wie ermittelt wird, wer Freund und wer Feind ist. In den Kampfregeln sind einige Grundsätze. Diese führen irgendwann fast zwangsläufig zu Widersprüchen. Aktuell ist es etwa so:

  • Die Gruppe einer Einheit entscheidet, in welchem Heer sie ist.
  • Für alle Einheiten u werden Befehle ATTACKIERE x angeschaut. Wenn die Attacke legal ist, nehmen die Heere von u und x an der Schlacht teil. Das Heer von u wird als Angreifer markiert. Die Heere werden gegenseitig zu Feinden.
  • Für alle Einheiten u in der Region wird geschaut, ob sie an der Schlacht teilnehmen ("Feinde meiner Feinde"):
    • Einheiten mit KÄMPFE NICHT oder FLIEHE nehmen nicht teil, wenn sie nicht schon angegriffen werden.
    • Es werden Heere A gesucht, zu denen u HELFE KÄMPFE hat und die selbst nicht Angreifer sind.
    • Es werden Heere E gesucht, die Feinde von A sind.
    • Wenn u nicht HELFE KÄMPFE zu E hat oder E selber attackiert hat, wird das Heer von u zum Feind von E.
  • Für alle Heere H:
    • Für alle Feinde E von H:
      • Für alle Feinde A von E:
        • Wenn A nicht Feind von H ist, werden A und H Freunde.

Beispiele

Fall 1 - einfacher geht's nicht

 a -> b  ==>  enemies(a,b)
  • a greift b an
  • dann sind A und B Feinde

Fall 2 - unbeteiligter Beobachter

 a -> b
 c
 ==> enemies(a,b)
  • a attackiert b
  • c hilft niemandem
  • c ist weder Feind noch Freund von irgendjemandem

Fall 3 - klassischer Bündnisfall

 a -> b
 c |- b
 ==> enemies(a,b) && enemies(a, c) && friends(b,c)
  • a attackiert b
  • c hilft b
  • ==> b und c sind Freunde und beide Feinde von a

Fall 4 - meine Freunde streiten

 x -> b
 a |- b
 a |- x
 ==> enemies(x,b) && enemies(x,a) && friends(b, a)
  • x attackiert b
  • a hilft b und x
  • ==> x und b sind Feinde, a beteiligt sich nicht

Das ist ein Fall von "Verrat". Die Reaktion, dem Angegriffenen zu helfen ist eine naheliegende Designentscheidung.

Fall 5 - unvollständige Attacken

 a -> b
 -    -
 |    |
 -    -
 c -> d
 ==> enemies(a,b) && enemies(a,d) && enemies(c,b) && enemies(c,d) && friends(a,c) && friends (b,d)
  • a attackiert b
  • c attackiert d
  • a hilft c, c hilft a
  • b hilft d, d hilft b
  • ==> es gibt trotzdem zwei feindliche Seiten ac und bd, die untereinander Freunde sind.

Frage: Welches von den HELFEs ist hier absolut notwendig fürs gleiche Ergebnis?

Fall 6 - Chaos

 a -> b
 c -> a
 c -> b
 ==> ???
  • a attackiert b
  • c attackiert a
  • c attackiert b
  • ==> ???

c könnte zum Beispiel Monster sein. Hilft hier irgendjemand irgendjemandem?

Fall 7 - Dreier

 a -> b
 b -> c
 c -> a
 ==> enemies(a,b), enemies(b,c), enemies(a,c)
  • a attackiert b
  • b attackiert c
  • c attackiert a
  • ==> alle sind gegenseitig Feinde

Ein Dreierzyklus. Wegen der Attacken müssen alle Feinde zueinander sein. Also kann niemand Freund sein(?). Was ändert sich, wenn die Attacken jeweils gegenseitig sind?

Fall 8 - Vierer

  • a attackiert b
  • b attackiert c
  • c attackiert d
  • d attackiert a
  • ==> ???

Ein Viererzyklus. Ist der grundsätzlich anders als der Dreierzyklus? a,c und b,d könnten sich gegenseitig helfen. Gegenwärtig tun sie das nicht, weil sie Angreifer sind.

Fall 9 - Falsches Helfe?

 x <-> b
 a |-| b
 a |-  x
 ==> enemies(x,b)
  • x attackiert b
  • b attackiert x
  • a hilft b und x
  • b hilft a
  • ==> ???

Ähnlich wie 4, nur dass a jetzt angreift. A hält sich raus?

Fall 10 - Bug #3014

 a -> b
 e -> b
 c -> d
 c |-| b
 ==> enemies (a,b) && enemies(b,e) && enemies(c,d) && enemies(c,a) && enemies(c,e) && friends(b,c) && friends (a,e) && friends (a,d) && friends (d,e)
  • a attackiert b
  • e attackiert b
  • c attackiert d
  • c hilft b
  • ==> Bug bewirkte, dass c und ae keine Feinde wurden, deshalb half c nicht b

Nur weil c attackiert, sollte er sich trotzdem vor b stellen.

Fall 10b - Erweiterung

 a -> b
 e -> b
 c -> d
 b -> f
 c |-| b
 ==> enemies (a,b) && enemies(b,e) && enemies(c,d) && enemies(b,f) && !enemies(c,a) && !enemies(c,e) && friends(b,c) && friends (a,e,f) && friends (a,d) && friends (d,e)
  • a attackiert b
  • e attackiert b
  • c attackiert d
  • b attackiert f
  • c hilft b
  • ==> ???

Jetzt attackiert b noch eine ansonsten unbeteiligte Partei f. Dadurch hilft c nicht mehr b, weil b Angreifer ist. Ein Designfehler?

Fall 11 - Verrat

Jetzt wird es interessant. Astreiner Verrat!

Zwei Seiten a+b und c+d. X läuft von ab zu cd über.

 a |-| b
 c |-| d
 x |-| cd
  • a hilft c und x
  • b hilft a und x
  • c hilft d und x
  • d hilft c und x
  • x hilft c und d

x versucht möglichst viel Schaden anzurichten.

 cdx -> ab
1. c, d, x attackieren je a und b
Hier helfen a und b sich, auch gegen x
2. Kann x die Situation irgendwie zu seinem Vorteil ausnutzen, damit c und d entweder gegeneinander kämpfen oder sich nicht helfen?
???

Fall 12 - Versehen

...


Alte Diskussion

Diese Diskussion gab es mal auf Kampfregeln. Die Bilder sind leider verschollen.

Schritte bei der Erzeugung der Freund/Feind Matrix

Die folgende Erklärung ignoriert Belagerung, Parteitarnung und KÄMPFE HELFE NICHT, weil das sonst noch unübersichtlicher wird.

  1. Wenn eine Einheit X eine Einheit Y attackiert, so nehmen beide am Kampf teil und X ist Feind von Y. Das Heer von X wird als Angreifer markiert.
  2. Alle Einheiten X in der Region, die einer schon im Kampf befindlichen Einheit Y ein HELFE KÄMPFE gewähren, nehmen ebenfalls am Kampf teil, wenn die Einheit Y nicht in einem Angreifer-Heer ist. Alle Feinde von Y werden zu Feinden von X erklärt.
  3. Je zwei Heere X und Y, die nicht Feinde sind, und einen gemeinsamen Feind Z haben, werden als Freund markiert.
  4. Je zwei Heere X und Y, die bisher weder Freund noch Feind sind, aber sich beidseitig HELFE KÄMPFE gewähren, werden als Freund markiert.
  5. In jeder Runde wählt ein Kämpfer (Angreifer) aus der Menge seiner Feinde einen (Verteidiger) aus, den er schlagen kann.
  6. Die Kampfreihe eines Verteidigers ergibt sich aus der Menge der Einheiten, die gleichzeitig Feind des Angreifers und Freund des Verteidigers sind.

Alternative 1 (klappt nicht)

Datei:Clipboard02.png
Illustration zu Alternative 1
  1. Wenn eine Einheit X eine Einheit Y attackiert, nehmen beide am Kampf teil und X ist Feind von Y.
  2. Wenn eine Einheit X noch nicht am Kampf teilnimmt, aber mit einer Einheit Y aus dem vorangegangen Schritt ein gegenseitiges HELFE hat, welche a) attackiert wurde, und b) niemand attackiert, zu dem X ein gegenseitiges HELFE hat, dann nimmt X am Kampf teil und alle Feinde von Y sind Feinde von X.
  3. Einheiten X und Y, die sich gegenseitig HELFE gesetzt haben, wobei kein Feind von X ein gegenseitiges HELFE zu Y hat, sind Freunde.

Alternative 2 (von Iri)

Datei:Help.png
Illustration zu Alternative 2

Hi Enno,

Ich habe mir mal Gedanken gemacht. Das Problem ist so in der Tat nicht lösbar. D hat 3 Möglichkeiten:

  1. er hilft A gegen B -> A kann das ausnutzen, um B mit D zu plätten
  2. er hält sich raus -> A kann das nutzen, um B alleine zu plätten
  3. er kämpft mit B gegen A -> kann B gegen A ausnutzen

Abhilfe schafft nur ein vom Spieler situationsabhängig setzbarer Status: BEKÄMPFE Aggressor: Für die Magierregion, zieht die Einheit in den Kampf gegen A, an Seite von B. BEKÄMPFE NICHT: bleibt neutral BEKÄMPFE falschen Freund: zieht die Einheit in den Kampf gegen B, für die Front, wenn einer falsche Helfe-Stati zum Ausnutzen setzt. Dem übergeordnet sind natürlich Attackiere und direkte Helfe Stati. Die Frage ist ja nur, was D macht, wenn D C nicht hilft. Hat D ein Helfe zu C, hilft er C, fertig. Hat er das nicht, braucht er ne Anweisung, was zu tun ist, und dann greift das, was mittels BEKÄMPFE eingestellt wurde.

Das führt dazu, dass in der Magierregion jeder, der irgendwas attackiert, von allen niedergemacht wird. Das ist natürlich im Einzelfall dann schwierig, wenn ein Feind in die Magierregion läuft und man den raushaben will, dann sollte man sehr aufpassen, dass keiner dem Feind hilft. In diesem Fall wird die Magierregion allerdings zur Front, und man stellt BEKÄMPFE falschen Freund ein. An der Front führt das dazu, dass (normalerweise hat ja keiner helfe auf die Feinde) der Verräter (oder der es vergessen hat), der noch den falschen Helfe Status hat, und dem Feind (C) hilft, von allen geplättet wird. Und wenn man sich nicht sicher ist, kann man auch neutral einstellen. Damit macht man nichts gegen den Agressor in der Magierregion und auch nichts gegen falsche Freunde, sondern bleibt aus der Schlacht raus. Ist nicht gerade das loyalste, aber könnte manchmal Sinn machen, vielleicht als Grundeinstellung für die auszubildenden Truppen zu Hause.

Ich weiß nicht, ob das exploitierbar ist. BEKÄMPFE falschen Freund sollte recht sicher sein, an der Front, denn da hat ja eigentlich jeder Helfe auf seine Verbündeten, so dass, wenn einer der Bündnispartner verrückt spielt und einen anderen angreift, automatisch sowieso alle dem Opfer helfen. Nur wer kein Helfe gesetzt hat, kommt auch in Probleme (oder macht welche), aber das ist doch recht unwahrscheinlich, und selbst dann wäre es eben ein Verrat von 2 Leuten und gegen beide würde gekämpft. Sollte man in der Magierregion vermeiden, zumal wenn neutrale anwesend sind, da man sonst schnell den eigenen Bündnispartner kickt. BEKÄMPFE NICHT kann ausgenutzt werden gegen die Bogenschützen oder auch die Magier, sollte man also an Truppenversammlungen / wichtigen Regionen vermeiden. BEKÄMPFE Aggressor wiederum ist sehr riskant an der Front, weil ein falscher Helfe-Status (absichtlich oder nicht) den Aggressor plätten kann, weil auf einmal alle gegen ihn kämpfen.

Alternative 3

Datei:Clipboard03.png
Illustration zu Alternative 3

Nochmal ganz anders angesehen, was wuerde denn wirklich Sinn machen? In Illustration 1 denke ich, A sollte auf B,D schlagen, B auf A,C schlagen, C nur auf B und D nur auf A. Das waere so gegeben, wenn jeder nur diejenigen als Feinde betrachtet, die ihn selbst attackiert haben, oder einen Freund attackiert haben, mit dem gegenseitig HELFE besteht. Alle anderen Verbindungen werden ignoriert. Zwei Parteien die sich gegenseitig HELFE gesetzt haben, sind ausserdem niemals Feinde.

  • A->B,D
  • B->A,C
  • C->A
  • D->B

Illustration 3 wirft dann die Frage auf, was bei Verrat passiert. Angenommen, A attackiert B, aber nicht umgekehrt. In diesem Fall darf C nicht unbeteiligt an der Seite stehen - das wuerde Verrat zu stark machen, und im Erstschlag wuerde A gezielt die Taktiker oder andere wichtige einheiten der Allianz vernichten. Fuer C gilt also das eigene HELFE gegenueber A nicht mehr, weil A einen direkten Verbuendeten (B) attackiert hat, und wegene des direkten Angriffs auf B kaempfen A und B gegeneinander. D hingegen greift garnicht ein, da seine Verbuendeten von neimand attackiert wurden.

  • A->B,C
  • B->A
  • C->A
  • D kaempft nicht.

Wenn allerdings in Illustration 3 auch B eine Attacke gegen A macht, gilt nach dem eben beschriebenen Prinzip, dass D in den Kampf eingreift, da sein Verbuendeter A von einer dritten Partei B attackiert wurde. C hingegen wird weder gegen A noch B kaempfen: Beide haben einen Verbuendeten von C attackiert (sich selbst untereinander), was das HELFE von C unwirksam macht. C hat somit keine Verbuendeten, die attackiert wurden.

  • A->B
  • B->A,D
  • C kaempft nicht
  • D->B