Das SE1 Turnier findet Freitag, 28.07.2015 um 13 Uhr im SE-Labor statt.
Tag Archives: ZombieFighter
Unter http://wasp-enterprises.de/2015/07/17/anforderungen-release-4-2/ können die verbindlichen Mindestanforderungen zu Release 4 eingesehen werden.
Der Doodle Kalender Besprechungstermine wurde ebenfalls aktualisiert.
Unter http://wasp-enterprises.de/2015/06/25/anforderungen-release-3/ können die verbindlichen Mindestanforderungen zu Release 3 eingesehen werden.
Der Doodle Kalender Besprechungstermine wurde ebenfalls aktualisiert.
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. |
START_GAME |
keiner | {"@action":"START_GAME"} |
Startet das Spiel wenn jeder Spieler ein Startfeld gewählt hat. |
LEAVE_GAME |
keiner | {"@action":"LEAVE_GAME"} |
Verlässt das aktuelle Spiel. |
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. Der Parameter audience erlaubt folgende Werte:ALL, USER, TEAM.Folgende Kombinationen von audience und recipient sind möglich:audience: leer, recipient:leer -> Nachricht wird an alle User im Spiel geschicktaudience: leer, recipient:nicht leer -> Nachricht wird nicht verschicktaudience: ALL, recipient:leer -> Nachricht wird an alle User im Spiel geschickt audience: ALL, recipient:nicht leer-> Nachricht wird nicht verschicktaudience: USER, recipient:leer -> Nachricht wird nicht verschickt audience: USER, recipient:username -> Nachricht wird an user username verschicktaudience: TEAM, recipient:leer -> Nachricht wird an das eigene Team geschickt audience: TEAM, recipient:teamname -> Nachricht wird an das Team teamname verschicktEvents, 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 |
CHANGE_USER_COLOR |
color | {"@action":"CHANGE_USER_COLOR","properties":{"entry":{"key":"color","value":"FFFF00"}}} |
Ändert die Userfarbe. |
CHOOSE_FIELD |
field | {"@action":"CHOOSE_FIELD","properties":{"entry":{"key":"field","value":"Field@1a3b6f"}}} |
Wählt das Startfeld aus. field muss eine ID sein. |
CREATE_DEFENSE |
defensetype, cell | {"@action":"CREATE_DEFENSE","properties":{"entry":{"key":"defensetype","value":"SWASH"},"entry":{"key":"cell","value":"Cell@d54a23"}}} |
Baut eine Verteidigungsanlage des Typs defensetype auf der Zelle cell . |
CHANGE_DEFENSE |
defense, action | {"@action":"CHANGE_DEFENSE","properties":{"entry":{"key":"defense","value":"Defense@d43b23"},"entry":{"key":"action","value":"SELL"}}} |
Die Verteidigungsanlage defense kann mit diesem Command angepasst werden. Es stehen folgende zwei Werte für action zur Auswahl:SELL – Die Verteidigungsanlage wird verkauft. Der Verkauf bringt 75% des Kaufpreises ein. Es können nur eigene Verteidigungsanlage verkauft werden.
UPGRADE – Wertet die Verteidigungsanlage um ein Level auf, wenn möglich. |
CHANGE_DEFENSE_STRATEGY |
defense, strategy | {"@action":"CHANGE_DEFENSE_STRATEGY","properties":{"entry":{"key":"defense","value":"Defense@5974b827"}, "entry":{"key":"strategy","value":"FASTEST"}}} |
Wechselt die Strategie der Verteidigungsanlage mit der ID defense auf die Strategie strategy . Es stehen folgende Strategien zur Auswahl:CLOSEST, FASTEST, STRONGEST, FARTHEST, WEAKEST |
CREATE_ZOMBIE |
zombietype | {"@action":"CREATE_ZOMBIE","properties":{"entry":{"key":"zombietype","value":"CHASER"}}} |
Erzeugt einen Zombie des Typs zombietype |
Events
Der Server schickt Events in der Form
{"@ts":"1336475335153","@src":"User@a4d93e3","@prop":"nickname","@nv":"akoch"}
In diesem Fall wurde zum Timestamp 1336475335153 von der source User@a4d93e3 die property nickname auf akoch (new value) geändert.
Wer sich die Events vom Server genauer anschaut wird feststellen, dass Werte die null
sind in JSON wegoptimiert werden. In diesem Beispiel fehlt z.B. die Property @ov.
Tipp: Das nötige Datenmodell lässt sich größtenteils aus dem Eventstream ableiten.
Einleitung
ZombieFight ist ein Multiplayer Tower Defense Spiel. Jeder Spieler hat die Kontrolle über seinen eigenen Sektor und kann dort an bestimmten Stellen (abhängig von der Karte) Verteidigungsanlagen bauen. Seinen Gegnern kann er Zombies schicken, die dann durch deren Verteidigungsanlagen zerstört werden müssen. Schafft es ein gegnerischer Zombie durch die eigenen Verteidigungslinien, verliert der Spieler 1 Leben. Sind alle 20 Leben aufgebraucht, verliert der Spieler.
Der Spieler, der am Längsten durchhält, gewinnt!
Spielablauf
- Um an ZombieFight teilzunehmen, muss zunächst in der Lobby ein Spiel erzeugt werden:
CREATE GAME <gamename> -players <count> (-map <mapname>)? (-testgame)?
Der Spielname kann frei gewählt werden. Optional kann die gewünschte Karte angegeben und festgelegt werden, ob es sich bei dem Spiel im ein Testspiel handelt. Bei Testspielen bekommt jeder Spieler 100 Leben und hat eine “Balance” (sozusagen der Kontostand des Spielers) von 100000. Bei normalen Spielen hat jeder Spieler 20 Leben und eine “Balance” von 200.
- Einem erzeugten Spiel können andere Spieler beitreten: JOIN GAME <gamename>
- Nachdem einem Spiel beigetreten wurde, wechselt der Server in das JSON Protokoll. Als nächstes muss der Startsektor gewählt werden: CHOOSE_TILE
- Sobald man bereit ist, kann das Spiel gestartet werden: START_GAME. Das Spiel wird erst gestartet, wenn alle am Spiel teilnehmenden Spieler einen Startsektor gewählt haben!
- Die Spielsimulation startet und jeder Spieler bekommt die initiale Spielwelt sowie regelmäßig Updates in Form von Events über die aktuelle Spielsituation zugeschickt. Nun sollte man durch geschicktes Aussenden von Zombies und Bauen von Verteidigungsanlagen versuchen, seine Gegner zur Strecke zu bringen.
- Jeder Spieler hat ein regelmäßiges Einkommen, mit dem er Verteidigungsanlagen und Zombies finanzieren kann. Alle 15 Sekunden bekommt er sein aktuelles “Income” auf sein “Balance” aufaddiert. Das “Income” kann nur gesteigert werden, indem man seinen Gegnern Zombies schickt. Dabei gilt: Je stärker der Zombie umso stärker steigt das Income. Der Schlüssel zum Sieg liegt daher in einer gesunden Mischung von Offensive und Defensive.
Spielelemente
In diesem Abschnitt soll ein Überblick über die in ZombieFight vorkommenden Spielelemente gegeben werden.
Karten
Jeder Spieler spielt auf einer 16 x 16 Felder großen Karte. Jedes dieser Felder besitzt einen der folgenden drei Zustände:
- NONE (Hier kann keine Verteidigungsanlage gebaut werden und kein Zombie kann diese Zelle betreten)
- DEFENSE (Hier können Verteidigungsanlagen gebaut werden, jedoch kann kein Zombie diese Zelle betreten)
- WALKABLE (Weg für Zombies, hier kann keine Verteidigungsanlage gebaut werden)
Jede Karte wird über eine Startzelle betreten und über eine Endzelle verlassen. Zudem besitzt jede Karte ein Hintergrundbild. Ein komplettes Spiel entsteht dann durch jeweilige 90° Drehung der Karte. Beim Design einer Karte ist es also wichtig, dass die Start- und Endzelle so gelegt wird, dass nach einer 90° Drehung die Startzelle der gedrehten Karte an die Endzelle der ersten Karte grenzt.
Ein Beispiel eines Spiels ist in folgendem Screenshot zu sehen:
Hier ist gerade ein 3-Spieler Spiel zu sehen. Die Startzelle von Spieler 1 befindet sich in seinem Kartenteil unten links, die Endzelle oben rechts. Durch 90° Drehung der Karte wird das Spielfeld von Spieler 2 erstellt. Die Endzelle von Spieler 1 grenzt nun also an die Startzelle von Spieler 2.
Zombies
Hier gibt es eine Übersicht über alle verfügbaren Zombies sowie deren Charakteristik. “Price” zeigt die Kosten zum Kauf eines Zombies, diese werden von der eigenen “Balance” abgezogen. “Health” gibt die Lebenspunkte an. “Speed” gibt die Geschwindigkeit in Wegpunkten pro Sekunde an. “Income” beschreibt den Wert, der auf den “Income” Wert des Spielers aufaddiert wird. “Bounty” gibt die Belohnung an, wenn ein Zombie zur Strecke gebracht wird.
Creep | Price | Health | Speed | Income | Bounty |
---|---|---|---|---|---|
Walker | 50 | 300 | 1.4 | 5 | 5 |
Vomiter | 100 | 700 | 1.3 | 10 | 10 |
Runner | 250 | 1400 | 1.6 | 25 | 25 |
Destroyer | 500 | 3500 | 1.0 | 50 | 50 |
Sleeper | 1000 | 7000 | 1.2 | 90 | 90 |
Hider | 2000 | 14000 | 1.3 | 180 | 180 |
Chaser | 4000 | 30000 | 1.8 | 360 | 360 |
Titan | 8000 | 80000 | 1.2 | 720 | 720 |
Kicker | 15000 | 140000 | 1.4 | 1200 | 1200 |
Biter | 25000 | 250000 | 1.5 | 2000 | 2000 |
Jumper | 40000 | 500000 | 2.0 | 3200 | 3200 |
Big Boss | 60000 | 1200000 | 1.3 | 4800 | 4800 |
Hiker | 100000 | 1500000 | 1.3 | 7000 | 7000 |
Burner | 200000 | 2500000 | 1.6 | 14000 | 14000 |
Fast Runner | 400000 | 6000000 | 2.8 | 28000 | 28000 |
Brainiac | 1000000 | 15000000 | 1.4 | 56000 | 56000 |
Schickt ein Spieler einen Zombie, startet der Zombie bei der Startzelle des im Uhrzeigersinn nächsten Spielers. Schafft der Gegner es, den Zombie zur Strecke zu bringen, erhält dieser den für den Zombie ausgeschriebenen “Bounty”. Schafft der Gegner dies nicht, betritt der Zombie automatisch die Karte des nächsten Spielers. Bei einem 2-Spieler Spiel, startet der Zombie dann sofort wieder beim Gegner, d.h. selbst ausgesandte Zombies betreten NICHT die eigene Karte.
Defense
Im Folgenden eine Übersicht aller Verteidigungsanlagen. Hier eine Erläuterung einiger Attribute:
- Cooldown: Gibt die Zeit in Millisekunden an, die die Anlage zum erneuten Feuern benötigt.
- Color: Visualisiert das Anlagenlevel
- Range: Die Reichweite der Anlage in Anzahl Zellen
- Slowrate: Gibt den Faktor an, um den Zombies verlangsamt werden
- Slowtime: Gibt die Dauer des Sloweffects in Millisekunden an
- Splash radius: Gibt den Radius in Anzahl Zellen an
- Splash damage reduction: Gibt an, um wieviel Prozent der Schaden am äußersten Rand des “Splash radius” reduziert wird, d.h. beschießt eine Anlage mit Splash-Fähigkeit einen Zombie, bekommen alle Zombies in dessen Umgebung ebenfalls Schaden. Dabei gilt: Je näher sich ein Zombie am ursprünglich beschossenen Zombie befindet, desto mehr Schaden bekommt er.
Verteidigungseinheit | Description | Level | Price | Cooldown (ms) | Color | Range | Damage | Slowrate | Slowtime(ms) | Splash radius | Splash damage reduction |
---|---|---|---|---|---|---|---|---|---|---|---|
Small | – | 1 | 50 | 650 | 00ff00 | 1.75 | 25 | – | – | – | – |
Small | – | 2 | 100 | 650 | 0000ff | 2.0 | 50 | – | – | – | – |
Small | – | 3 | 1000 | 650 | ff0000 | 2.25 | 250 | – | – | – | – |
Small | – | 4 | 3000 | 650 | ffc800 | 2.5 | 1000 | – | – | – | – |
Frost | slows target | 1 | 100 | 750 | 00ff00 | 1.75 | 25 | 0.3 | 2000 | – | – |
Frost | slows target | 2 | 200 | 800 | 0000ff | 2.25 | 50 | 0.35 | 2000 | – | – |
Frost | slows target | 3 | 400 | 850 | ff0000 | 2.5 | 75 | 0.45 | 2500 | – | – |
Frost | slows multiple targets | 4 | 3000 | 900 | ffc800 | 2.5 | 100 | 0.5 | 2500 | 1.25 | 0.7 |
Swash | attacks multiple targets | 1 | 250 | 750 | 00ff00 | 2.0 | 50 | – | – | 1.75 | 0.7 |
Swash | attacks multiple targets | 2 | 750 | 600 | 0000ff | 2.25 | 200 | – | – | 1.75 | 0.7 |
Swash | attacks multiple targets | 3 | 3000 | 500 | ff0000 | 2.75 | 400 | – | – | 1.75 | 0.6 |
Swash | attacks multiple targets | 4 | 7500 | 500 | ffc800 | 3.0 | 1100 | – | – | 1.75 | 0.5 |
Boom | attacks multiple targets | 1 | 1000 | 3750 | 00ff00 | 2.5 | 1000 | – | – | 1.25 | 0.8 |
Boom | attacks multiple targets | 2 | 3000 | 3750 | 0000ff | 3.0 | 2500 | – | – | 1.25 | 0.8 |
Boom | attacks multiple targets | 3 | 7500 | 3250 | ff0000 | 3.5 | 7500 | – | – | 1.5 | 0.7 |
Boom | attacks multiple targets | 4 | 15000 | 3000 | ffc800 | 4.0 | 15000 | – | – | 1.75 | 0.6 |
Tempo | – | 1 | 1000 | 450 | 00ff00 | 2.5 | 225 | – | – | – | – |
Tempo | – | 2 | 3000 | 350 | 0000ff | 2.75 | 450 | – | – | – | – |
Tempo | – | 3 | 7500 | 250 | ff0000 | 3.0 | 1100 | – | – | – | – |
Tempo | – | 4 | 15000 | 150 | ffc800 | 3.25 | 1800 | – | – | – | – |
Big Bang | – | 1 | 20000 | 5000 | 00ff00 | 5.0 | 25000 | – | – | – | – |
Big Bang | – | 2 | 50000 | 2500 | ffc800 | 7.5 | 40000 | – | – | – | – |
Befehle
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 eine gegnerische Anlage zu verkaufen
- …
Unter http://wasp-enterprises.de/2015/05/26/anforderungen-release-2/ können die verbindlichen Mindestanforderungen zu Release 2 eingesehen werden.