Skip to content

Söldner & Räuber System

Sir Toby edited this page Nov 7, 2020 · 1 revision

Einleitung

In diesem Artikel möchte ich das Konzept und die Funktionsweise des Räuber & Söldner Systems erläutern, damit sich andere Entwickler schnell zurecht finden, möchten sie Änderungen oder Erweiterungen vornehmen. Diese Seite befindet sich noch im Aufbau und unterliegt einem stetigen Verbesserungsprozess meinersets.

Nomenklatur

Stützpunkt: Überbegriff für die Söldnerburgen und die Räuberlager
Einheit: Ein Soldat oder Räuber
Aktion: Bezeichnet die Aufgabe eines Stützpunktes, wie z.B. plündern oder beschützen

Erklärung der Klassenstrukturen

Folgt.

Beschreibung der einzelnen Fenster

Alle Fenster, die zum Söldner & Räuber System gehören, befinden sich im Namespace Kampf. Derzeit gibt es folgende Fenster:

frmSoeldnerRaeuberKarte

Dieses Fenster stellt die Übersichtskarte der Militär-Stützpunkte im gesamten Reich dar. Hier kann der Spieler alle 8 Stützpunkte anklicken und sie sich anschauen. Besitzt er einen Stützpunkt, so gelangt er in die Verwaltungsansicht (frmStuetzpunktVerwalten). Besitzt er den Stützpunkt nicht, so wird ihm ein Info-Fenster (frmStuetzpunktKaufen) angezeigt, in dem er ein Kaufangebot machen kann (jeweils nur ein Angebot pro Jahr/Runde).

frmStuetzpunktKaufen

Dieses Fenster stellt die wichtigsten Informationen eines Stützpunktes dar, aus Sicht eines Spielers, dem der Stützpunkt nicht gehört. Es wird der Besitzer, die Sicherheit/Tarnung sowie der Zustand angezeigt. Der Spieler hat hier außerdem die Möglichkeit, dem Besitzer ein Kaufangebot zu unterbreiten.

frmStuetzpunktVerwalten

In diesem Fenster kann ein Besitzer eines Stützpunktes diesen verwalten. Er kann Truppen anheuern, ein Manöver durchführen, die Sicherheit/Tarnung und den Zustand verbessern sowie den Stützpunkt ausbauen, um die Kapazität für Truppen zu erhöhen. Außerdem hat der Spieler hier die Möglichkeit, bis zu zwei Aktionen für seine Truppen festzulegen.

Die Einheiten und die Werte

Werte

Folgende Werte besitzt eine Einheit:

  • Maximale Lebenspunkte
  • Lebenspunkte
  • Angriffswert
  • Verteidigungswert
  • Agilität (derzeit keine Auswirkung)
  • Basiskosten

Söldner

Söldner ist der Überbegriff für alle Einheiten, welche in einer Zollburg stationiert werden können. Es gibt folgende Typen von Söldnern:

Söldner

Musketier

Kanonier

Offizier

Räuber

Räuber ist der Überbegriff für alle Einheiten, die in einem Räuberlager stationiert sein können. Es gibt folgende Typen von Räubern:

Räuber

Bombenleger

Kanonier

Schütze

Die Kampfberechnung

In Anlehnung an die Beschreibung der Kämpfe in diesem Issue (https://github.com/DerEinzehnte/Conspiratio-Programm/issues/44) habe ich mir einen Abflauf der Kämpfe überlegt, den ich im folgenden beschreiben werde.

Die Kampfberechnung findet in der Funktion BerechneKampfErgebnis der Klasse Kampf statt und liefert ein Objekt der Klasse KampfErgebnis mit den entsprechenden Werten zurück, die ausgewertet und dargestellt werden können. Wichtig: Diese Funktion berechnet nur ein Ergebnis, verändert aber noch nichts an der Moral oder der Truppen in den Stützpunkten. Damit wäre also auch beispielsweilse eine Simulation eines Kampfes möglich, ohne direkte Auswirkungen.

Kampfablauf

Ein Kampf besteht normalerweise aus mehreren Runden, ausser der Kampf endet schon nach der ersten Runde. Pro Runde werden alle lebenen Einheiten beider Spieler einen Angriff ausführen, bis alle Einheiten einen Angriff durchgeführt haben. Die erste Einheit des Spielers, der beginnt, fängt an, danach abwechselnd. Die Einheiten werden gemischt, sind also nicht sortiert. Ursprünglich hatte ich vor, Einheiten mit einem höheren Agilitätswert eher angreifen zu lassen als Einheiten mit einem niedrigeren Wert, allerdings würde dies die Kämpfe weniger dynamisch gestalten und die einzelnen Schwächen und Stärken hätten weniger Auswirkung bzw. einseitige Truppen hätten deutlich größere Vor- oder Nachteile. So fühlt es sich jedenfalls fairer und ausgeglichener an aber das ist derzeit nur mein erster Entwurf, der sicher noch reifen muss. Die Angriffe der jeweiligen Einheiten konzentrieren sich immer auf die nächste Einheit, bis diese tot ist.
Stirbt eine Einheit, dann sinkt die Moral der zugehörigen Truppe zu einer Wahrscheinlichkeit von 50 % um 1 %.
Wird eine Einheit getötet, steigt die Moral der angreifenden Truppe zu einer Wahrscheinlichkeit von 50 % um 1 %.

Nach einer kompletten Angriffsrunde wird folgendes geprüft:

  • Ist die Moral einer Truppe 0 %? Dann flieht diese und der Kampf ist beendet und für diese Truppe verloren
  • Ist die Moral einer Truppe unter 20 %, besteht eine Chance von 50 %, dass die Truppen aufgeben und fliehen. Der Kampf ist damit verloren und beendet.
  • Hat eine Truppe mehr als die Hälfte ihrer ursprünglichen Einheiten verloren? Dann flieht diese und der Kampf ist beendet und für diese Truppe verloren
  • Wenn eine Truppe in der ersten Runde komplett ausgelöscht wurde, ist der Kampf natürlich ebenfalls vorbei

Sind diese Prüfungen alle erfolglos, dann geht es in die nächste Kampfrunde.

Berechnung der Angriffs- und Verteidigungsstärke

Die Angriffsstärke einer Einheit wird wie folgt berechnet:
Angriffsstärke = Angriffswert + Moralfaktor + StarkGegenFaktor

Die Verteidigungsstärke einer Einheit wird wie folgt berechnet:
Verteidigungsstärke = Verteidigungswert + Moralfaktor - SchwachGegenFaktor

Den Lebenspunkten wird bei einem Angriff folgendes Ergebnis abgezogen:
Abzug Lebenspunkte = Angriffswert - Verteidigungswert
Ist dieser Wert 0 oder kleiner als 0 so wird der Einheit immer 1 abgezogen (damit Kämpfe nicht unendlich lange dauern bzw. in die Länge gezogen werden).

Balancing

Um das Balancing anzupassen, sind folgende Klassen und Funktionen relevant bzw. interessant:

  • Einheitenwerte: Sind im Konstruktor angegeben, die Klassen liegen im Namespace Conspiration.Kampf (z.B. ZollSoeldner)
  • Stützpunktwerte: In der Funktion NeuInitialisieren in der Klasse VW werden die Stützpunkte mit Standardwerten zur Kapazität und zum Preis erstellt
  • KI-Stärke: Die Stärke und Aktivität der KI-Spieler wird in der Funktion RundenendeKIAktionenDurchfuehren in den Klassen Zollburg und Raeuberlager angegeben. In der Funktion gibt einen Aktivitätsfaktor, der erlaubt, die relative Häufigkeit von Aktionen im Stützpunkt durch die KI von 1% bis zu 100% festzulegen (Standard ist 50%).
  • Wahrscheinlichkeit von Kämpfen und Überfällen: In der Klasse Kampfberechnung gibt es die Funktion ErmittleStattfindendeKaempfe, welche die am Rundenende stattfindenen Kämpfe ermittelt. Dabei stützt sie sich auf ein Objekt Landsicherheit, welche die Wahrscheinlichkeiten und Sicherheiten eines Landes abbildet. Das Objekt wird durch die Funktion VW.LandsicherheitenInitialisieren bei Rundenende erzeugt.
  • Auswahl von Überfallsopfern: Dafür gibt es die Funktion VW.getUeberfallOpferInLand