Da sich die Fragen zu Spielinhalten und Spielmechanik häufen, gibt es ab jetzt eine Google Group in der diskutiert werden kann:
Category Archives: WS1112
Einleitung
ColdIron ist ein Multiplayer Echtzeit Strategiespiel. Es spielt in einer längst vergangenen Zeit, in der neben den Rohstoffen Holz und Stein insbesondere Eisen von unschätzbaren Wert ist. Um diesen Rohstoff kämpfen verschiedene Stämme und bekriegen sich auf dem Schlachtfeld mit Schwertkämpfern, Bogenschützen, Ritter und schweren Katapulten. Das Ziel ist simpel: Nur einer kann Herrscher über den kalten Stahl werden!
Die Kämpfe werden auf verschiedenen Schlachtfeldern (Karten) ausgetragen, die aus verschiedenen Sektoren bestehen. Auf jedem Sektor können die Stämme verschiedene Rohstoffe finden die zum Bau von Gebäuden und Einheiten benötigt werden.
Spielablauf
- Um am Kampf um den Rohstoff teilzunehmen, muss zunächst in der Lobby ein Spiel erzeugt werden:CREATE GAME <gamename> (-players (<user>+))? (-map <mapname>)?Der Spielname kann frei gewählt werden. Optional können die erlaubten Spielernamen und die gewünschte Karte angegeben werden.
- Dem erzeugten Spiel können dann verschiedene Spieler beitreten:JOIN GAME <gamename> (Siehe Command Beschreibung)
- Nachdem einem Spiel beigetreten wurde, wechselt der Server in das JSON Protokoll. Als nächstes muss der Startsektor gewählt werden:CHOOSE_SECTOR (Siehe Command Beschreibung)
- Sobald man bereit ist, kann das Spiel gestartet werden:START_GAME (Siehe Command Beschreibung)Das Spiel wird erst gestartet, wenn alle am Spiel teilnehmenden Spieler einen Startsektor gewählt haben!
- Die Spielsimulation startet und jeder Spieler bekommt regelmäßig Updates über die aktuelle Spielsituation. Zu Beginn erhält jeder Spieler ein Hauptgebäude (Stronghold), eine Farm sowie 3 Arbeiter (Peons). Nun sollte durch abbauen von Ressourcen, errichten von Gebäuden und erzeugen von Einheiten dafür gesorgt werden, dass die anderen Stämme möglichst schnell in die Schranken gewiesen werden.
Spielelemente
In diesem Abschnitt soll ein Überblick über die in ColdIron vorkommenden Spielelemente gegeben werden.
Karten
Karten besitzen einen Namen und bestehen aus Sektoren, die einer bestimmten Weise angeordnet sind. Sie können beliebig groß werden, die kleinste Karte hat 2×2 Sektoren. Wichtig: Die Anordnung der Sektoren kann auch Formen wie z.B. eine “H-Form” annehmen. Hier fehlen bspw. die Sektoren mit der Koordinaten (1,0) und (1,2). Inseln (d.h. nicht verbundene Sektoren) kommen nicht vor!
Sektoren
Ein Sektor besitzt 2D-Koordinaten die die Position des Sektors auf der Karte angeben. Hier bezeichnet die Koordinate (0,0) die linke obere Ecke der Karte und (n,n) die rechte untere Ecke der Karte. Sektoren beherbergen eine begrenzte Anzahl von Ressourcen die abgebaut werden können. Zudem können auf Sektoren Gebäude errichtet und Einheiten positioniert werden.
Ressourcen
Ohne Ressourcen läuft nichts. In ColdIron gibt es 3 verschiedene Arten von Ressourcen:
- Wald
- Stein
- Eisen
Nicht jede Ressource ist auf jedem Sektor zu finden!
Gebäude
In Gebäuden werden auf Sektoren gebaut und produzieren in der Regel Einheiten. Gebäude gibt es in verschiedenen Ausbaustufen, die wiederrum das Bauen besserer Einheiten erlauben.
WICHTIG: Da das Balancing der Spielsimulation noch nicht abgeschlossen ist, können sich die bei Level X angegebenen Werte noch ändern!
Gebäude | Beschreibung | Level 1 | Level 2 | Level 3 |
---|---|---|---|---|
Stronghold | Hauptgebäude. Im Hauptgebäude werden Arbeiter (Peons) erzeugt die Ressourcen abbauen und Gebäude errichten können. | HP: 1000 Bauzeit: 50s Ressourcen:
|
HP: 2000 Bauzeit: 70s Ressourcen:
Benötigt:
|
HP: 5000 Bauzeit: 90s Ressourcen:
Benötigt:
|
Farm | Farmen erhöhen das Bevölkerungslimit. | HP: 400 Bauzeit: 20s Ressourcen:
Benötigt:
Ermöglicht:
|
— | — |
Barrack | In Barracken werden Einheiten rekrutiert. Es können Schwertkämpfer, Bogenschützer und Ritter rekrutiert in verschiedenen Leveln rekrutiert werden. | HP: 500 Bauzeit: 30s Ressourcen:
Benötigt:
Ermöglicht:
|
HP: 750 Bauzeit: 40s Ressourcen:
Benötigt:
Ermöglicht:
|
HP: 1000 Bauzeit: 50s Ressourcen:
Benötigt:
Ermöglicht:
|
Forge | In der Schmiede können schwere katapulte gebaut werden. | HP: 800 Bauzeit: 90s Ressourcen:
Benötigt:
Ermöglicht:
|
— | — |
Tower | Verteidigungstürme die mit Bogenschützen besetzt werden können. | HP: 800 Bauzeit: 40s Ressourcen:
Benötigt:
Ermöglicht:
Besonderheit:
|
HP: 1200 Bauzeit: 60s Ressourcen:
Benötigt:
Ermöglicht:
Besonderheit:
|
HP: 2000 Bauzeit: 80s Ressourcen:
Benötigt:
Ermöglicht:
Besonderheit:
|
Einheiten
Im Folgenden eine Übersicht über die in ColdIron vorkommenden Einheiten und wo diese erzeugt werden können.
WICHTIG: Da das Balancing der Spielsimulation noch nicht abgeschlossen ist, können sich die bei Level X angegebenen Werte noch ändern!
Einheit | Beschreibung | Gebäude | Level 1 | Level 2 | Level 3 |
---|---|---|---|---|---|
Peon | Peons sind einfache Arbeiter. Sie werden zum Abbau von Ressourcen, sowie zum Aufbauen und Reparieren von Gebäuden benötigt | Stronghold | HP: 20 Stärke: 1 Bauzeit: 5sRessourcen:
|
— | — |
Swordsman | Schwertkämpfer sind die klassischen Nahkampfeinheiten. Bestückt mit Schwert und Schild schlagen sie ihre Feinde in die Flucht. | Barrack | HP: 30 Stärke: 3 Bauzeit: 10s Ressourcen:
Benötigt:
|
HP: 70 Ressourcen:
Benötigt:
|
HP: 100 Ressourcen:
Benötigt:
|
Archer | Agile Bogenschützen greifen ihren Feind aus der Ferne an und sind insbesondere in Verteidigungstürmen von großem Nutzen. | Barrack | HP: 20 Stärke: 4 Bauzeit: 10sRessourcen:
Benötigt:
Besonderheit:
|
HP: 50 Stärke: 7 Bauzeit: 20s Ressourcen:
Benötigt:
Besonderheit:
|
HP: 70 Stärke: 10 Bauzeit: 40s Ressourcen:
Benötigt:
Besonderheit:
|
Knight | Auf dem Pferd unterwegs bewegen sich Ritter schnell über das Schlachtfeld und stecken den ein oder anderen Treffer gut weg. | Barrack | HP: 40 Stärke: 5 Bauzeit: 20sRessourcen:
Benötigt:
|
HP: 80 Stärke: 8 Bauzeit: 40s Ressourcen:
Benötigt:
|
HP: 120 Stärke: 11 Bauzeit: 60s Ressourcen:
Benötigt:
|
Catapult | Ein schweres Katapult welches zum zerstören von Gebäuden besonders nutzvoll ist. | Forge | HP: 200 Stärke: 20 Bauzeit: 60sRessourcen:
Benötigt:
Besonderheit:
|
— | — |
Befehle
Eine genaue Auflistung aller möglichen Befehle ist hier zu finden: Command Beschreibung. Falls ein Befehl nicht korrekt ausgeführt werden kann, bekommt der Spieler eine Fehlermeldung vom Server. Typische Fehler sind:
- Befehl existiert nicht
- Syntax ist nicht korrekt. Es könnten z.B. nötige Parameter fehlen.
- Befehl ist nicht ausführbar. Beispiele:
- Vorraussetzungen sind nicht erfüllt
- Es wird versucht gegnerische Einheiten zu befehligen
Der Server spricht generell ein zeilenbasiertes String Protokoll. Daher kann man eine telnet Verbindung benutzen um das Protokoll zu erkunden. Nach dem öffnen einer Konsole und der Eingabe von
telnet se1.cs.uni-kassel.de 5000
kann man mit HELP
eine Liste aller verfügbaren Befehle abrufen.
Allgemeine Informationen
- Um sich beim Server anzumelden, benötigt man zunächst einen eigenen Login. Diesen bekommt ihr von eurem Betreuer beim nächsten Treffen.
- Jedes erfolgreiche Kommando wird vom Server mit einem
OK
beendet. Fehler werden mit einer Zeile beantwortet die mitERROR
beginnt. - Der Server kommuniziert durch zwei verschiedene Protokollarten:
- “Klartextprotokoll”: Bei einloggen und in der Lobby verwendet der Server ein simples “Klartextprotokoll” um mit seinen Clients zu kommunizieren.
- JSON-Protokoll: Nach einem erfolgreichen
JOIN GAME
Kommando das mitOK
bestätigt wurde wechselt der Server in ein JSON basiertes Protokoll, bei dem er JSON codierteEvents
verschickt und JSON codierteCommands
erwartet. - Um einen Timeout zu vermeiden sollte vom Client in regelmäßigen abständen ein
NOOP
geschickt werden.
Klartextprotokoll
Sobald man eine Verbindung zum Server aufgebaut hat, kommuniziert dieser mit einem simplen Klartextprotokoll mit dem Client. Nicht alle Befehle sind überall verfügbar. Eine genaue Auflistung inkl. Gruppierung der Befehle liefert der HELP Befehl. Hier eine Übersicht über die verschiedenen Befehle:
- Immer:
- HELP <command>
- Nach der Begrüßung vom Server:
- LOGIN (<login>|<email>) <password>
- LOGOUT
- Nach dem Anmelden:
- LIST USERS
- LIST GAMES
- CREATE GAME <gamename> (-players (<user>)+)? (-map <mapname>)?
- JOIN GAME <gamename> (-visitor [true|false])?
- MSG (ALL)? ( ( USER | TEAM ) <recipient> ) )? <message>
- CHANGE PASSWORD <newPassword> <newPassword>
JSON Protokoll
Das Ingame JSON Protokoll kennt in Serverrichtung Commands und in Clientrichtung Events.
Commands
Die Commands müssen mindestens ein action
Attribut enthalten welches folgende Werte annehmen kann (keys in Klammern sind optional):
Action | Keys | Beispiel | Bemerkung |
---|---|---|---|
NOOP |
keiner | {"@action":"NOOP"} |
Command der in regelmäßigen Abständen abgeschickt werden kann, um die Verbindung aufrecht zu erhalten. |
CHOOSE_SECTOR |
sector |
{"@action":"CHOOSE_SECTOR","properties":{"entry":{"key":"sector","value":"Sector@1a3b6f"}}} |
Wählt den Startsektor aus. sector muss eine ID sein. |
START_GAME |
keiner | {"@action":"START_GAME"} |
Startet das spiel wenn jeder Spieler einen Startsektor gewählt hat. |
LEAVE_GAME |
keiner | {"@action":"LEAVE_GAME"} |
Verlässt das aktuelle Spiel. |
CREATE_BUILDING |
sector, buildingtype | {"@action":"CREATE_BUILDING","properties":{"entry":{"key":"sector","value":"Sector@d54a23"},"entry":{"key":"buildingtype","value":"STRONGHOLD"}}} |
Baut ein Gebäude vom Typ buildingtype im angegebenen Sektor. |
DROP_BUILDING |
building | {"@action":"DROP_BUILDING","properties":{"entry":{"key":"building","value":"Stronghold@d43b23"}}} |
Das Gebäude wird zerstört. Falls das Gebäude noch nicht fertig gebaut wurde, bekommt man seine Ressourcen zurück. Es können nur eigene Gebäude zerstört werden. |
CREATE_UNIT |
building, unittype, (level)? | {"@action":"CREATE_UNIT","properties":{"entry":{"key":"building","value":"Stronghold@d54a23"},"entry":{"key":"unittype","value":"PEON"},"entry":{"key":"level","value":"1"}}} |
Erzeugt eine Einheit vom gewünschten Typ im per ID übergebenen Gebäude mit dem gewünschten Level. Ist kein Level angegeben wird das maximal mögliche verwendet. Falls bereits eine Einheit in diesem Gebäde erzeugt wird oder das übergebene Level zu hoch für das Gebäude ist, wird ein Error erzeugt. |
BUILD_UP |
building, peons | {"@action":"BUILD_UP","properties":{"entry":{"key":"building","value":"Stronghold@5974b827"}, "entry":{"key":"peons","value":"Peon@ghz4b827,Peon@ghz4b333"}}} |
Veranlasst die gewählten peons am angegebenen Gebäude zu arbeiten. |
MOVE_UNITS |
units,target | {"@action":"MOVE_UNITS","properties":{"entry":{"key":"units","value":"Knight@d54a23,Swordsman@d533uf"},"entry":{"key":"target","value":"Sector@1a3b6f"}}} |
Versetzt die angegebenen units an das angegebene target. Peons können zu Ressourcen geschickt werden. Swordsman, Knights, Catapults und Archer können auf Sektoren geschickt werden. Archer können zusätzlich Tower besetzen. |
UPGRADE |
building, level | {"@action":"UPGRADE","properties":{"entry":{"key":"building","value":"Stronghold@5974b827"}, "entry":{"key":"level","value":"2"}}} |
Wertet das entsprechende Gebäude auf die gewählte Stufe auf (falls möglich) |
REPAIR |
building, peons | {"@action":"REPAIR","properties":{"entry":{"key":"building","value":"Stronghold@5974b827"}, "entry":{"key":"peons","value":"Peon@ghz4b827,Peon@ghz4b333"}}} |
Repariert das Gebäude building mit den angegebenen Peons. |
CREATE_ALLIANCE |
name, (color)? | {"@action":"CREATE_ALLIANCE","properties":{"entry":{"key":"name","value":"MyAlliance"}, "entry":{"key":"color","value":"FFFF00"}}} |
Legt eine neue Allianz mit dem übergebenen Namen und, wenn verhanden, der gewählten Farbe an. Der erzeugende User wird der Allianz automatisch hinzugefügt. |
JOIN_ALLIANCE |
alliance | {"@action":"JOIN_ALLIANCE","properties":{"entry":{"key":"alliance","value":"Alliance@1924b867"}}} |
Fügt den User der gewählten Allianz hinzu. Falls er sich nicht bereits in einer Allianz befindet, wechselt er in die neue Allianz. |
DELETE_ALLIANCE |
alliance | {"@action":"DELETE_ALLIANCE","properties":{"entry":{"key":"alliance","value":"Alliance@1924b867"}}} |
Löscht die Allianz. Dies kann nur durch ein Mitglied der Allianz erfolgen. |
LEAVE_ALLIANCE |
keiner | {"@action":"LEAVE_ALLIANCE"} |
Du verlässt deine Allianz, falls du dich in einer befindest. |
CHANGE_ALLIANCE_COLOR |
alliance, color | {"@action":"CHANGE_ALLIANCE_COLOR","properties":{"entry":{"key":"alliance","value":"Alliance@1924b867"}, "entry":{"key":"color","value":"FFFF00"}}} |
Ändert die Allianzfarbe. Dies kann nur durch ein Mitglied der Allianz erfolgen. |
CHANGE_USER_COLOR |
color | {"@action":"CHANGE_USER_COLOR","properties":{"entry":{"key":"color","value":"FFFF00"}}} |
Ändert die Userfarbe. |
MESSAGE |
message, (audience)?, (recipient)? | {"@action":"MESSAGE","properties":{"entry":{"key":"message","value":"Hallo"},"entry":{"key":"audience","value":"USER"},"entry":{"key":"recipient","value":"zenobios"}}} |
Verschickt eine Nachricht an alle oder den angegebenen User/Team/Allianz. Der Parameter audience erlaubt folgende Werte: ALL, USER, TEAM, ALLIANCE. Folgende Kombinationen von audience und recipient sind möglich:
audience: leer, recipient:leer -> Nachricht wird an alle User im Spiel geschickt audience: ALL, recipient:leer -> Nachricht wird an alle User im Spiel geschickt audience: USER, recipient:leer -> Nachricht wird nicht verschickt audience: TEAM, recipient:leer -> Nachricht wird an das eigene Team geschickt audience: ALLIANCE, recipient:leer -> Nachricht wird an die eigene Allianz verschickt, falls der sendende User einer Allianz angehört Events, die durch diesen Command ausgelöst werden übergeben die Art der Message mit, um im Client eine Unterscheidung durchführen zu können. Mögliche Werte sind: ERROR, MESSAGE, PUBLIC_MESSAGE, USER_MESSAGE, TEAM_MESSAGE, ALLIANCE_MESSAGE |
Events
Der Server schickt Events in der Form
{"@ts":"199027638079229","@src":"Player@1f8882e","@prop":"name","@nv":"ascharf","@ov":"zenobios"}
In diesem Fall wurde zum Timestamp 199027638079229 von der source Player@1f8882e die property name von zenobios (old value) auf ascharf (new value) geändert.
Wer sich die Events vom Server genauer anschaut wird feststellen, dass Werte die null
sind in JSON wegoptimiert werden.
Tipp: Das nötige Datenmodell lässt sich größtenteils aus dem Eventstream ableiten.
Hier gibt es Informationen zum Inhalt der einzelnen Releases: SE1 WS 11/12 Release-Planung. Wie im Dokument bereits angemerkt, handelt es sich dabei nur um Richtlinien – genaue Anforderungen müssen mit dem Kunden abgestimmt werden!
SE1WS1112L04SocketHandling.avi
http://www.json.org/java/index.html where you find the org.json Project
https://github.com/douglascrockford/JSON-java/downloads where you find the source as zip for download
SE1WS1112K03Testen.avi (No sound for the last 15 minutes. Sorry.)