Examensarbeit

Transcription

Examensarbeit
Inhaltsverzeichnis
Danksagung
3
1 Einleitung
4
1.1
Der wachsende Markt der Casual Games
. . . . . . . . . . . . . . . . . .
4
1.2
Auf der Suche nach einer geeigneten Mehrspieleranbindung . . . . . . . .
5
1.3
Anforderung an ein 3D Lobbysystem
6
. . . . . . . . . . . . . . . . . . . .
2 Derzeitige Lobby und Matchmakingsysteme in Multiplayerspielen
7
2.1
Command and Conquer: Generals . . . . . . . . . . . . . . . . . . . . . .
7
2.2
World of Warcraft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
2.3
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
3 Entwurf eines eigenen Konzeptes für eine 3D Lobby
14
3.1
Grundlegende Benutzerführung und Zustände des Lobbysystems . . . . .
14
3.2
Kameraführung und Steuerung
. . . . . . . . . . . . . . . . . . . . . . .
15
3.3
Matchmaking
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
3.3.1
Intuitives Matchmaking
. . . . . . . . . . . . . . . . . . . . . . .
17
3.3.2
Erschaen von Rauminstanzen . . . . . . . . . . . . . . . . . . . .
18
3.4
Umgebung und Physik
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.5
Kommunikation zwischen Spielern . . . . . . . . . . . . . . . . . . . . . .
20
3.6
Codedesign
21
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6.1
Leichte Anpassbarkeit an neue Inhalte
. . . . . . . . . . . . . . .
21
3.6.2
Weitgehende Unabhängigkeit vom Design des Multiplayerspiels . .
21
3.7
Neuerungen
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
3.8
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
4 Implementation des Lobbysystems
24
4.1
Die verwendeteten C++ Bibliotheken . . . . . . . . . . . . . . . . . . . .
24
4.2
Grundelemente und Lobbyzustände . . . . . . . . . . . . . . . . . . . . .
27
1
Inhaltsverzeichnis
4.3
4.4
4.2.1
Grundlegendes Design von Client und Server
. . . . . . . . . . .
27
4.2.2
Client Zustände und deren Aufgaben
. . . . . . . . . . . . . . . .
28
4.2.3
Modizierbarkeit mit Hilfe von Scripten und Datenbanken
. . . .
32
. . . . . . . . .
33
4.3.1
Erzeugung von Entities . . . . . . . . . . . . . . . . . . . . . . . .
34
4.3.2
Eingesetzte Game Entities . . . . . . . . . . . . . . . . . . . . . .
35
4.3.3
Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
Aufbau des Lobby Clients durch Entities und Properties
Das Client/Server System
. . . . . . . . . . . . . . . . . . . . . . . . . .
39
4.4.1
Aufbau des Servers . . . . . . . . . . . . . . . . . . . . . . . . . .
41
4.4.2
Übermitteln von Bewegungs- und Positionsdaten
. . . . . . . . .
42
4.4.3
Übersicht: Verwendete Kommunikationsstreams
. . . . . . . . . .
43
4.5
Wechsel zwischen Lobby und Multiplayerspiel
. . . . . . . . . . . . . . .
47
4.6
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
5 Test und Auswertung der Implementation
51
5.1
Testsysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
5.2
Testprogramme und Erweiterungen
52
5.3
. . . . . . . . . . . . . . . . . . . . .
5.2.1
Simulation von Wide Area Network Bedingungen
. . . . . . . . .
52
5.2.2
Erzeugung von Pseudo Clients . . . . . . . . . . . . . . . . . . .
52
Serverauslastungstests
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
5.3.1
Maximale Anzahl von Spielern . . . . . . . . . . . . . . . . . . . .
53
5.3.2
Zusammenhang zwischen Serverreaktionszeit und Botaktivität
. .
55
5.3.3
Gleichzeitiger Login von vielen Clients
. . . . . . . . . . . . . . .
57
5.4
FPS Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
5.5
Wahrnehmung von steigender Latenz
59
. . . . . . . . . . . . . . . . . . . .
6 Zusammenfassung und Ausblick
61
6.1
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
6.2
Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
7 Glossar
63
8 Screenshots
71
Abbildungsverzeichnis
75
Literaturverzeichnis
77
2
Inhaltsverzeichnis
Danksagung
An dieser Stelle möchte ich mich bei Prof. Dr.-Ing. Detlef Krömker für die Möglichkeit eine Arbeit über dieses Thema zu verfassen, sowie bei Dr. Tobias Breiner für die
Hilfe bei der Themenndung und Betreuung dieser Arbeit.
Desweiteren geht mein besonderer Dank an die Leiter der Zeal und Spielkind Gmbh,
Boris Triebel, Marc Kamradt sowie damals Matthias Schindler, die es mir ermöglichten
die Implementierung dieser Arbeit bei ihnen vorzunehmen. Für die Unterstützung im
Umgang mit spezischen Nebula/Mangalore Funktionen und inspirierende Gespräche
über Spiel und Programmdesign möchte ich mich zudem bei Rafael Van Daele-Hunt bedanken. Für die Hilfe bei 3D Studio Max und dem Nebula 2 Exporter möchte ich mich
bei Christian Kleinsteinberg bedanken.
Mein ganz besonderer Dank geht an meine Eltern Renate und Hans-Joachim Bufe, sowie
meine Freundin Julia Fey, die sich viel Zeit für das Korrekturlesen der Arbeit genommen
haben und mich während des Studiums immer unterstützten.
3
1 Einleitung
In diesem Abschnitt werden wir uns mit der Motivation der Thematik beschäftigen sowie
Grundbegrie klären, damit diese in den weiteren Kapiteln verwendet werden können.
Diese und weitere Begrie können zudem im Glossar, nachgeschlagen werden.
1.1 Der wachsende Markt der Casual Games
Noch immer streben die meisten Konzepte von Computerspielen in Richtung einer komplexeren und realistischeren (meist kampfbetonten) Spielewelt. Diese sogenannten Core
Games haben den klassischen Computerspieler vor Augen, der im Alter bis 30 Jahren
- meist männlich - genug Geduld und Zeit hat, sich in die komplexe Spielewelt einzuarbeiten und einzutauchen.
1
Dem Gegenüber stehen die sogenannten Casual Games,
die auf einfache Konzepte setzen, die sich durch intuitive Bedienung und schnelle Erfolgserlebnisse auszeichnen sollen. Mit den Casual Games wird von der Industrie somit
beabsichtigt eine neue Zielgruppe zu erschlieÿen, die sich von den bisherigen Core Games
nicht angesprochen fühlt. Als erstes Casual Game wird oft das mit Microsoft Windows
3.x ausgelieferte Solitäre bezeichnet.
Auf der Game Convention Developer's Conference 2005 beschreibt Jessica Turns in ihrem Vortrag den typischen Casual Spieler wie folgt:
Ein Casual Gamer ist jemand, der sich selbst nicht als Gamer betrachtet,
und der sich nicht dafür interessiert, Spiele-Titel zu kaufen, die über den
Einzelhandel vertrieben werden wie z. B. Halo oder Warcraft III. Casual
Gamers lesen keine Spiele-Zeitschriften, sie reden selten mit ihren Freunden
über das Spielen und Spielen hat für sie keine vorrangige Bedeutung. Casual
Gamers sind durchschnittlich 45 Jahre alt, weiblich und verheiratet -weisen
also eine fast entgegengesetzte Demographie auf als die klassischen GamerZielgruppen.
2
1 Quelle[17]
2 Quelle[1]
4
1 Einleitung
Abbildung 1.1: Ein klassisches Casual Game:
Solitäre
Derzeit wächst der Markt der Casual Games rasant, die Spielerzahlen verdoppeln sich
alle ein bis zwei Jahre und allein in den USA werden bis 2008 Umsätze um die zwei
Milliarden US-Dollar erwartet.
1.2 Auf der Suche nach einer geeigneten
Mehrspieleranbindung
Ebenso wie die Casual Games ist auch der Markt der Online Spiele in einem rasanten Wachstum, besonders Europa bietet hier noch laut einer Studie von Screen Digest
[2] viel Potential. Da mittlerweile ein Groÿteil der europäischen Haushalte über einen
Internetzugang verfügt, ist dies nicht sehr verwunderlich und ebnet auch den Weg für
Multiplayer Casual Games. Also Casual Games die Online über ein Netzwerk, wie das
Internet gespielt werden können.
Ein zentrales Problem, welches der Entwickler eines solchen Projektes lösen muss, ist
die Frage: Wie lasse ich einen Spieler entscheiden mit wem er ein Spiel starten will?
Dieser Prozess, wie man einen Spieler mit oder gegen ein oder mehrere andere antreten lässt, wird auch als Matchmaking bezeichnet. Viele Core Games präsentieren hier
ihr Matchmaking in einer nüchternen Liste, die alle verfügbaren Spiele verzeichnet und
zumeist viele zusätzliche Informationen wie Ping, Beliebtheit, Art des Spiels etc. besitzt. Dieses Konzept wird jedoch einen Casual Gamer nur wenig ansprechen, da er mit
diesen vielen, zunächst abstrakten Beschreibungen nur wenig anfangen kann und nicht
5
1 Einleitung
die Geduld oder Zeit besitzt sich in diese einzuarbeiten. Zudem schätzen viele Spieler,
die in eine Mehrspielerpartie einsteigen, nicht nur das spannende Spiel mit/gegen einen
anderen Menschen sondern auch zwischenmenschliche Interaktion wie Unterhaltung.
So ist es sinnvoll, dass Kommunikationsmöglichkeiten, wie z.B. ein Austausch von Textnachrichten, nicht erst im Spiel geschaen werden, sondern noch vor dem Matchmaking.
Dies erönet den potentiellen Spielern die Möglichkeit sich gegenseitig kennenzulernen,
so dass man im Vorraus entscheiden kann mit wem man ein Spiel beginnen will und wer
nicht in Frage kommt. Solche Systeme werden auch als Lobby bezeichnet. Es bezeichnet
parallel zu einer Lobby, die im richtigen Leben einen Empfangsraum darstellt, den Raum
der betreten wird, bevor das eigentliche Spiel beginnt und in dem man sich entscheiden
kann mit wem in welchem Spiel gespielt werden soll. Bisher nden Lobby Systeme zur
Gestaltung des Matchmakings eher wenig Verwendung, in einigen Spielen beschränkt
sich die Lobby auf einen Chat. Viele Multiplayer Casual Games versuchen den Spieler
automatisch nach eigenen Kriterien mit einem Mitspieler zu verbinden, um den Prozess
des Matchmakings so einfach wie möglich zu halten und so dem Casual Gamer entgegen
zu kommen.
1.3 Anforderung an ein 3D Lobbysystem
Ziel dieser Arbeit soll es jedoch sein, eine solche Lobby zu entwickeln, die den Benutzer
mit anderen Spielern in einer virtuellen 3D Umgebung interagieren lassen soll und dort
auch die Möglichkeit des Matchmaking bietet. Dabei sollte die Steuerung für den Spieler
so intuitiv wie möglich geschehen, damit Einarbeitungsphasen vermieden werden und
sie so u.a. für Casual Gamer interessant wird. Das Matchmaking sollte dabei auch sehr
intuitiv erscheinen, in dem sich z.B. die Spieler an einen Tisch setzen und so miteinander
spielen können.
Von der Entwickler Seite ist zudem zu beachten, dass das Entwickeln des Spieles nicht
zu sehr durch die Lobby eingeengt wird. Das heiÿt, dass das eigentliche Spiel zunächst
unabhängig von der Lobby entwickelt werden kann und nur über festgelegte Schnittstellen mit dieser kommuniziert, jedoch u.a. in der Wahl des Szenegraphen unabhängig
bleiben soll.
6
2 Derzeitige Lobby und
Matchmakingsysteme in
Multiplayerspielen
Um einen Überblick über derzeitige Lobby und Matchmakingsysteme zu bekommen,
betrachten wir zunächst einige ausgewählte aktuelle Multiplayer Spiele. Im Anschluÿ
stellen wir anhand dieser State of the Art Analyse ein eigenes Konzept für die zu
realisierende Lobby auf.
2.1 Command and Conquer: Generals
CC:Generals ist als ein klassischer Vertreter des Echtzeitstrategie(RTS) Genres mit komplexen Inhalten klar im Bereich der Core Games ansiedeln. Wie bei vielen Vertretern
der RTS, ist die Multiplayer Komponente hier von groÿer Bedeutung. Aus diesem Grund
entwickelte
Electronic Arts: Los Angeles
ein komplexes Lobbysystem um den Spielern
einen komfortablen Einstieg in Multiplayer Spiele zu geben. So werden neben einem
Chat indivduelle Prole und eine persönliche Freundesliste bereitgestellt, die allerdings
eine Anmeldung des Spielers erforderlich macht.
Spielerprol
Jeder Spieler besitzt ein eigenes Prol, das auch für andere Spieler einsehbar ist. Hier
werden neben den Siegen, Niederlagen und den Abbrüchen einer Partie u.a. auch das
angegebene Herkunftsland des Spielers sowie Medaillen für spezielle, erreichte, Einsatzziele aufgelistet. Anhand dieser Daten ist es potenziellen Mitspielern möglich, die Stärke
ihres Gegners oder Mitspielers vor Spielbeginn abzuschätzen und so zu entscheiden ob
eine Partie sinnvoll erscheint.
7
2 Derzeitige Lobby und Matchmakingsysteme in Multiplayerspielen
Kommunikator/Freundesliste
Eine weitere sinnvolle Erweiterung des Lobbysystems ist die Buddylist oder auch Freundesliste genannt. Hier kann jeder Spieler andere befreundete Spieler hinzufügen und ihren
derzeitigen Online-Status sehen. Das heiÿt man kann direkt nach Betreten der Lobby
erkennen, ob ein Freund online ist und in welchem Spiel er sich anmeldet oder spielt.
Auch ist es so möglich diesem eine Nachricht über den sog. Kommunikator zu schicken
oder sich in dessen Spiel einzuklinken, sofern dieses noch nicht begonnen hat.
Lobby
Die eigendliche Lobby ist als Chat mit mehreren sog. Chaträumen realisiert, die nach
der nationalen Herkunft oder auch nach dem gewünschten Spieltyp organisiert sind.
Zusätzlich zu dem Chat existiert eine Liste oener Spiele, in die man sich, mit einem
Doppelklick, einklinken kann und so zum Matchmaking geleitet wird. Hier wird u.a. die
Zusammenstellung der Teams etc. durchgeführt. Auch kann hier schon eine Vorauswahl
möglicher Spielpartner durchgeführt werden, da zusätzlich zu der Selektion durch den
Austausch von Textnachrichten auch die Prole einzelner Spieler eingesehen werden
können.
Abbildung 2.1: Die Lobby ist in mehrere Räume unterteilt
8
2 Derzeitige Lobby und Matchmakingsysteme in Multiplayerspielen
Matchmaking
Sobald sich der Spieler in der Lobby für ein Spiel entschieden oder ein eigenes erönet hat, gelangt er zu dem Matchmaking Dialog. Dieser zeigt detaillierte Informationen
über das Spiel an und bietet mit einem integrierten Chat die Möglichkeit, sich abzusprechen,Teams zu bilden und seine bevorzugte Spielpartei zu wählen. Nachdem jeder
Spieler auf einen Akzeptiert Button geklickt hat, und so signalisiert, dass er bereit
ist das Spiel zu starten, kann der Host -derjenige der die Partie erönet hat- das Spiel
starten.
Abbildung 2.2: Der Matchmaking Dialog
Der Host hat zudem als einziger die Rechte, alle Spieloptionen einzustellen und Spieler
aus der Partie auszuschlieÿen. Sobald der Host das Spiel verlässt, wird bei allen Mitspielern der Matchmaking Dialog geschlossen und sie nden sich in der Lobby wieder.
Fazit
Die
CC: Generals
Lobby bietet mit umfangreichen Prolen und der Freundesliste viel
Komfort für den einzelnen Spieler. Es ist möglich, Spiele zu starten bei denen beide Parteien vergleichbar stark sind. User, die spezielle Spieleinstellungen bevorzugen, können
dank der verschiedenen Chat Räume schnell ein geeignetes Spiel erönen oder einem
vorhandenen beitreten. Für Neueinsteiger gestaltet sich die Suche nach einem Spiel allerdings schwieriger, zum Einen werden Spieler mit wenigen Spielen in ihrem Prol oft
aus vielen Spielen ausgeschlossen, da nur wenige Leute mit Neulingen spielen möchten. Zum Anderen gibt es einige Spieler, die es besonders erstrebenswert nden gegen
Neueinsteiger zu gewinnen, um so ihr Prol aufzubessern.
9
2 Derzeitige Lobby und Matchmakingsysteme in Multiplayerspielen
2.2 World of Warcraft
World of Warcraft, das derzeitig erfolgreichste MMORPG, lässt den Nutzer eine riesige
3D Umgebung mit gleichzeitig Tausenden von Mitspielern entdecken. Obwohl in World
of Warcraft keine Lobby im bisher erwähnten Stil existiert, möchte ich einige Aspekte des Spieles hier näher betrachten. In diesem Spiel wie auch in der zu realisierenden
Lobby, müssen ähnliche Probleme gelöst werden: Wie lasse ich Spieler in einer 3D Umgebung miteinander interagieren/kommunizieren und auf welche Weise wird mit der groÿen
Anzahl von gleichzeitig eingeloggten Nutzern umgegangen?
Visualisierung und Umgebung
Bevor sich der Nutzer auf einem Server in das Spiel einloggt, muss er sich zunächst einen
individuellen Avatar anhand von verschiedenen Eigenschaften und Körpermerkmalen zusammenstellen oder einen bereits vorhandenen auswählen. Nachdem Avatar und Eigenschaften ausgewählt worden sind, kann der Spieler sich mit einem Server verbinden, um
das Spiel zu beginnen.
Steuerung und Kameraführung
Der Nutzer steuert seinen gewählten Avatar mit der Tastatur in der Szene, dabei zeigt
die Kamera diesen aus Sicht der dritten Person. Die Kamera kann hierbei zusätzlich mit
Hilfe von Mausbewegung und Scrollrad in Entfernung und Winkel ausgerichtet werden,
um die Übersicht zu erhöhen.
Kommunikation mit anderen Spielern
Der Austausch von Textnachrichten mit anderen Spielern kann entweder in sogenannten
Channels, öentlich oder über Privatnachrichten erfolgen.
Wird eine Textnachricht über einen Channel gesendet, kann diese von allen Spielern gelesen werden die sich im selben Channel benden, unabhängig wie groÿ die Entfernung
in der Spielwelt zwischen Sender und Empfänger ist. Verschiedene Channels übernehmen
hierbei in der Regel unterschiedliche Aufgaben, so dass z.B. ein Channel für Gruppensuche oder Handeln existiert.
Privatnachrichten hingegen werden nur zwischen zwei Spielern gesendet. Dies wird auch
oft als üstern bezeichnet, da sie von keinem anderen Spieler eingesehen werden können.
Verschickt der Spieler eine öentliche Nachricht, ist sie für alle Spieler im Umkreis sicht-
10
2 Derzeitige Lobby und Matchmakingsysteme in Multiplayerspielen
Abbildung 2.3: Screenshot: Charakterauswahl in World of Warcraft
bar und erscheint zusätzlich als Sprechblase über dem eigenen Avatar. Der Spieler hat
zudem die Möglichkeit, die Nachricht zu schreien, d.h. die Nachricht wird rot dargestellt
und der Umkreis in dem diese empfangen wird erhöht sich drastisch.
Matchmaking
Es handelt sich bei World of Warcraft zwar nicht um eine Lobby, die in ein Spiel führen
soll jedoch ndet hier auch eine Art - meiner Meinung nach sehr intiutives - Matchmaking
statt, das ich hier kurz vorstellen möchte.
Die meisten der Aufgaben die der Nutzer in World of Warcraft erlebt, kann er alleine
bestreiten. Jedoch existieren auch schwierigere Teile, sogenannte Instanzen, die nur von
Spielergruppen gelöst werden können - wie zum Beispiel der Angri auf eine gegnerische
Burg. Für jede Gruppe, die diesen festgelegten Bereich - die Instanz - betritt, wird eine
Kopie des Gebietes angelegt, so dass unabhängig mehrere Gruppen dieselbe Aufgabe
erfüllen können ohne sich gegenseitig zu begegnen, da jede Gruppe in ihrer eigenen Kopie
11
2 Derzeitige Lobby und Matchmakingsysteme in Multiplayerspielen
Abbildung 2.4: Visualisierung der Kommunikation mit Hilfe von
Sprechblasen
des Gebietes spielt. Diese Gruppen bestehen üblicherweise aus fünf Spielern, jedoch gibt
es auch Aufgaben, die nur für Gruppen mit 40 Mitgliedern vorgesehen sind.
Die Zusammenstellung ist dabei den Spielern überlassen, sie können so Bekannte in ihre
Gruppe einladen oder über Textnachrichten zusätzliche Mitglieder rekrutieren. Diese
treen sich dann vor dem Eingang der Instanz, um diese zu betreten und ihre Aufgabe
- die zumeist im Besiegen eines Endgegners besteht - zu erfüllen.
Der Vorgang des Matchmaking, also das Zusammennden der Spieler und Beginnen
der Instanz fügt sich also direkt in das Spiel ein, ohne als Fremdkörper zu wirken.
Dadurch, dass jede Instanz als eine Kopie für die jeweilige Gruppe angelegt wird, ist
es möglich, dass nahezu beliebig viele Spieler dasselbe Abenteuer erleben können, ohne
sich zu behindern.
Fazit
Obwohl es sich bei diesem Spiel nicht um eine Lobby handelt, sind sehr interessante
Aspekte für die Visualisierung einer interaktiven Multiplayer 3D Anwendung zu sehen. Ebenso wie hier die Kommunikation zwischen vielen Spielern gelöst wurde, ist das
Matchmaking für eine Instanz sehr intuitiv für die Spieler durchführbar.
Jedoch wurden in dieser kurzen Beschreibung von World of Warcraft lediglich die Aspek-
12
2 Derzeitige Lobby und Matchmakingsysteme in Multiplayerspielen
te, welche für die zu realisierende Lobby interessant erscheinen aufgegrien.
2.3 Zusammenfassung
In diesem Abschnitt haben wir zwei aktuelle Spiele auf ihre Lobby und Matchmaking
Fähigkeiten untersucht.
Zum Einen die Mehrspieleranbindung des Echtzeitstrategiespieles Command and Conquer als Vertreter für eine klassische Lobby in Core Games. Neben dem Einstieg in das
Spiel bietet das Lobbysystem den Nutzern die Möglichkeit, Textnachrichten auszutauschen, Spielstatistiken von Mitspielern einzusehen und mit diesen über eine Freundesliste
in Kontakt zu bleiben, sowie zu organisieren. Zum Anderen wurde World of Warcraft
untersucht. Obwohl hier keine Lobby existiert, wurden in diesem Spiel einige Probleme
gelöst, die auch für das nun zu realisierende Lobbyprojekt von grundlegender Bedeutung
sind. So wurde hier unter anderem betrachtet, wie viele Spieler gleichzeitig in einer virtuellen, dreidimensionalen Umgebung miteinander kommunizieren und auf welche Weise
diese sich zu Gruppen für gröÿere Aufgaben organisieren können. Ausgehend von den
gewonnenen Erkenntnissen wollen wir im nächsten Kapitel versuchen ein eigenständiges
Konzept für unser Lobbysystem zu entwerfen.
13
3 Entwurf eines eigenen Konzeptes
für eine 3D Lobby
Im vorhergehenden Kapitel haben wir in einer State of the Art Analyse verschiedene
aktuelle Lobbysysteme untersucht. Von diesen Kenntnissen ausgehend werden wir nun
ein eigenes Konzept aufstellen und dieses dann im nächsten Kapitel umsetzen.
3.1 Grundlegende Benutzerführung und Zustände des
Lobbysystems
Zunächst muss eine Struktur geschaen werden, die der Lobby zugrunde liegt. Der Einstieg in die Lobby geschieht, wie wir in den Beispielen gesehen haben, mit einem Login
Dialog, in dem der Nutzer seinen Avatar wählen kann und sich mit seinen Daten wie
z.B. seinem gewünschten Benutzer und ggf. seinem Passwort einloggt. Dies ist zum Einen
sinnvoll, um dem Benutzer einen gewohnten Einstieg in die Lobby zu geben und zum
Anderen kann dieser auf diese Weise schnell die von ihm gewählten Einstellungen einsehen und ändern.
Nach der Eingabe der Daten verbindet sich der Spieler mit dem Lobby Server und gelangt
in den eigentlichen Lobby Bereich. Falls bei der Verbindung mit dem Server Probleme
auftreten oder die gewählten Daten ungültig sind, wird der Benutzer mit einer entsprechenden Fehlermeldung wieder zum Login Dialog zurück geleitet.
Im Lobby Bereich ndet die Kommunikation unter den Spielern und das Matchmaking
statt. Wenn ausreichend Mitspieler für eine Partie gefunden worden sind, kann das Spiel
starten und die Teilnehmer werden aus der Lobby entfernt. Nachdem das Spiel beendet
wurde, kehren sämtliche Spieler wieder in die Lobby zurück. Falls in der Lobby oder
im Spiel ein kritischer Fehler (wie z.B. ein Verbindungsabbruch zum Server) auftritt,
wird der Spieler wieder zum Login Dialog zurückgeleitet. Dies kann ebenso manuell vom
Benutzer über das Drücken eines Logout Buttons erreicht werden.
14
3 Entwurf eines eigenen Konzeptes für eine 3D Lobby
Abbildung 3.1: Grundzustände des Lobbysystems
3.2 Kameraführung und Steuerung
In dem einleitenden Kapitel haben wir als Motivation für ein 3D Lobbysystem, eine
Multiplayer Anbindung gesehen, die nicht nur für Core, sondern auch für Casual Gamer
geeignet sein soll. Die Grundzustände des Lobbysystems aus dem vorherigen Abschnitt
orientieren sich bisher an klassischen Modellen, wie wir diese in der Analyse der Beispiele
in Kapitel 2 gesehen haben. Wenn ein Unterschied zu diesen für den Benutzer geschaen
werden soll, muss dies in der eigentlichen Lobby sowie im Matchmaking geschehen. Wie
der Titel dieser Arbeit beschreibt, sollen die Benutzer als 3D Avatare die Lobby betreten
und so interagieren können.
Bevor wir uns mit den genauen Details der Steuerung und der Interaktion der Spieler
beschäftigen, muss geklärt werden aus welcher Position die virtuelle Kamera die Szene
erfasst und wie diese auf den Spieler reagiert. Hierbei möchte ich mich auf die drei
geläugsten Kamera-Modelle für benutzergesteuerte Kameras beschränken.
•
First Person
Bei der
rst person
Ansicht wird die Szene aus der Sicht des Avatars gezeigt. Der
Avatar wird also (bis auf ggf. die Extremitäten) nicht direkt vom Spieler gesehen,
welches eine bessere Identikation mit dem gespielten Charakter ermöglichen soll.
•
Third Person
Die
third person Kamera zeigt die Szene aus der dritten Person, meist leicht schräg
von oben, der Sichtwinkel kann dabei oft vom Nutzer gesteuert werden. Ein Vorteil dieser Ansicht ist eine gröÿere Übersicht über die Szene, da der Spieler auch
Bereiche einsehen kann, die unmittelbar neben und hinter seinem Avatar liegen.
15
3 Entwurf eines eigenen Konzeptes für eine 3D Lobby
•
Frei schwebende Kamera
Im Gegensatz zu den beiden ersten Kamerapositionen ist diese Position der Kamera
nicht an einen speziellen Avatar gebunden, sondern bewegt sich vom Benutzer
gesteuert frei im Raum. Diese Perspektive wird oft gewählt, wenn der Benutzer
keinen Avatar verkörpert, wie z.B. in 3D Grakprogrammen.
Da der eigene Avatar in einer Lobby von zentraler Bedeutung ist, eignet sich eine frei
schwebende Kamera hier wenig. Das Interesse des Spielers liegt zumeist bei seinem eigenen Avatar, daher ist es am sinnvollsten eine Kameraführung zu wählen, die die Kamera
an diesen xiert und somit diesem Zentrum des Interesses folgt. Es muss also entschieden
werden, ob die Kamera die Szene aus der
third- oder der rst person
Perspektive zeigt.
Da die geeignete Kameraposition auch von der gewählten Art der Benutzersteuerung
abhängt, möchte ich zunächst auf diese eingehen.
Ich beschränke mich hier auf die Steuerung mit Standardeingabegeräten und vernachlässige somit z.B. Kontrollmöglichkeiten mit Hilfe eines Gamepads, da diese an den
wenigsten Computern zu nden sind.
•
Steuerung mit der Tastatur
Der Nutzer steuert seinen Avatar mit Hilfe der Pfeiltasten (oder einer alternativen
Tastaturbelegung) durch die Szene. Üblicherweise bewegt sich hier der Spieler mit
den Pfeiltasten oben/unten vor, zurück und mit links/rechts wird eine Drehung
in die entsprechende Richtung vorgenommen. Diese Art der Kontrolle war bereits
in frühen 3D Spielen wie z.B. Doom, welches im Dezember 1993 erschienen ist,
vertreten.
•
Steuerung mit der Maus
Bei der Steuerung mit Hilfe der Maus wird der Avatar kontrolliert, indem der
Nutzer mit dem Mauscursor auf eine Position in der Szene klickt, zu der sich der
Avatar bewegen oder mit der er interagieren soll. Eine hier bestehende Schwierigkeit ist, dass der zu wählende Weg vom Computer berechnet werden muss, damit
z.B. Hindernisse umgangen werden.
•
Steuerung mit der Tastatur und Maus
Diese Art der Steuerung hat gröÿtenteils die ausschlieÿliche Kontrolle des Spielers
mit der Tastatur abgelöst. Der Nutzer steuert zwar weiterhin die Bewegung seiner
Figur mit den Pfeil oder auch häug den WASD Tasten, jedoch wird der Charakter mit Hilfe der Maus ausgerichtet, d.h. das Drehen der Figur mit der Tastatur
16
3 Entwurf eines eigenen Konzeptes für eine 3D Lobby
ist nun überüssig und die rechts/links Tasten bewirken einen Seitschritt in die
entsprechende Richtung.
Die Maus und Tastatur Steuerung ist von allen drei Kontrollmöglichkeiten die am
schwersten zu erlernende, da das gleichzeitige Ausrichten mit der Maus und Bewegen mit
der Tastatur erst nach ein wenig Übung problemlos funktioniert. In modernen Spielen
ist sie dennoch oft die erste Wahl, da sie eine sehr präzise und schnelle Bewegung in der
Szene ermöglicht.
In dieser Arbeit sollen jedoch auch Nutzer angesprochen werden, die diese Steuerung
noch nicht kennengelernt haben oder denen es an Motivation fehlt sich in diese einzuarbeiten. Aus diesem Grund will ich von der Verwendung dieser Eingabemöglichkeit als
Standard absehen. Die Maussteuerung bietet gegenüber der Tastatureingabe eine einfachere Interaktion mit der Umgebung, z.B. können andere Spieler, denen eine private
Nachricht geschickt werden soll, einfach angeklickt werden. Ein weiterer Vorteil dieser
Variante stellt die automatische Navigation zum Zielpunkt dar, die einsetzt nachdem
der Nutzer an die gewünschte Stelle geklickt hat. Der Spieler kann sich so mehr auf die
Interaktion mit anderen Personen und das Matchmaking konzentrieren, als darauf zu
achten, dass er nicht gegen Hindernisse in der Szene läuft.
Mit der Wahl der Maussteuerung bietet sich auch die
third person
Ansicht an, da sie
Dank der Sicht von leicht oben ein Klicken auf die gewünschte Bewegungszielposition
erleichtert und die erforderliche Übersicht bietet.
3.3 Matchmaking
Das Matchmaking ist die zentrale Aufgabe jeder Lobby. Da wir in diesem Projekt eine
3D Lobby schaen wollen, können wir die Möglichkeiten dieser Umgebung nutzen, um
dies auch für unerfahrene Nutzer intutiv zugänglich zu machen.
3.3.1 Intuitives Matchmaking
Wenn sich Spieler im realen Leben auf einem Brettspieleabend oder in einem Kasino
eine Partie suchen oder anders gesagt das Matchmaking durchführen, setzen sie sich
zumeist nach einer kurzen Unterhaltung an einen Tisch, um das Spiel zu beginnen. Das
Matchmaking beginnt also schon mit dem Kennenlernen zwischen den Spielern bevor
sich diese gemeinsam zu einer Partie zusammensetzen und endet mit dem Beginn der
Spielpartie.
17
3 Entwurf eines eigenen Konzeptes für eine 3D Lobby
Ebenso soll das Matchmaking in diesem Projekt gestaltet werden. Der erste Teil - das
Kennenlernen und Unterhalten - wird durch die Möglichkeit des Chattens und der freien
Bewegung in der Lobbyszene geschaen. Es ist also sinnvoll, den zweiten Teil - also
das Zusammensetzen und Starten eines Spieles - ebenso zu gestalten wie es der Nutzer
aus ggf. real erlebten Spieleabenden kennt. Aus diesem Grund werden wir in diesem
Projekt das Matchmaking an virtuellen Tischen stattnden lassen. Hierbei stellt jedes
Polygonmodell eines Tisches ein seperates Spiel dar. Freie Plätze sind durch unbesetzte
Stühle, belegte Plätze durch besetzte Stühle am Tisch erkennbar. Der Nutzer kann also
sofort intuitiv sehen, ob Plätze in einem Spiel frei sind, ob Personen teilnehmen, die er
vielleicht kennt oder ob er das Spiel lieber meiden möchte, weil ihm die anderen Spieler
nicht zusagen.
3.3.2 Erschaen von Rauminstanzen
Ein Problem, welches sich beim Aufstellen von jenen Matchmaking Tischen zwangsläug
stellt, ist die Frage wieviele Spieler sind gleichzeitig in meiner Lobby und entsprechend
wieviele Tische sollen aufgestellt werden. Es ist momentan möglich, dass an jedem Spieltisch schon eine Person Platz genommen hat und man mit seinem gewünschten Spielepartner kein Spiel starten kann. Wenn, um dies zu vermeiden, eine sehr groÿe Anzahl
von Spieltischen aufgestellt wird, kann sich der Nutzer verloren fühlen und verliert sich
vielleicht in diesem riesigen Raum voller Tische.
Es sollte also ein System gefunden werden, das je nachdem wieviele Nutzer in der Lobby
sind bzw. an Spielen teilnehmen wollen, mehr Tische erönet. Die direkteste Möglichkeit wäre es im Lobbyraum entsprechende Tische erscheinen zu lassen bzw. zu entfernen.
Für die Spieler könnte man dieses Erscheinen/Verschwinden, bei einer guten Umsetzung
glaubwürdig darstellen lassen. Beispielsweise könnten vom Computer gesteuerte Polygon
Helfer einen Tisch aus einem für den Nutzer nicht zugänglichen Teil der Lobby herreintragen und so neue Matchmaking Plätze schaen. Jedoch ist die eigentliche Lobbyszene
immer noch in ihrer virtuellen Gröÿe begrenzt und es können also nicht beliebig viele
Tische hinzugefügt werden ohne die Lobby selbst zu vergröÿern.
Aus diesem Grund will ich in diesem Projekt einen anderen Ansatz verfolgen. Zunächst
teilen wir die Lobby auf in eine Eingangsszene, in der die Spieler nach ihrem Login oder
dem Beenden ihrer Partie erscheinen und in, von dieser aus zu betretenden, Matchmaking Szenen. In diesen Matchmaking Räumen benden sich die beschriebenen Tische,
an denen die Spielpartien gestartet werden können. Der Nutzer erreicht die Spielräume
aus der Lobby, indem er einen bestimmten Bereich betritt, z.B. vor einem Aufzug und
18
3 Entwurf eines eigenen Konzeptes für eine 3D Lobby
über ein GUI Dialog auswählt in welchen Raum er möchte. Die Matchmaking Räume
unterscheiden sich entsprechend nur durch die Spieler, die sich in ihnen benden. Es können also beliebig viele Instanzen von Ihnen parallel existieren. Wenn alle Räume belegt
sind bekommen Spieler, die den Übergangsbereich in der Eingangsszene betreten, neue
Räume angeboten. Falls sehr viele Räume leer sind, können diese einfach geschlossen
werden.
Abbildung 3.2: Zustände eines Clients innerhalb der Lobby
Ein weiterer positiver Eekt dieses Systems ist die Entlastung des Netzwerks, da die
Daten z.B. über die Bewegung nur innerhalb eines Raumes ausgetauscht werden und
nicht mehr an alle eingeloggten Nutzer geschickt werden müssen.
3.4 Umgebung und Physik
Bisher haben wir uns mit dem groben Aufbau, der Kameraführung, der Steuerung sowie
dem Matchmaking unseres Lobby Projektes beschäftigt. Ein weiterer wichtiger Punkt
ist, wie Kollisionen zwischen Avatar und Umgebung und speziell zwischen Avatar und
Avatar gehandhabt werden sollen.
Die Handhabung von Kollisionen eines Avatars und der Umgebung lassen wenig Spielraum zu. Sobald ein Charakter auf ein Hindernis stöÿt, muss dieser stehen bleiben oder
einen alternativen Weg wählen. Die eigentliche Herausforderung wird eine korrekte Navigation sein, falls der Nutzer einen Bewegungszielpunkt für seinen Avatar wählt, der
nicht direkt ohne Hindernisse erreichbar ist. Falls diese perfekt funktioniert, könnten
theoretisch alle Kollisionen, bis auf die Bodenkollision, vernachlässigt werden, da sämtliche Hindernisse automatisch von einer Navigationsroutine umgangen werden.
Bei einer Kollision zwischen zwei Spieler Avataren haben wir jedoch die Möglichkeit entweder nicht zu reagieren, d.h. sämtliche Spieler können durcheinander hindurchlaufen
oder wir beachten sie und Spieler können aneinander hängenbleiben. Falls es möglich
19
3 Entwurf eines eigenen Konzeptes für eine 3D Lobby
ist, dass Avatare sich gegenseitig blockieren können, kann dies sehr schnell für Frust sorgen. Dies gilt speziell, wenn viele Spieler in einen kleinen Raum wollen, wie z.B. in die
Zone, die den Raumwechsel zwischen dem Lobby Eingang und den Matchmakingräumen
ermöglicht. Dieses Konzept hat sich bereits im MMORPG World of Warcraft, welches
wir in unserer
State of the Art Analyse
in Kapitel 2 betrachtet haben, bewährt. Aus
diesen Gründen werden Kollisionen zwischen Avataren in meiner Arbeit ebenfalls nicht
beachtet werden. Diese Wahl bringt als positiven Nebeneekt eine Entlastung des Spieleservers mit sich, da dieser nun keine Kollisionen zwischen Spielern berechnen muss.
Dies spart Ressourcen in Form von Rechenkraft und Bandbreite, die anderen Bereichen
zu gute kommen könnnen.
3.5 Kommunikation zwischen Spielern
Spieler sollen in dieser Lobby mit Hilfe von Textbotschaften kommunizieren können. Es
wäre jedoch wenig befriedigend, wenn dies nur in einem kleinen Gui Fenster geschieht.
Da ein zentraler Punkt der Lobby und speziell des Matchmakings die Kommunikation zwischen den Nutzern ist, muss direkt erkenntlich sein, von welchen Spieleravatar
eine Nachricht stammt. Ein bereits in anderen Spielen und speziell im letzten Kapitel
verwendetes Mittel, um dies zu erreichen, sind Sprechblasen über dem Avatar, die den
gesendeten Text oder falls dieser zu lang ist, nur einen Teil beinhalten. Wahlweise können diese Sprechblasen je nach Entfernung skaliert werden oder zur besseren Lesbarkeit
sich mit der Entfernung zu der Kamera nicht verändern. Die Sprechblasen müssen sich
jedoch nach einem zu wählenden Zeitraum wieder ausblenden, damit die Szene nicht an
Übersichtlichkeit einbüÿt. Aus diesem Grund ist jedoch auch ein kleines Gui Fenster, in
dem die Textnachrichten aufgelistet werden, unerlässlich um den Verlauf einer Unterhaltung festzuhalten.
Oft wollen Nutzer jedoch Nachrichten senden, die nicht für jeden sichtbar sind, sondern
nur für einen speziellen Mitspieler. Dieses Versenden von privaten Nachrichten wird oft
üstern
genannt. Das Flüstern zwischen Spielern sollte sich in die Steuerung so gut wie
möglich integrieren. Da die Interaktion zwischen Objekten und das Festlegen eines Bewegungszielpunkts eben mit einem einfach Klick auf die gewünschte Stelle geschieht, ist
es sinnvoll, durch einen Klick auf einen Spieler einen
Flüstern Dialog
gezielt Nachrichten an diese Person gesendet werden können.
20
zu önen, mit dem
3 Entwurf eines eigenen Konzeptes für eine 3D Lobby
3.6 Codedesign
In den vorherigen Abschnitten dieses Kapitels haben wir ein Konzept für das Erscheinungsbild und die Benutzerführung des Lobbysystems erarbeitet. Ein weiterer, für den
Endbenutzer nicht sichtbarer, aber sehr wichtiger Teil ist die Organisation des Quellcodes. Dieser bestimmt wie leicht oder wie schwer die Lobby an unterschiedliche Anforderungen angepasst werden kann, wie zum Beispiel die Lokalisation in andere Sprachen
oder die Verwendbarkeit in anderen Projekten. In der Einführung haben wir unter anderem eine mögliche Verwendung in Casual Games gesehen, da jedoch bei deren Entwicklung das Budget verständlicherweise knapp ist, muss sich eine Lobby leicht ohne groÿen
Aufwand anpassen lassen.
3.6.1 Leichte Anpassbarkeit an neue Inhalte
Ein Leitprinzip, welches hier gelten soll: Es werden möglichst wenige Daten in den Quellcode hart implementiert. Vielmehr sollten fast alle Informationen über externe Dateien
einstellbar sein. Sämtliche Einstellungen können z.B. aus Xml Tabellen eingelesen werden und so leicht modizierbar sein ohne den Quelltext erneut compilieren zu müssen.
Da sich dieses Lobby System sehr leicht an existierende Spiele mit unterschiedlichen
Designs anpassen lassen soll, ist es sinnvoll sämtliche Meshes, Texturen, Animation und
Level Dateien wie z.B. das Routing Mesh zur Navigation, über externe Dateien einstellen
zu können.
3.6.2 Weitgehende Unabhängigkeit vom Design des
Multiplayerspiels
Ebenso wie sich das Lobbysystem durch eine einfache Modizierbarkeit auszeichen soll,
ist es notwendig, dass das eigentliche Spiel nicht durch die Lobby eingeengt wird und nur
über wenige festgelegte Schnittstellen mit der Lobby kommuniziert. So soll die Engine
des Spieles unabhängig von der des Lobby Systems wählbar sein und sich ungefähr wie
in dem in Abb. 3.3 beschriebenen Pseudocode behandeln lassen. Dabei sind folgende
Schnittstellen unerlässlich: Übergabe der Mitspielerdaten, wie z.B. Name oder die IP
Adressen, an das Spiel und die Fenster ID, damit das Spiel in das Lobby Fenster rendern
kann ohne ein neues önen zu müssen.
21
3 Entwurf eines eigenen Konzeptes für eine 3D Lobby
Ein grober Ablauf kann wie folgt aussehen :
1.
Führe die Lobby aus, bis der Benutzer eine Mehrspielerpartie startet
2.
Übergebe sämtliche Daten von der Lobby an das Spiel
3.
Führe das Spiel aus, bis es endet
4.
Reaktiviere die Lobby und gehe zu 1.
Abbildung 3.3: Pseudocode: Übergang zwischen Lobby Client und Spiel
22
3 Entwurf eines eigenen Konzeptes für eine 3D Lobby
3.7 Neuerungen
Im Gegensatz zu bisherigen Lobbysystem, wird hier in erster Linie die Realisierung als
3 dimensionale Umgebung und nicht als Chat verfolgt. Zwar existieren bereits Programme in denen sich Nutzer als Avatare in einer 3D Szene bewegen sowie kommunizieren
können. Jedoch verstehen sich diese nicht als Lobby zu einem Spiel und bieten somit
keine Matchmaking Funktionalitäten, welche jedoch bei unserem Projekt realisiert werden sollen. Das Matchmaking nutzt dabei die 3D Umgebung um vom Nutzer so intutiv
wie möglich durchführbar zu sein. Viele Probleme, die in einer 3D Lobby bei groÿen
Spielerzahlen auftreten können wurden zudem durch ein Instanz/Raum System gelöst.
3.8 Zusammenfassung
In diesem Kapitel haben wir ein Konzept für das Lobby Projekt erstellt. Neben einer
third Person Ansicht haben wir uns für eine Point and Click Maussteuerung entschieden.
Die Nutzer Avatare kollidieren nicht miteinander und kommunizieren über ein Sprechblasen/Chat Dialog System. Das Matchmaking ndet in seperaten Räumen statt und
die Nutzer setzen sich hierzu an virtuelle Tische.
Zudem wurden einige wichtige Punkte für das Codedesign festgelegt, um eine Integration in Spiele zu erleichtern. Im folgenden Abschnitt werden wir nun versuchen, dieses
Konzept umzusetzen und das Ergebnis auswerten.
23
4 Implementation des Lobbysystems
In diesem Kapitel werden zunächst die in der Implementation zusätzlich verwendeten
C++ Bibliotheken kurz vorgestellt. Im Anschluss wird die praktische Umsetzung des
Projektes behandelt sowie auftretende Probleme und die verwendeten Lösungen ausführlich beschrieben. Zum Abschluss dieses Abschnitts wird die implementierte Lobby
mit Hilfe einiger praxisnaher Tests ausgewertet und eine kurze Zusammenfassung gegeben. Bei der Beschreibung der Implementation möchte ich zudem den Programmcode
nur dann direkt angeben, wenn er für das Verständnis der Problemlösung notwendig
erscheint. Falls Interesse an dem Quelltext besteht, liegt dieser kommentiert auf einer
CD im Anhang bei.
Bei der Umsetzung der Lobby wurden die Avatare (Polygonmodelle, Texturen, Animationen) mit Erlaubnis der Zeal GmbH Darmstadt, aus dem PC Spiel Meine Tierklinik,
erschienen im März 2006, verwendet.
4.1 Die verwendeteten C++ Bibliotheken
Nebula Device 2
Das Nebula Device 2, kurz Nebula 2, ist eine von Radeon Labs entwickelte, objektorientierte Open Source Echtzeit 3D Engine mit voller Shader Unterstützung. Nebula 2
arbeitet mit der DirectX API, eine OpenGL Unterstützung ist zur Zeit in Entwicklung.
Als Scriptsprachen werden unter anderem TCL/TK, Lua sowie Python unterstützt. Bei
vielen kommerziellen Projekten, zumeist Spielen, ndet Nebula 2 Verwendung. Nachteile
sind die mangelhafte Dokumentation und eine recht kleine Community, auÿerhalb der
professionellen Entwicklung. Welches sich nicht zuletzt dadurch begründet, dass Weiterentwicklungen und Bugxes der Community nicht in die nachfolgenden, von Radeon
Labs entwickelten, Versionen einieÿen. Nebula 2 wurde aufgrund ihrer Praxisrelevanz,
der Scriptfähigkeiten, als auch aus persönlicher Erfahrung für diese Arbeit ausgewählt.
Zudem wurde die Engine von der Zeal GmbH vorgegeben, da dort viele PC Projekte auf
24
4 Implementation des Lobbysystems
dem Nebula Device 2 und Mangalore basieren. In diesem Projekt wird zumeist Nebula 2
indirekt über das Mangalore Framework angesprochen, welches im Anschluss beschrieben wird.
Das Nebula Device 2 ist verfügbar unter: http://www.nebuladevice.org/
In diesem Projekt wurde folgende Version verwendet: Dezember/2006
Mangalore Game Framework
Das Mangalore Game Framework, entwickelt von Radeon Labs, ist ein objektorientiertes C++ Framework, das die Entwicklung von Echtzeit 3D Spielen vereinfachen soll.
Mangalore zeichnet sich durch die Verwendung von autonomen Spielobjekten sogenannten Entities aus, die erst durch das Anhängen von speziellen Eigenschaften (Properties)
wie z.B. Graphics, Light oder Input Property eine Bedeutung erlangen. Die einzelnen
Objekte können hierbei mit Hilfe eines Message Systems kommunizieren und lassen sich
beliebig durch eigene Properties ergänzen. Zusätzlich sind im Mangalore Framework Teile der Open Dynamics Engine (kurz ODE) integriert. Die ODE ist eine Open Source
Bibliothek zur physikalisierten Echtzeitinteraktion von Objekten und somit in Mangalore für sämtliche Kollisionsabfragen etc. zuständig.
Mangalore erweitert hierbei Nebula 2 und benutzt dessen Low Level Eigenschaften, wie
das Rendern, Audio sowie die Inputabfrage. Das Mangalore Game Framework wurde
von der Zeal GmbH vorgegeben, da dort viele PC Projekte auf dem Nebula Device 2
und Mangalore basieren.
Das Mangalore Game Framework ist verfügbar unter: http://www.nebuladevice.org/
In diesem Projekt wurde folgende Version verwendet: Dezember/2006
Rakknet Multiplayer Network Engine
Für die Netzwerkkommunikation via UDP wurde die Open Source Rakknet Multiplayer
Network Engine (kurz Rakknet) verwendet. Wie im Namen bereits erwähnt, bietet Rakknet eine C++ Bibliothek, die für Multiplayer Spiele über Netzwerk optimiert ist. Sie
besitzt leistungsfähige, einfach zu verwendende Client/Server Interfaces und wurde somit
in dieser Arbeit verwendet. Zusätzlich besitzt sie bereits Testmöglichkeiten, mit denen
sich ein auftreter Ping und/oder Paketloss simulieren lässt.
25
4 Implementation des Lobbysystems
Abbildung 4.1: Kommunikationsschichten
zwi-
schen der Anwendung, Framework,
Engine und System
Die Rakknet Multiplayer Network Engine ist verfügbar unter: http://www.rakkarsoft.com/
In diesem Projekt wurde folgende Version verwendet: 2.444
Haafs Game Engine
Haafs Game Engine (HGE) ist eine kleine, relativ einfach zu handhabende, Open Source
2D Engine. In dieser Arbeit wurde mit ihrer Hilfe ein Multiplayer Netzwerk Dummy
Spiel geschrieben, für welches das Matchmaking stattndet, um zu demonstrieren, dass
die Spiel Engine unabhängig von der Lobby Engine gewählt werden kann. HGE wurde
aufgrund seiner 2D Fähigkeiten und unkomplizierten Handhabung für dieses Projekt
gewählt.
Haafs Game Engine ist verfügbar unter: http://hge.relishgames.com/
In diesem Projekt wurde folgende Version verwendet: 1.6
Tiny Xml
Tiny Xml ist ein kleine, einfach zu handhabende, C++ Bibliothek zum parsen von Xml
Dateien.
Tiny Xml ist verfügbar unter: http://sourceforge.net/projects/tinyxml/
In diesem Projekt wurde folgende Version verwendet: 2.4.0
26
4 Implementation des Lobbysystems
4.2 Grundelemente und Lobbyzustände
Bevor wir detaillierte Implementationslösungen betrachten, möchte ich in diesem Abschnitt den Grundaufbau und die Zustände der realisierten Lobby beschreiben. Von diesen ausgehend können dann die unterschiedlichen Programmteile detailliert betrachtet
werden.
4.2.1 Grundlegendes Design von Client und Server
Client
•
Lobby Client Application Klasse
Das Kernstück des Clients bildet die Lobby Client Application Klasse. Diese wurde
von der Standard Mangalore Application abgeleitet und als Singleton implementiert. Als zentrale Klasse verwaltet sie sämtliche States und deren Wechsel, Zugrie
auf Xml Tabellen via Tiny Xml, den Zugang zur Nebula Engine und intialisiert
die Network Connector Klasse. Sämtliche Systeme werden zudem über eine Run
Schleife in jedem Frame angesprochen.
•
Network Client Connector Klasse
Die Network Client Connector Klasse verwaltet eine Instanz des Rakknet Client
Interfaces, welches von der Rakknet Multiplayer Network Engine zur Verfügung
gestellt wird. Über dieses Interface ist sie für das Senden und Empfangen von
Netzwerk Paketen zuständig. Falls Rakknet nicht als Netzwerk Engine gewünscht
sein sollte, kann die Lobby allein durch Austauschen dieser Klasse auf eine beliebige
andere Art über Netzwerk kommunizieren.
•
Game State Klassen
Die drei wichtigsten Memberfunktionen einer State Klasse sind eine OnStateEnter
Funktion, die beim ersten Aufruf des States ausgeführt wird, eine OnStateLeave,
die dies beim Verlassen des States tut und eine OnFrame Funktion, die jeden Frame
aufgerufen wird und den nächsten State, falls ein Wechsel vollzogen werden soll,
zurückgibt. Die einzelnen Gamestates werden hierzu von der Lobby Client Application Klasse initialisiert, angesprochen und gewechselt. In diesem Projekt besitzt
jeder State einen eigenen Gui Dialog, der jeweils mit initialisiert/deinitialisiert
wird. Die Game State Klassen bieten hierbei verschiedene Arten der Grundinititalisierung und Ausführung je nachdem welche Aufgabe der entsprechende State
wahrnehmen soll. Diese sind bereits durch das Mangalore Framework gegeben und
27
4 Implementation des Lobbysystems
bestimmen die Zugrismöglichkeiten auf die Nebula 3D Engine und ggf. welche
Parameter aus den von Mangalore verwalteten Datenbanken geladen werden sollen. Die einzelnen Arten der Inititialisierung werden im nächsten Abschnitt über
die Client Zustände näher beleuchtet.
•
Gui Dialog Klassen
Da die Gui Dialog Klassen für die einfache Modizierbarkeit der Lobby über Tcl
Scripte gestaltet werden, besteht jeder Gui Dialog aus drei Teilen. Der erste Teil
stellt Funktionen zur Kommunikation mit der Lobby Application bereit, der zweite
Teil stellt die Schnittstelle zu dem Tcl Script dar. Der dritte Teil, das eigentliche
Tcl Script, kann nun mit Hilfe eines von Mangalore verwalteten Script Servers
Widgets erschaen und sie über die Schnittstellen, die in der zugehörigen C++
Klasse deniert sind, mit dem Programm kommunizieren lassen. Sind nun optische Veränderungen gewünscht, kann die Gui verändert werden ohne den C++
Quelltext anpassen zu müssen, da hierzu sämtliche Daten in den TCL Scripten zur
Verfügung stehen.
Server
Der Server wurde im Gegensatz zur Lobby als einfache Konsolenanwendung realisiert
um eine bestmögliche Performance zu bieten. Ebenso wie der Client besitzt er eine
Network Server Connector Klasse, welche die Netzwerkkommunikation übernimmt. Eine
komplexe State Verwaltung, wie dies bei dem Client realisiert worden ist, war hier nicht
nötig, da nach der Initialisierung des Servers kein Statewechsel mehr vollzogen wird.
Die Implementation und Organisation des Servers wird im Abschnitt
System
Das Client/Server
dieses Kapitels näher beschrieben.
4.2.2 Client Zustände und deren Aufgaben
Die Gamestateklasse stellt ihren Instanzen mehrere Möglichkeiten der Grundinitialisierung zur Verfügung, die bestimmen wie weit der Gamestate auf die Nebula Render
Funktionen Zugri hat und welche Daten von Mangalore geladen werden sollen. Folgende
wurden bei der Entwicklung der States in dieser Arbeit verwendet:
•
New Game
Bevor 3D Szenen dargestellt werden können, ist es wichtig Mangalore mit einem
New Game State zu initialisieren. Dieser wiederum veranlasst, dass sämtliche Systeme initialisiert werden, die für ein Rendern mit Nebula notwendig sind.
28
4 Implementation des Lobbysystems
•
Empty World
Falls die Grundinitialisierung eines Gamestates auf Empty World gesetzt wurde,
wird eine leere 3D Szene erschaen. Dies bietet sich für States an, die entweder
nur aus Gui Dialogen bestehen oder falls alle Objekte manuell vom Programmierer
zur Laufzeit erschaen werden sollen. Die Initialisierung mit dem Empty World
Parameter benötigt somit auch keine zusätzlichen Levelparameter.
•
Load Level
Load Level ermöglicht das Laden eines bereits denierten Levels. Mangalore besitzt für das Speichern von Level Daten bereits intern eine Sql Datenbank, in der
sämtliche Levelobjekte, deren Layouts und Parameter eingetragen werden. Die
Layouts bestimmen welche Eigenschaften (Properties) das Mangalore Objekt (Entity) besitzen wird. Die Denition der Layouts wird in einer zusätzlichen Xml Datei
(Blueprints.xml) festgelegt. Wenn der Load Level State mit Angabe des Levelnamens aufgerufen wird, werden nun sämtliche Level Objekte mit ihren Eigenschaften
automatisch erzeugt.
Jeder Game State des Lobby Clients baut auf eine dieser Grundinitalisierungen auf. Die
Lobby kann dabei folgende States erreichen.
Das Programm startet im Initialisierungs State.
Initialisierungs State
Initialisierung:
Aufgaben:
New Game
Der Inititalisierungs State startet sämtliche Nebula und Mangalore Un-
tersysteme. Hierzu werden die Initialisierungsdaten aus einer Script Datei (startup.tcl)
gelesen, die unter anderem die verwendete Grak API und Eekte wie HDR festlegt.
Statewechsel:
Falls alle Subsysteme erfolgreich initialisiert worden sind, begibt sich der
Lobby Client in den Login State. Wenn jedoch ein Fehler aufgetritt, beendet sich das
Programm mit einer entsprechenden Fehlermeldung.
Login State
Initialisierung:
Aufgaben:
Load Level
Im Login State kann der Nutzer sich seinen gewünschten Avatar wählen
sowie seinen Nickname bestimmen. Wenn der Nutzer seine Auswahl getroen hat, kann
mit Hilfe eines Login Buttons die Verbindung zum Server hergestellt werden. Eine weitere
29
4 Implementation des Lobbysystems
Aufgabe besteht darin eine Fehlermeldung anzuzeigen, falls das Programm in diesen
State wechselt, weil z.B. die Serververbindung unterbrochen wurde.
Statewechsel:
Der State wird beendet, wenn der Nutzer mit einem Klick auf den Login
Button seine Angaben bestätigt. Die Lobby wechselt dann in den
Connect to Server
State.
Abbildung 4.2: Im Login State kann der Nutzer
einen Namen und Avatar wählen
Connect to Server State
Initialisierung:
Aufgaben:
Empty World
In diesem State versucht das Programm eine Verbindung zum Server her-
zustellen. Bei einem Fehlschlag wird dies bis zu dreimal wiederholt.
Statewechsel:
Wenn die Verbindung zum Server erfolgreich war, wird das Level auf
Lobby Eingang
gesetzt und in den
Fehlschlag wechselt
Get Level Data State gewechselt. Nach dem dritten
die Lobby in den Login State und zeigt eine entsprechende Fehler-
meldung an.
Get Level Data State
Initialisierung:
Aufgaben:
Empty World
Der State fragt vom Server Daten für ein bestimmtes Level an. Entweder
werden die Daten für den Lobby Eingang oder eine Rauminstanz abgerufen.
30
4 Implementation des Lobbysystems
Statewechsel:
gramm in den
Wenn die Daten erfolgreich übertragen worden sind, wechselt das Pro-
Main Lobby State.
Gab es Fehler bei der Übertragung und schlug diese
bis zu dreimal fehl, wird mit einer entsprechenden Fehlermeldung in den
Login State
gewechselt.
Main Lobby State
Initialisierung:
Aufgaben:
Load Level
Der Main Lobby State stellt den zentralen Lobby Bereich dar. Je nach
gesetztem Level wird hier der Lobby Eingang oder eine Rauminstanz mit Matchmaking
Möglichkeiten angezeigt. Der Nutzer kann hier mit anderen Spielern chatten, sich im
Raum bewegen, üstern oder ein Spiel beginnen.
Statewechsel:
Wenn der Nutzer in ein Multiplayer Spiel einsteigt, werden alle nicht
mehr von der Lobby benötigten Resourcen freigegen und in den
Sleep State
gesprungen.
Falls der Nutzer den Raum (siehe Abb. 3.2) wechseln möchte, wird der entsprechende
Raum als zu ladendes Level gesetzt und in den
Load Level State
gewechselt. Wenn die
Server Verbindung unterbrochen wird, wechselt das Spiel wie üblich in den
Abbildung 4.3: Der Lobby Eingangsbereich mit simulierten
Spielern (Bots)
31
Login State.
4 Implementation des Lobbysystems
Sleep State
Initialisierung:
Aufgaben:
Empty World
Im Sleep State wartet das Programm auf das Spiel. Zusätzlich hält dieser
zum Lobby Server den Netzwerkkontakt.
Statewechsel:
Wenn das Spiel beendet ist, wird das Level auf den Lobby Eingangsbe-
reich gesetzt und in den
Load Level
Zustand gewechselt.
Abbildung 4.4: Übersicht über die Lobby Client States
4.2.3 Modizierbarkeit mit Hilfe von Scripten und Datenbanken
Levelobjekte
Wenn ein Level erzeugt wird, werden zunächst alle Level Objekte (Entities), wie Kamera, Lichquellen und Physikobjekte (Kollision und Routing Meshes) aus der Mangalore
eigenen SQL Datenbank (export/db/world.db3) gelesen. Jedes Objekt besitzt dabei eine eigene Kategorie, die bestimmt durch welche Eigenschaften dieses deniert ist (mehr
dazu im nächsten Abschnitt). Die Grundkategorien werden dabei in einer Xml Tabelle festgehalten (data/tabels/blueprints.xml). Sämtliche simulierten physikalischen und
graschen Eigenschaften wie Grak Meshes, Animationen und Kollisionsverhalten oder
Navigationspunkte werden ebenfalls extern organisiert (Pfad: /data/tables/) und deren
Pfade in einem Initialisierungsscript (startup.tcl) gesetzt, welches beim Start des Mangalore Frameworks ausgeführt wird.
32
4 Implementation des Lobbysystems
Auf diese Art ist es möglich, das komplette Erscheinungsbild zu verändern, ohne auch
nur eine Zeile im Quellcode umschreiben zu müssen. Dies ist notwendig falls die Lobby
ohne groÿen Aufwand an ein vorhandes Projekt angepasst werden soll.
Abbildung 4.5: SQL Level Datenbank
GUI
Wie bereits erwähnt, sind sämtliche GUI Dialoge mit Hilfe von Tcl Scripten realisiert
worden. Konsequenterweise werden auch sämtliche Daten wie Überschriften, Fehlermeldungen etc. aus einer externen Xml Datei geladen, um eine möglichst einfache Lokalisierung zu ermöglichen (LobbyClientLoca.xml).
4.3 Aufbau des Lobby Clients durch Entities und
Properties
Bei der Realisierung des Projektes wird das Design durch die Verwendung von Entities
und deren Eigenschaften (Properties) bestimmt. Entities sind dabei zunächst neutrale Spielobjekte und repräsentieren ein Objekt wie zum Beispiel den Avatar oder eine
Lichtquelle. Jedoch hat die Entity an sich zunächst keine konkrete Funktion. Ihre Funktionalität wird dadurch hergestellt, dass diese mit Eigenschaften verknüpft wird. Soll
sie sichtbar sein, wird zum Beispiel eine entsprechende Graphics Property an diese verknüpft; soll sie als Lichtquelle dienen, erhält sie zusätzlich eine Light Property.
33
4 Implementation des Lobbysystems
Entities kommunizieren hierbei mit Hilfe eines Nachrichtensystems untereinander und
mit sich selbst. Ein Beispiel: Mein Avatar besitzt unter anderem eine Steuerungs- und
eine Physikproperty. Eine Aufgabe der Physikproperty ist die Wegndung und die Bewegung des Avatar Meshes. Wenn der Nutzer mit der Maus einen Bewegungszielpunkt
wählt, wird dies zunächst von der Steuerungsproperty registriert. Im Anschluss sendet
diese eine Nachricht mit dem Bewegungszielpunkt an die eigene Entity, die die Nachricht
(wie jede empfangene Nachricht) wiederum an alle ihre Properties weiterleitet, wie auch
an die Physikproperty, die im Anschluss die Wegndung durchführt.
Abbildung 4.6: Jedes
Spielobjekt
durch
seine
erhält
Eigenschaften
Funktionen
Alle Objekte, die in der Lobby auftreten, sind als Entity mit entsprechenden Properties
realisiert, wie z.B. Avatare und Umgebung. Viele Properties sind bereits im Mangalore
Framework enthalten. Es ist jedoch auch einfach -und notwendig-, abgeleitet von einer
Standard-Property, eigene zu realisieren, die ich in diesem Abschnitt ebenso wie die
Entites vorstellen möchte.
4.3.1 Erzeugung von Entities
In diesem Projekt werden zwei Möglichkeiten zur Erzeugung von Entites genutzt. Die
Hauptlobby, mit allen statischen Objekten, wird mit den Daten aus der Level Datenbank
automatisch beim Eintritt in den
Main Lobby State
erzeugt. Die Art der Entity wird
dabei durch dessen Kategorie bestimmt und die entsprechenden Properties erzeugt und
angehängt.
Sämtliche anderen Level Daten, wie die Avatare, werden zunächst vom Server im
Level State
Load
übertragen und anschlieÿend dynamisch erzeugt, genauso wie Spieler, die
sich nach dem eigenen Beitritt in die Lobby einklinken.
34
4 Implementation des Lobbysystems
4.3.2 Eingesetzte Game Entities
Zunächst werden sämtliche, in der Lobby verwendete Entities, kurz mit ihrer Funktion
und den verbundenen Properties vorgestellt. Im Anschluss werden die Properties, die
die Funktionen der Entities bestimmen, genauer beschrieben.
Avatar Entity
Der Avatar ist das für den Nutzer zentrale Objekt, stellt den Spieler dar, reagiert auf
dessen Maus/Tastatur Eingaben, orientiert die Kamera entsprechend und überträgt seine
Bewegungsdaten über das Netzwerk an den Server. Entsprechend existiert in der Lobby
immer nur eine Avatar Entity.
Sie besitzt folgende Properties: Actor Physics Property, Actor Graphics Property, Actor
Animation Property, Display Chat Property, Network Move Property, Zone Manager
Property und Game Zone Property.
Abbildung 4.7: Die Avatar Entity
Player Entity
Sämtliche anderen Clients, die in die Lobby eingeloggt sind, werden durch Player Entities dargestellt. Diese Entities empfangen über den Server mit einer speziellen Remote
Input Property Bewegungs-, Animations- und Chat-Daten und führen die übermittelten
Aktionen aus. Für jeden zusätzlich zu dem Nutzer eingeloggten Spieler existiert somit
eine Player Entity.
Sie besitzt folgende Properties: Actor Physics Property, Actor Graphics Property, Actor
Animation Property, Display Chat Property und die Remote Input Property.
35
4 Implementation des Lobbysystems
Matchmaking Entity
Die Realisierung des Matchmakings wird, wie bereits im Konzeptentwurf entwickelt,
mittels Spieltischen realisiert, an die sich jeder Spieler setzen kann, sofern ein Platz frei
ist. Diese Tische mit den zugehörigen Sitzmöglichkeiten werden durch die Matchmaking
Enitities dargestellt.
Entsprechend besitzen diese eine Graphics-, eine Physics- und eine speziell entwickelte
Matchmaking-Property.
Abbildung 4.8: Darstellung
der
Matchmaking
Entity
mit einem besetzten Platz
Environment Entity
Sämtliche statischen Umgebungsobjekte, wie z.B. die Bäume oder der Boden, werden in
einer Environment Entity zusammengefasst. Diese hat die Eigenschaft, dass sie zwar für
andere Objekte physikalische Eigenschaften besitzt, jedoch selbst nicht diesen unterliegt.
Falls diese selbst den simulierten physikalischen Gesetzmäÿichkeiten folgen würde, müsste sie mit sämtlichen anderen Objekten nach unten fallen, was natürlich nicht gewünscht
ist. Die Environment Entity besitzt keine manuell festlegbaren Properties, sondern wird
Managlore intern verwaltet.
Light Entity
Die Light Entity ist ein einfaches Lichtquellenobjekt im Spiel. Es besteht aus einer Entity,
an die eine Mangalore Light Property verknüpft wurde.
Simple Graphic Objekt Entity
Um eine Avatar-Auswahl und -Vorschau in dem Login State möglich zu machen, wird
ein einfaches Objekt, bestehend aus einer Entity mit einer Grak Property verwendet.
36
4 Implementation des Lobbysystems
Der Avatar wird gewechselt, indem zunächst der Pfad für das Nebula Grak Objekt auf
die nächste Avatar Grak gesetzt und im Anschluss die Grak Property neu gestartet
wird.
4.3.3 Properties
Network Move Property
Die Network Move Property ist für die Steuerung des Avatars und die Übertragung
der Bewegung an den Server zuständig. Die Steuerung mit der Maus funktioniert auf
folgende Weise: Bei einem Linksklick, wird die 2D Mausposition in 3D Koordinaten
zurücktransformiert. Anschlieÿend wird eine Gerade aus Kameraposition und 3D Mausposition erstellt und diese durch einen in der Physik Bibliothek vorhandenen optimierten
Algorithmus mit allen Entities (die eine Physikproperty besitzen) geschnitten. Falls die
in kleinster Blickrichtung liegende Entity die Environment Entity ist, wird eine GoTo
Message mit dem Schnittpunkt als Ziel erschaen und an die Avatar Entity, sowie an
den Network Connector weitergegeben. Der Network Connector teilt das neue Laufziel
mit dem Ausgangspunkt dem Server mit. Die GoTo Message wird in der Entity wiederrum von der Avatar Physik Property aufgenommen: Es wird ein Pfad berechnet und das
Grak Mesh entsprechend pro Frame manipuliert.
Falls eine andere Entity als die Environment Entity zurückgegeben wird, bekommt diese eine Message gesendet, dass sie angeklickt worden ist. Andere Player Entities önen
dann z.B. einen Flüstern Dialog.
Remote Input Property
Ebenso wie der Spieler seine Bewegungen über die Netzwerk Property weiterleitet, empfangen alle anderen Spieler-Avatare Bewegungs und Chatupdates mit Hilfe des Client
Network Connector über den Server. Bei Empfang einer Bewegungs- oder PositionsVeränderung über das Netzwerk wird dies den zugehörigen Entities mit Hilfe einer Entity Nachricht weitergeleitet. Wie bei allen Nachrichten, die von einer Entity empfangen
werden, wird diese zur Auswertung an ihre Properties weitergegeben. Hierbei übersetzt
dann die Remote Input Property das Positions/Bewegungsupdate in Nachrichten für die
Physikproperty, die im Anschluss das Grak Mesh entsprechend der Bewegung manipuliert.
37
4 Implementation des Lobbysystems
Display Chat Property
Die Display Chat Property verarbeitet Entity-Nachrichten, die eine Chat-Nachricht anzeigen sollen. Die Chat-Nachricht wird anschlieÿend über der Entity in einer Sprechblase angezeigt, die von der Property als Gui Element erzeugt wurde. Falls verschiedene
Sprechblasen gleichzeitig existieren, werden sie nach Kamera Enitity Entfernung sortiert
(Vergleiche Abb. 4.3). Wenn keine Nachricht vorliegt, wird ein festgelegter Name angezeigt. In diesem Projekt ist dies der Spielername. Aus diesem Grund besitzten Avatar
und auch die Player Entity diese Property.
Matchmaking Property
Diese Property weist mit Hilfe der Matchmaking Entity bei einer Platzanfrage durch
den Nutzer (ausgelöst durch einen Linksklick) der Avatar Entity einen Platz zu und
reserviert diesen.
Abbildung 4.9: Kommunikation zwischen Spieler und Matchmaking
Entity
38
4 Implementation des Lobbysystems
Der Linksklick auf die Matchmaking Entity bewirkt zunächst, dass diese eine EntityNachricht mit dem Hinweis erhält, dass sie angewählt wurde. Als Antwort schickt die
Matchmaking Property eine Nachricht an die Avatar Entity mit den Koordinaten des
Platzes, falls der Platz frei ist. Dabei wird der Platz gewählt, der noch frei ist und am
längsten nicht zugewiesen wurde. Dies geschieht, um zu verhindern, dass mehrere Spieler
auf einen Platz gleichzeitig Anspruch erheben und sich so gegenseitig blockieren.
Im Anschluss bekommt die Avatar Physik Property der Avatar Entity die Nachricht
gesendet, dass sie sich an die Koordinaten des zugewiesenen Platzes bewegen soll. Am
Punkt angekommen, sendet die Avatar Entity nun eine Nachricht an die Matchmaking
Entity mit der Anfrage, ob der Platz noch frei ist. Bei einer positiven Antwort der
Matchmaking Entity wird der Platz automatisch auf dem Server reserviert und die Hinsetzen Animation der Avatar Entity abgespielt.
Auf diese Art ist gewährleistet, dass immer nur ein Spieler auf einem Platz sitzen kann.
Die Matchmaking Property fragt hierbei jedesmal den Server mit Hilfe der Network Client Connector Klasse ab, welche Plätze reserviert sind. Gibt der Nutzer während dieses
Prozesses eine anderen Laufbefehl, wird der Dialog abgebrochen und der Platz nicht
reserviert.
Modizierte Mangalore Properties
Neben den oben erwähnten Properties, wurden einige bereits im Mangalore Framework
vorhandene verwendet. Folgende wurden dabei an die Lobby angepasst.
Die Avatar Physik Property wurde dahingehend modiziert, dass über eine Variable
bestimmt werden kann, ob Kollisionen mit anderen Avatar Physik Objekten aktiviert
und deaktiviert sind. Eine Deaktivierung ist notwendig um zu verhindern, dass Spieler
sich gegenseitig blockieren.
Die Chase Camera Property erhielt zudem leichte Modikationen, welche eine bessere
Steuerung des Kamerawinkels ermöglichen.
4.4 Das Client/Server System
In diesem Abschnitt gehen wir zunächst kurz auf die verwendete Netzwerkbibliothek ein.
Im Anschluss wird der Aufbau des Servers erläutert, sowie die Kommunikation zwischen
Client und Server näher betrachtet.
Die Netzwerk Kommunikation wird im Fundament durch die Rakknet Bibliothek festgelegt. Diese wurde jedoch, wie bereits am Anfang dieses Abschnittes besprochen, so
39
4 Implementation des Lobbysystems
gekapselt, dass sie ohne gröÿere Probleme durch ein beliebiges anderes System ersetzt
werden kann. Der Client besitzt die Network Client Connector Klasse, die das Rakknet
Client Interface benutzt, ebenso wie der Server eine Network Server Connector Klasse
hat, der entsprechend eine Instanz des Rakknet Server Interfaces als Member besitzt
(vgl. 4.2.1). Die Kommunikation zwischen den Rakknet Interaces läuft über die Rakknet
Bitstream Klasse, welche die zu sendenden Daten aneinandergereiht als String speichert.
Dieser Datentyp kann im Anschluss mit Hilfe des Rakknet Interface gesendet werden,
die Zerteilung in Netzwerkpakete und das Ordnen dieser in die richtige Reihenfolge, wird
dabei von der Rakknet Bibliothek übernommen. Das Weiterleiten einer Chatnachricht
soll hier zunächst als Beispiel dienen.
Abbildung 4.10: Quelltext: Der Server teilt einem Client mit, dass eine Chatnachricht gesendet wurde
Anhand dieses Quelltextes wird deutlich, wie unkompliziert die Netzwerkkommunikation
mit Hilfe der Rakknet Multiplayer Network Engine realisierbar ist. Ebenso wie das Senden von Daten mit Bitstreams wird das Empfangen dieser verwaltet. Hier ist es zunächst
sinnvoll die erste Stelle eines Bitstreams zu betrachen, da dort immer die Information
zur Identikation des Streams, in diesem Fall als eingehende Chat Nachricht, gespeichert
ist. Ein Quelltext Ausschnitt zeigt hierzu Abb. 4.11.
Zudem ist zu beachten, dass die Kommunikation in der Lobby nur zwischen dem Client
und dem Server verläuft. Eine Kommunikation zwischen den Clients ndet dort nicht
40
4 Implementation des Lobbysystems
Abbildung 4.11: Gekürzter Quelltext: Chat Nachricht wird vom Client empfangen
statt. Erst zum Start des Mehrspielerspieles werden die IPs der Mitspieler untereinander
ausgetauscht, da dieses nicht über den Lobbyserver läuft.
4.4.1 Aufbau des Servers
Die zentrale Aufgabe des Servers besteht darin, die Clients zu verwalten und deren Informationen über die Spielumgebung (Position der anderen Spieler, Chatnachrichten)
aktuell zu halten. Um diese Aufgabe zu erfüllen, enthält der Server neben einer zentralen Server Klasse eine Lobby Server Network Connector Singelton Klasse, die ähnlich
wie beim Client das Senden und Empfangen von Daten über das Netzwerk verwaltet.
Der Lobbyeingang und jede Rauminstanz wird in einer Raum-Klasse verwaltet, sowie
jedes Matchmaking Objekt in einer Game-Klasse. Die Hauptserverklasse besitzt eine
Liste der Raum Klassen. Die Räume wiederum besitzen jeweils eine Liste der möglichen
Spiele innerhalb des Raums.
Jeder eingeloggte Client wird in zwei verschiedenen Bereichen gespeichert. Zum Einen
mit allen verfügbaren Informationen, wie IP Adresse, Port, Nickname, Position etc. in
einer Liste im Server, zum Anderen über einen Key (hier wurde der Nickname gewählt)
in der Raum/Spiel Klasse in der sich der Spieler bendet.
41
4 Implementation des Lobbysystems
Dies ist nötig, damit Informationen, die nur für Spieler, die sich im selben Raum/Spiel
benden interessant sind, schnell an diese weitergegeben werden können. Würde nur eine
Liste exisitieren, müsste bei jeder Chatnachricht oder Bewegungsinformation vor dem
Versenden die komplette Client Liste durchgegangen werden um zu überprüfen, ob sich
die Clients im selben Raum benden wie der Sender der Nachricht.
4.4.2 Übermitteln von Bewegungs- und Positionsdaten
Die intuitivste Möglichkeit zum Abgleichen der Client-Positionsdaten besteht darin, jeden Programmdurchlauf bei einer Positionsänderung, diese an den Server zu senden, der
wiederum alle anderen Clients aktualisiert. Dass dies jedoch eine sehr ineziente Art der
Kommunikation ist, wird sehr schnell sichtbar: Wenn ein Client von einem Punkt zum
anderen läuft, werden hier, bei angenommen durchschnittlichen 60 Programmdurchläufen pro Sekunde, 60 Positionsupdates gesendet, die der Server wiederum an alle anderen
Clients weiterleiten muss. Angenommen zur selben Zeit befänden sich 100 andere Spieler
im gleichen Raum, dann müsste der Server nur für diese eine Bewegung 60 * 100 = 6000
Positionsdaten pro Sekunde (!) senden. Hinzu kommt, dass sich selten immer nur eine
Person gleichzeitig im Raum bewegen wird. Aus diesem Grund würde dieses Verfahren
sehr schnell zu einer Überlastung des Servers und der Netzwerk Kommunikation führen.
Um an einen besseren Ansatz zu gelangen, schauen wir zunächst wie Client intern die
Bewegung realisiert wurde: Durch einen Klick setzt der Nutzer den Bewegungszielpunkt
fest, dies wird per Nachricht an die Physik Property der Spieler Entity übermittelt, die
den Pfad berechnet und die Bewegung durchführt. Die Entity benötigt also zunächst
nur den Bewegungszielpunkt - zusätzlich zur statischen Levelinformation - um die Bewegung von einem zum anderen Punkt zu berechnen. Optimal wäre es dementsprechend
nur den ausgewählten Bewegungszielpunkt an den Server weiterzuleiten, der diesen an
alle anderen Clients weiterverteilt und deren Position somit aktualisiert.
Eine solche Realisierung wäre optimal, aber da die Daten über das Netzwerk ausgetauscht werden müssen und dies Übertragungsverzögerungen mit sich bringt, werden
die Zielpunkte nicht überall gleichzeitig vorhanden sein. Dies kann zum Beispiel dazu führen, dass falls jedesmal nur der Bewegungszielpunkt übermittelt wird, bei einem
Abbruch der Bewegung oder einem neuen Zielpunkt, unterschiedliche Positionsdaten
zwischen den verschiedenen Clients existieren. Die Daten auf den Clients laufen also
leicht Gefahr nicht mehr identisch zu sein.
Aus diesem Grund wird bei jeder Nachricht, die die Position des Clients verändert,
42
4 Implementation des Lobbysystems
zusätzlich zum Bewegungszielpunkt, die aktuelle Position und Ausrichtung der Entity
gesendet. Falls nun die Nachrichten zu spät oder verzögert ankommen, wäre im schlimmsten Fall eine kleine Verzögerung zu spüren, jedoch würden die Daten zwischen den Clients
synchron bleiben.
Hierbei existiert natürlich die Vorraussetzung, dass die Levelinformation auf jedem Client indentisch ist, damit überall auch derselbe Bewegungpfad berechnet wird.
Abbildung 4.12: Der Bewegungspfad wird mit Hilfe von Navigationspunkten -hier durch
rote Kugeln visualisiert- berechnet
4.4.3 Übersicht: Verwendete Kommunikationsstreams
Wie bereits beschrieben, wird der Datenaustausch mit Rakknet über Bitstreams realisiert. Jeder in diesem Projekt verwendete Bitstream besitzt an seiner ersten Position
eine Nummer zur Identikation seines Types. In dieser Übersicht sollen die Arten der
implementierten Bitstreams kurz vorgestellt werden, um einen Überblick über die Netzwerkkommunikation zu bekommen.
Nachrichten vom Client an den Server
•
Login Request
Anfrage nach einem möglichen Login
Enthaltende Information: Gewünschter Login Name
43
4 Implementation des Lobbysystems
•
Send Chat Message
Der Client möchte eine Chat Nachricht senden
Enthaltende Information: Chat Nachricht und Name
•
Level Data Request
Anfrage der Spielernamen und Positionen in einem Raum
Enthaltende Information: Gewünschter Raum
•
Move Goto
Der Client bewegt sich zu einer bestimmten Postion
Enthaltende Information: Aktuelle Position und Ausrichtung, sowie der Bewegungszielpunkt
•
Move Stop
Der Client bricht seine aktuelle Bewegung ab und bleibt stehen
Enthaltende Information: Aktuelle Position und Ausrichtung
•
Ask for New Player
Der Client hat Daten zu einem Mitspieler erhalten, der ihm nicht bekannt ist und
fragt dessen Daten zur Darstellung beim Server an
Enthaltende Information: Name des neuen Spielers
•
Change Room
Der Client wechselt den aktuellen Raum
Enthaltende Information: Neuer Raum
•
Room Request
Der Client fragt an welche Räume im Augenblick zu betreten sind
Enthaltene Information: -
•
Free Seat Request
Der Client möchte einen Platz in einem Spiel zugewiesen bekommen
Enthaltende Information: Raum und Spiel
•
Seat Request
Der Client möchte den zugewiesenen Platz fest reservieren
Enthaltende Information: Raum, Spiel und Platz
•
Move Turn
Der Spieler Avatar dreht sich in eine bestimmte Richtung
44
4 Implementation des Lobbysystems
Enthaltende Information: Aktuelle Position und Ausrichtung, gewünschte Ausrichtung
•
Play Animation
Der Avatar spielt eine bestimmte Animation ab
Enthaltende Information: Identikationsnummer der Animation
•
Positions Aktualisierung
Der Avatar aktualisiert (meistens vom Server angefragt) seine Position und Ausrichtung
Enthaltende Information: Position und Ausrichtung
•
Leave Seat Request
Der Client möchte seinen Platz an dem Matchmaking Tisch verlassen
Enthaltende Information: -
•
Accept Game Message
Der Client teilt dem Server mit, dass er bereit ist das Spiel zu starten, erneutes
Senden führt zum Widerruf
Enthaltende Information: -
•
Send Private Message
Flüsternachricht an einen Mitspieler schicken
Enthaltende Information: Name, Chatnachricht und Name des gewünschten Empfängers
Nachrichten vom Server an den Client
•
Connection Success
Die Verbindung wurde hergestellt, warte auf eine Login Anfrage
Enthaltende Information: -
•
Login Reply
Dein Loginversuch war erfolgreich/ist fehlgeschlagen
Enthaltene Information: Erfolgreich/Nicht Erfolgreich
•
Level Data
Alle Spielerdaten für einen bestimmten Raum
Enthaltene Information: Spielernamen, Avatare, Position und Ausrichtung von allen Clients in dem angefragten Raum
45
4 Implementation des Lobbysystems
•
Player Time Out
Ein Spieler hat die Lobby verlassen
Enthaltene Information: Spielername
•
New Player
Ein neuer Spieler hat den Raum betreten
Enthaltene Information: Spielername, Avatar, Position und Ausrichtung
•
Move Goto Forward
Ein Spieler bewegt sich zu einem neuen Punkt
Enthaltene Information: Name des Spielers, alte Position und Ausrichtung sowie
der Bewegungszielpunkt
•
Move Stop Forward
Ein Spieler bricht seine Bewegung ab
Enthaltene Information: Name des Spielers, Position und Ausrichtung
•
Leave Room
Ein Spieler verlässt den Raum des Clients
Enthaltene Information: Name des Spielers, der den Raum verlässt
•
Enter Room
Ein Spieler betritt den Raum des Clients
Enthaltene Information: Avatar, Name, Position und Ausrichtung des Spielers
•
Open Rooms
Mögliche zu betretende Räume
Enthaltene Information: Anzahl der verfügbaren Räume
•
Seat Message
Ein Platz in einem Spiel wurde für den Client reserviert
Enthaltene Information: Raum, Spiel und Platz
•
Move Turn Forward
Ein Spieler ändert seine Ausrichtung
Enthaltene Information: Spielername, aktuelle Position und Ausrichtung, gewünschte Ausrichtung
46
4 Implementation des Lobbysystems
•
Play Animation Forward
Ein Spieler möchte eine bestimmte Animation abspielen
Enthaltene Information: Spielername, Animationsnummer
•
Leave Seat Message
Die Reservierung des Clients für einen Spielplatz wurde rückgängig gemacht
Enthaltene Information:-
•
Game Update
Aktualisierung der Bereitschaftszustände in einem Spiel um dieses zu starten
Enthaltene Information: Spielername, Bereitschaftszustand
•
Start Game
Alle Spieler für eine Partie sind bereit, starte Spiel
Enthaltene Information: Mitspielernamen, zugehörige IP Adressen und Ports
•
Get Private Message
Ein Mitspieler hat diesem Client eine Private Nachricht gesendet
Enthaltene Information: Sendername, Nachricht
•
Private Message Failed
Es war nicht möglich die Private Nachricht zu versenden, der Spieler ist nicht
online
Enthaltene Information: Spielername
4.5 Wechsel zwischen Lobby und Multiplayerspiel
Nach erfolgreichem Matchmaking in der Lobby wechselt diese in einen Sleep State, in
dem fast alle Teile des belegten Speichers freigegeben werden und das eigentliche Spiel
startet. Bei der Erstellung des Konzeptes für eine 3D Lobby haben wir als wichtigen
Punkt festgelegt, dass die Realisierung des Spieles weitgehend unabhängig von der Implementation der Lobby sein soll. Das heiÿt unter anderem auch, dass eine andere Engine,
Game Framework oder auch Netzwerk Programmierung vorliegen kann. Um dies zu testen wurde ein kleines Netzwerk Spiel - eine Netzwerk Pong Variante - in einer anderen
2D Engine (Haafs Game Engine s.o.) geschrieben. Bei Start des Spiels, kann dieses seine benötigten Informationen über festgelegte Schnittstellen von der Lobby Anwendung
abrufen:
47
4 Implementation des Lobbysystems
•
GetHwnd()
Liefert die ID des von der Application benutzten Windows Fenster zurück, damit
die neue aufgerufene Engine in dieses rendern kann.
•
GetPlayerNames()
Liefert die Liste der Spielernamen als String Array zurück.
•
IsServer()
Gibt zurück ob der Spieler einen Server önen soll.
•
GetServerId()
Falls der Spieler nicht den Server übernimmt, kann mit dieser Funktion der Port
und die IP Adresse des Servers abgefragt werden.
•
SleepTrigger()
Mindestens jede dritte Sekunde muss ein SleepTrigger bei der Lobby durchgeführt
werden, damit diese nicht den Kontakt zum Server durch einen Timeout verliert
und direkt nach Spielende wieder zu dieser zurückkehren kann.
•
Wakeup()
Das Spiel ist zu Ende, die Lobby wird wieder aktiv.
Der Wechsel zwischen Spiel und Lobby ndet dabei auf folgende Art statt:
1. Die Lobby Anwendung wechselt in den Sleep State und bricht seine Run Schleife,
die sonst jeden Frame aufgerufen wurde, ab.
2. Es wird abgefragt, ob die Lobby in den Sleep State gewechselt ist oder ob sie geschlossen wurde. Wenn die Lobby geschlossen wurde, beendet sich das Programm.
3. Es werden alle für das Spiel benötigten Informationen, wie unter anderem die
Server IP und die Fenster ID abgefragt.
4. Das Spiel wird gestartet und ruft jeden Zyklus einen Sleep Trigger auf die Lobby
Anwendung auf.
5. Nach Beenden des Spiels wird die Lobby mit einem Wakeup() Befehl aus dem
Sleep State in den Load Level State gewechselt und alle Ressourcen wieder in den
Speicher geladen.
6. Die Run Schleife der Lobby Anwendung wird wieder angesprochen.
48
4 Implementation des Lobbysystems
Die Pong Variante wurde hierbei nur sehr einfach implementiert, da sie als Beispiel
dienen soll und nicht das eigentliche Thema ist. Ihr Quelltext ndet sich dokumentiert
in der Datei pong.h.
Abbildung 4.13: Screenshot: Multiplayer Netzwerk Pong
4.6 Zusammenfassung
Die Realisierung dieses Projektes in dem gegebenen Zeitrahmen war nur mit Einsatz
von umfangreichen Programm Bibliotheken möglich. Nebula diente hierbei als 3D Engine und Mangalore, das auf diesem aufbaut, als Game Framework. Ausgehend von dieser
Grundstruktur wurde anhand des Entity und Property Systems die Lobby realisiert.
Auch standen so zahlreiche Möglichkeiten zur Verfügung, um die fertig programmierte
3D Lobby schnell an ein vorhandenes Spiel anpassen zu können ohne Veränderungen in
der Lobby Struktur vornehmen zu müssen. Sämtliche GUI Dialoge können so leicht über
externe TCL Scripte angepasst werden, 3D Level und Navigationsobjekte werden in einer externen SQL Datenbank gespeichert und Animationen sowie lokalisierbare Texte
sind über externe Xml Tabellen anpassbar.
Als Bibliothek zur Netzwerkkommunikation wurde die Rakknet Multiplayer Network
Engine verwendet, über die sämtliche Informationen zwischen Client und Server ausgetauscht werden. Die Kommunikation läuft dabei nur zwischen Client und Server. Dies
bedeutet, dass Daten nicht direkt zwischen zwei Clients ausgetauscht werden, sondern
49
4 Implementation des Lobbysystems
immer indirekt über den Server - der in diesem Fall als Übermittlungs- und KontrollInstanz arbeitet - ausgetauscht werden.
Der Wechsel zwischen der Lobby und dem Multiplayerspiel wurde mit Hilfe von festgelegten Kommunikationsschnittstellen realisiert, die u.a. eine Änderung der Spieleengine
zulassen. Während das Spiel läuft, bendet sich die Lobby in einem Ruhezustand, in
der nur die Netzwerkverbindung zum Server aufrechterhalten wird. Nachdem das Spiel
beendet wurde, wird die Lobby aus dem Ruhezustand geholt und der Spieler bendet
sich wieder im Eingangsraum.
50
5 Test und Auswertung der
Implementation
Im vorherigen Kapitel wurde das zuvor entworfene Konzept des Lobbysystems implementiert. Nun soll dies einigen Test unterzogen werden, um es bezüglich der Zuverlässigkeit
und Praxistauglichkeit bewerten zu können.
5.1 Testsysteme
Für die Tests standen folgende 3 unterschiedliche Testsysteme zur Verfügung:
System 1
Modell: Dell Inspiron 6400 Laptop
CPU: Intel Centrino Duo, 2 Prozessorkerne, Takt: 1,83 Ghz
Arbeitspeicher: 2048MB
Grak: ATI Mobility Radeon X1400 / Speicher: 256MB
Betriebsystem: Windows XP Media Center Edition
Netzwerkanbindung: 100 MBit/s Ethernet
System 2
Modell: Desktop Rechner
CPU: AMD Athlon 64 3500+ Takt: 2,21 Ghz
Arbeitsspeicher: 2048MB
Grak: Nvidia Geforce 7900 GT / Speicher: 256MB
Betriebsystem: Windows XP Professional
Netzwerkanbindung: 100 MBit/s Ethernet
51
5 Test und Auswertung der Implementation
System 3
Modell: Desktop Rechner
CPU: AMD Athlon XP 2600+ Takt: 2,08 Ghz
Arbeitspeicher: 1024MB
Grak: ATI Radeon 8500 / Speicher: 64MB
Betriebsystem: Windows XP Professional
Netzwerkanbindung: 100 MBit/s Ethernet
Die Testsysteme sind in einem LAN über einen Siemens Gigaset Se505 Router verbunden, der sowohl als Gateway zum Internet dient als auch das Lokale Netzwerk mit
seinen Funktionen als Switch zusammenführt.
5.2 Testprogramme und Erweiterungen
5.2.1 Simulation von Wide Area Network Bedingungen
Da die Testsysteme über ein Ethernet Lan vernetzt sind, existieren so für den Programmablauf optimale Bedingungen. Da die Lobby jedoch nicht nur in einem LAN,
sondern auch über das Internet - ein WAN - so gut wie möglich laufen soll, ist es nötig
die Eigenschaften eines WAN's zu simulieren. Denn während in einem LAN die Übertragungszeit eines Netzwerkpaketes im Vergleich zum Internet sehr schnell ist und in der
Regel ohne gröÿere Schwankungen erfolgt, sind die Bedingungen über ein WAN andere.
Die Sendezeit eines Netzwerkpaketes ist höher und schwankt, zudem ist der Verlust eines
Paketes wahrscheinlicher.
Ein Vorteil der verwendeten Rakknet Multiplayer Network Engine ist das Vorhandensein eines Netsimulators, der verschiedene Netzwerkbedingungen simulieren kann. So
kann die Sendezeit eines Paketes erhöht und eine zufällige Ping Schwankung simuliert
werden. Der Netsimulator wird dabei sowohl auf dem Server als auch bei dessen Clients
aktiviert, damit die Verzögerungen beidseitig wirken.
5.2.2 Erzeugung von Pseudo Clients
Da es mit den drei Testsystemen nicht möglich ist genug echte Clients für einen Auslastungstest auf dem Server einzuloggen, wurde ein Programm implementiert, welches
Pseudo Clients erzeugt. Diese Pseudeo Clients verhalten sich für den Server wie ech-
52
5 Test und Auswertung der Implementation
te Clients: Sie loggen sich auf dem Server ein und senden zufällig Laufbefehle, sowie
Chatnachrichten. Jedoch ignorieren sie fast alle Netzwerkpakete die vom Server zurückgesendet werden und verzichten auf eine Visualisierung. So ist es mit diesem Programm
möglich, fast beliebig viele Clients von einem Rechner aus auf dem Server einloggen zu
lassen. Das Programm zur Erzeugung von Pseudo Lobby Clients bietet folgende Einstellungsmöglichkeiten: Anzahl der zu erzeugenden Bots, Einstellung eines Zeitfensters
bis zur nächsten Aktion, sowie der zeitliche Abstand, mit dem sich die Clients auf dem
Server einloggen.
5.3 Serverauslastungstests
Zunächst soll die Belastbarkeit und Stabilität des Servers getestet werden.
5.3.1 Maximale Anzahl von Spielern
Testziel/Vorraussetzungen
In dieser Testreihe wird untersucht, wieviele Spieler sich gleichzeitig auf dem Server
benden können. Im schlechtesten Fall sind alle Spieler in einer Rauminstanz eingeloggt,
da so bei der Bewegung eines Clients alle übrigen Spieler darüber informiert werden
müssen und entsprechend eine maximale Anzahl von Netzwerkpaketen gesendet werden
muss. Aus diesem Grund werden alle Clients in den selben Raum gesetzt. System 1
arbeitet als Server, während System 2 Pseudo Clients (Bots) erzeugt, um eine maximale
Auslastung des Servers zu erreichen. Die Bots werden hierzu in einem Abstand von
jeweils 2 Sekunden eingeloggt (Spawn Time) und führen in einem Zeitfenster von 2 4 Sekunden einen Lauf oder einen Chatbefehl aus (Action Time). Das Netzwerk erhält
zusätzlich zu der vorhandenen Verzögerung eine simulierte Latenz von 20-30 ms.
Messungen
Bei den Messungen wurden alle Werte wie Action und Spawn Time identisch belassen
und nur die Anzahl der erzeugten Pseudo Clients erhöht. Wie in der Tabelle zu sehen
ist, wurde die Anzahl der erzeugten Clients schrittweise bis zur Auslastung des Servers
angehoben.
53
5 Test und Auswertung der Implementation
Abbildung 5.1: Tabelle: Messergebnisse Auslastungstest 1
Auswertung
Mit bis ca. 200 Spielern in einem Raum läuft der Server mit einer akzeptablen Antwortzeit. Lediglich 6 Spieler benötigten einen zweiten Versuch, um eine Verbindung zum
Server herstellen zu können. Dies wird in der Regel vom Nutzer nicht bemerkt, da jeder
Client automatisch bis zu 3 Verbindungsversuche startet.
Die Anzahl der benötigten Bitstreams zur Initialisierung eines Clients lässt sich dabei auf
folgende Weise berechnen: Sobald der j-te Client verbindet, muss dieser die komplette
Information über alle andere Clients im selben Raum erhalten, ebenso müssen diese die
komplette Information über den grade neu verbundenen Client erhalten. Das heiÿt, es
müssen
2 ∗ (m − 1) Clientzustände ausgetauscht werden. Wenn also m Spieler verbinden,
gilt für die Anzahl der ausgetauschten Clientzustände
m
X
2 ∗ (k − 1) = −2 ∗ m + 2 ∗
k=1
m
X
k = m2 − m = O(m2 )
k=1
Wie wir sehen steigt die Anzahl der allein zur Initialisierung notwendigen Informationen
quadratisch. Dies sind bei 232 eingeloggten Clients 53592 Initialisierungsstreams. Hinzu
kommt, dass bereits verbundene Clients Aktionen durchführen, die den Server zusätzlich
54
5 Test und Auswertung der Implementation
belasten.
Um sicherzugehen, dass die Überlastung des Servers nicht auf einem Versagen des Programmes zur Erzeugung von Pseudo Clients beruht, wurde dieses von 2 verschiedenen
Rechnern gestartet. System 1 führte wieder den Server aus, System 2 stellte 150 Pseudo Clients und System 3 erzeugte 100. Das Ergebnis war ähnlich: Bei 220 eingeloggten
Clients verlor ein Groÿteil die Verbindung, während im Anschluss der Server wieder zuverlässig reagierte. Eine Anhebung der Spawn Time führte ebenso nicht zu einer höheren
Stabilität.
Abbildung 5.2: Screenshot: Zusammenbruch des Servers bei sehr
vielen Pseudo Clients
5.3.2 Zusammenhang zwischen Serverreaktionszeit und
Botaktivität
Testziel/Vorraussetzungen
Als wir die Belastbarkeit des Servers bezüglich der Anzahl verbundener Clients gemessen
haben, wurde die Aktivität dieser auÿer acht gelassen. In diesem Test soll nun betrachtet
werden, wie sich die Gröÿe der Aktionsintervalle auf die Serverreaktionszeit auswirkt.
System 1 dient hierbei wieder als Server, System 2 erzeugt sämtliche Pseudo Clients und
führt die Messung der Antwortzeit durch.
55
5 Test und Auswertung der Implementation
Messungen
Abbildung 5.3: Tabelle: Messergebnisse Auslastungstest 2
Auswertung
Die Messungen ergeben, dass die Aktivität der Clients bei lediglich 100 eingeloggten
Bots keine gröÿeren Verzögerungen durch ein kürzeres Aktionsintervall erzeugen. Erst
nachdem die Botzahl auf 150 erhöht wurde, machte sich das kürzere Aktionsintervall
stark bemerkbar.
Abbildung 5.4: Diagramm:
Zusammenhang
Aktionsintervall - Latenz
Die Anzahl der versendeten Aktionen pro Sekunde setzt sich auf folgende Art zusammen,
m := Anzahl der Clients, i:=Abstände der Aktionen (s), A:=Durchschnittliche Anzahl
zu sendender Aktionen pro Sekunde
A=
1
∗ m ∗ (m − 1)
i
56
5 Test und Auswertung der Implementation
1
bestimmt die Häugkeit, mit der die Clients eine Aktion durchführen, wenn dies gei
schieht führen
m
Clients diese Aktion aus und senden sie jeweils an alle anderen
m−1
Spieler weiter. Wir sehen, dass die Aktions Frequenz die Anzahl zu sendender Daten
lediglich linear beinusst, während die Anzahl der eingeloggten Clients einen quadratischen Faktor darstellt. Dies führt dazu, dass primär die Anzahl der Clients und weniger
die Häugkeit ihrer Aktionen Auswirkung auf die Antwortzeit des Servers besitzen.
5.3.3 Gleichzeitiger Login von vielen Clients
Testziel/Vorraussetzungen
Alle bisherigen Tests lieÿen die Clients schrittweise mit einem Abstand von 2 Sekunden
einloggen. Was passiert jedoch im schlimmstmöglichen Fall, wenn viele Spieler versuchen
sollten sich im selben Augenblick mit dem Server zu verbinden? Wie in den vorherigen
Tests stellt System 1 den Server zur Verfügung, während System 2 versucht möglichst
viele Clients mit Spawn Time 0 einzuloggen.
Messungen
Abbildung 5.5: Tabelle: Messergebnisse Auslastungstest 3
Auswertung
Wie in den Messungen zu sehen, war es möglich bis zu 80 Clients gleichzeitig zu dem
Server zu verbinden. Bei einer gröÿeren Anzahl konnte der Server die Anfragen nicht
57
5 Test und Auswertung der Implementation
mehr schnell genug beantworten und wurde von den Clients überfordert, die so implementiert waren, dass sie im Falle eines Fehlschlages versuchen, die Verbindung nochmals
herzustellen. Nachdem der Server länger als 10 Sekunden brauchte, um eine Verbindung
und den Login von allen 80 Clients durchzuführen, wurde die Action Time drastisch
erhöht und es war möglich, dass der Server auch bei 80 gleichzeitigen Loginversuchen
stabil lief. In keinem Fall stürzte der Server komplett ab, sondern kehrte in einen stabilen
Zustand zurück, sobald die Login Anfragen ausblieben.
5.4 FPS Tests
Abbildung 5.6: Screenshot: FPS Tests mit vielen Clients
Testziel/Vorraussetzungen
Alle bisherigen Tests bezogen sich lediglich auf die Reaktionszeit auf dem Server. Doch
wie viele Clients in einem Raum lässt die Framerate überhaupt zu? Hierzu wurde auf
System 1 wieder der Server gestartet, auf System 2 wurde der Lobby Client eingeloggt
und von System 3 aus wurden die Pseudo Clients mit dem Server verbunden. Zusätzlich
lief auf System 2 Fraps, ein Programm das extern die Framerate von 3D Anwendungen
messen kann. Bei der Messung befanden sich alle Clients in einem Raum und die Kamera
wurde so ausgerichtet, dass alle Avatare zu sehen waren. Die Messungen fanden auf
System 2 statt.
58
5 Test und Auswertung der Implementation
Abbildung 5.7: Messung: Bilder pro Sekunde bei steigender Client Anzahl
Messungen
Auswertung
Während mit nur einem Client über 160 FPS möglich sind, bricht mit steigender Anzahl sichtbarer Avatare die Framerate spürbar ein. Ab 40 Avatare werden erste Ruckler
bemerkbar, während bei 60 nur noch 10 Bilder pro Sekunde berechnet werden können.
Dies macht sich jedoch erst bemerkbar, wenn alle Avatare gleichzeitig zu sehen sind.
So ist es möglich, dass sich 60 Mitspieler im selben Raum benden und trotzdem eine
üssige Bildfolge über 30 FPS zu erreichen. Hinzu kommt, dass sich im Normalfall nicht
alle Spieler im selben Raum benden, sondern aufgeteilt in den Rauminstanzen. Eine
bessere Framerate könnte zudem erreicht werden, wenn auf weniger komplexe Avatare
zurückgegrien wird.
5.5 Wahrnehmung von steigender Latenz
Testziel/Vorraussetzungen
Ein wichtiger Faktor der Lobby ist die Frage, wie sich eine steigende Latenz auf die
Wahrnehmung des Spielers auswirkt. Ab welchem Ping treten für den Spieler sichtbare
Sprünge, sogenannte Lags, in der Bewegung der Avatare auf ? Dieser Test ist in dieser Hinsicht subjektiv, da dies von jedem Nutzer unterschiedlich wahrgenommen wird.
Während ein geübter Betrachter bereits sehr früh erste Verzögerungen feststellt, sind
59
5 Test und Auswertung der Implementation
diese ggf. für weniger erfahrene Spieler noch nicht zu erkennen.
System 1 stellt hierbei wieder den Server, während sich von System 2 und 3 jeweils ein
Client verbindet. Diese lassen ihren Avatar in der Lobby Bewegungen mit schnellen Richtungsänderungen durchführen und beobachten, ob in der Bewegung des anderen Sprünge
zu erkennen sind. Bei jedem Versuch wird mit Hilfe des Netsimulators die Latenz und
entsprechend ihre Schwankung erhöht.
Messungen
Abbildung 5.8: Messung: Wahrnehmung von steigender Latenz
Die einzelnen Unterteilungen sind hierbei nicht als feste Grenzen zu sehen, sondern gehen
ieÿend ineinander über.
Auswertung
Mit steigender Latenz werden für den Spieler zunehmend stärkere Verzögerungen im
Lobby Ablauf sichtbar. Da sich der Ping bei unseren Servertests aber gröÿtenteils unter
70 bewegte, werden für den Spieler nur selten sichtbare Lags auftreten selbst wenn viele
andere Clients eingeloggt sind.
60
6 Zusammenfassung und Ausblick
6.1 Zusammenfassung
In dieser Arbeit wurde ausgehend von aktuellen Matchmaking Systemen ein 3D Lobbysystem geschaen. Dabei wurde speziell auf ein intuitives Matchmaking und eine einfache
Bedienung wertgelegt, um dieses nicht nur für Core Gamer, sondern auch für Casual Gamer interessant zu machen. Zudem versteht sich dieses Lobbysystem nicht als endgültig,
sondern mehr als ein exibles leicht anpassbares System. Daher ist sie besonders einfach
für zukünftige Spiele anpassbar: Sämtliche Szenen, Avatare, Animationen, Einstellungen
und GUI Dialoge lassen sich ohne Änderung des Quelltextes nur über Scripte, XML
Tabellen und Datenbanken sehr leicht modizieren.
Abbildung 6.1: Screenshot: Weniger aufwändige Avatare können für eine bessere Framerate sorgen
Um ein so komplexes Projekt in kurzer Zeit umzusetzen, war es nicht möglich ohne vorhandene Bibliotheken auszukommen. Aus diesem Grund wurden neben Nebula 2 als 3D
Engine, das Mangalore Game Framework, sowie für die Netzwerktechnik die Rakknet
Multiplayer Network Engine bei der Implementation des Lobbysystems verwendet.
Wie die Tests zeigen bendet sich das entwickelte System in einem einsatzfähigen Zustand. So können sich gleichzeitig in der Lobby bis zu 200 Spieler aufhalten und das
Matchmaking durchführen, ohne mit Lags oder Timeouts vom Server rechnen zu müssen. Lediglich die Framerate der einzelnen Clients kann bei sehr vielen eingeloggten
61
6 Zusammenfassung und Ausblick
Nutzern unter 20 FPS fallen. Je nach der erwarteten Anzahl von Spielern sollte hier ggf.
auf Avatare mit weniger Polygonen zurückgegrien werden.
6.2 Ausblick
Das implementierte Lobbysystem ist einsatzbereit und kann mit wenigen leichten Modikationen an zukünftige Spiele angepasst werden.
Ein wichtiger Schritt, um die Lobby weiterzuentwickeln, wäre das Ermöglichen von Nutzerprolen. So könnte sich ein Spieler, nach seiner Registrierung im System, mit seinen
Nutzerdaten einloggen und leichter andere Mitspieler, ggf. auch über eine Freundesliste,
wiedererkennen und kontaktieren. Auÿerdem könnten so für jeden Spieler Statisken über
bereits geführte Spiele gespeichert werden. Eine Art Belohnungssystem wäre daraus eine
logische Folge: Sobald der Spieler gewisse Zeile erreicht hat, z.B. 50 Multiplayer Partien
gewonnen hat, werden ihm Punkte gutgeschrieben. Diese könnte er in der Lobby z.B. in
ein Accessoir investieren.
Bisher sind alle verwendeten Avatare statisch, d.h. einzelne Komponenten können nicht
ausgetauscht werden. Daher wäre es für eine weitere Personalisierung und Identikation
des Nutzers mit dem Avatar angebracht, auf individuelle Avatare zurückzugreifen. Diese
individuellen Avatare könnten dann je nach Geschmack des Nutzers in bestimmten Kategorien, wie z.B. Haare, Gesicht, Hautfarbe etc., angepasst werden.
Eine zusätzlich notwendige Erweiterung wäre ein Loginserver auf den sich der Nutzer
vor dem eigentlichen Lobbyserver verbindet. Wie wir gesehen haben, bricht der Server
- wenn auch erst bei einer sehr hohen Anzahl - bei zu vielen Spielern zusammen. Aus
diesem Grund sollte die Anzahl der Spieler auf einem Server limitiert werden. Denkbar
wären mehrere Lobbyserver, auf die der Loginserver die Nutzer bei einem Login verteilt,
damit ein einzelner Server nie mehr als 200 Spieler verwalten muss.
Wie wir sehen kann das Lobbysystem noch in vielen Bereichen ausgebaut werden und
ich hoe, dass eine erweiterte Version in zuküngen Multiplayer Spielen zum Einsatz
kommen wird.
62
7 Glossar
API
API (für engl. application programming interface, deutsch: Schnittstelle zur Anwendungsprogrammierung).
Bei einer Api handelt es sich um eine Schnittstelle, die von einem Softwaresystem anderen Programmen zur Anbindung an das System zur Verfügung gestellt wird. Eine
API deniert hierbei die Schnittstelle auf Quelltextebene. Im weiteren Sinne, wird die
Schnittstelle jeder Bibliothek(Library) als API bezeichnet.
Casual Games
Bei Casual Games handelt es sich um elektronische Spiele, die sich durch eine einfache
- intuitive - Bedienung und schnelle Erfolgserlebnisse auszeichen. Im Gegensatz zu Core
Games ist hier die Einarbeitungszeit sehr kurz. Auf diese Weise werden auch Spieler angesprochen, die nicht zu den klassischen Core Gamern gehören und eine gröÿtmögliche
Immersion in das Spiel suchen. Als erstes Casual Game wird häug das in Microsoft
Windows 3.x enthaltene Solitaire betrachtet.
Chat
Das Wort Chat ist abgeleitet von dem englischen Verb to chat was soviel bedeutet wie
unterhalten oder plaudern.
Chat bezeichnet die elektronische Kommunikation, im Gegensatz zu eMails, in Echtzeit.
Bei einem reinen Textchat werden hierbei Textbotschaften ausgetauscht. Es gibt jedoch
auch Audio und Videochats die eine Kommunikation über Ton und/oder Video erlauben. Eine virtuelle Umgebung, in der sich mehrere Leute zum
chatten
treen wird als
Chatraum bezeichnet.
Core Games
Core Games stehen im Gegensatz zu den Casual Games. Sie bezeichnen die Spiele, die
in erster Linie für den klassischen Zocker, der viel Zeit in ein Spiel investieren kann und
63
7 Glossar
will, entwickelt worden sind. Diese bieten i.d.R komplexere Inhalte und eine gröÿere Immersion in das Spielgeschehen, als die bei Casual Games der Fall ist.
Echtzeit Strategiespiele
Bei Echtzeit Strategiespielen handelt es sich um ein Computerspielgenre, bei denen alle
Spieler/Computergegner gleichzeitig agieren. Im Vordergrund stehen dabei zumeist das
Kommandieren der eigenen Einheiten um ein bestimmtes Ziel zu erreichen. Das klassische Echtzeit Strategiespiel zeigt dabei das -meist rechteckige- Schlachtfeld aus einer
Vogelperspektive.
Ethernet
Unter dem Begri Ethernet wird eine Familie von Netztechnologien für Lokale Datennetze (LANs) zusammengefasst, welche die Adressierung, das Rahmenformat und die
Zugriskontrolle auf das Übertragungsmedium verbindet.
Adressierung
Jede Netzwerkkarte besitzt eine eindeutige Ethernet Adresse. Jede Adresse besteht aus
sechs Bytes. Üblich ist hierbei die Angabe der einzelnen Bytes mit je zwei Hex-Zeichen,
getrennt durch Doppelpunkte. Eine Adresse die nur Einsen besitzt bewirkt, dass alle
Rechner im Netz angesprochen werden, man spricht hierbei von einem Broadcast.
Rahmenformat
Bei einem Ethernet Netzwerk handelt es sich um ein so genanntes Paketbasierendes
Netzwerk: Die Daten werden vor ihrer Übertragung in kleinere Einheiten - sog. Pakete - aufgeteilt und vom Empfänger wieder zusammengesetzt. Die Pakete werden dabei
unabhängig voneinander versendet, was dazu führen kann das einzelne Pakete verloren
gehen oder die Reihenfolge vertauscht wird.
Zugriskontrolle
Das Ethernet wurde für die gemeinsame Nutzung eines Übertragungsmediums (Kabel)
durch viele Stationen entwickelt (Mehrfachzugrisnetz). Dabei hört jede Station permanent die Leitung ab. Ist ein Paket für eine Station interessant, kann sie von dieser
übernommen werden. Soll hingegen ein Paket gesendet werden, wartet der Rechner bis
die Leitung frei ist und sendet dann das Paket. Wenn jedoch zwei oder mehr Stationen
ein Paket zu nahezu selber Zeit schicken, kann es zu sogenannten Paketkollisionen kom-
64
7 Glossar
men, wodurch die gesendeten Daten unbrauchbar werden. Wird eine Kollision von einer
Station erkannt, sendet diese ein 32 Bit langes Stausignal und die Nachrichtensender
versuchen nach einer zufälligen Wartezeit erneut ihr Paket zu übermitteln.
Paketaufbau
Die Präamble besteht aus einer 7 Byte langen, alternierenden Bitfolge (101010...1010)
Abbildung 7.1: Aufbau eines Ethernet Paketes
und dient der Bit-Synchronisation der Netzwerkgeräte. Das SFD markiert das Ende der
Einschwingphase. Die Bus-Netzwerkarchitekturen, die auf derartige Einschwingvorgänge
angewiesen sind, werden heute kaum mehr verwendet, und die Präamble bendet sich
nur noch aus Kompatibilitätsgründen in der Spezikation.
In den nächsten Teilen wird zunächst die Ziel und dann die Quell Ethernet- oder MACAddresse gespeichert.
Das VLAN Tag ist vier Bytes lang und wird nur eingesetzt, falls es sich um ein Virtual
Local Area Network (VLAN) handelt, dies ist ein virtuelles lokales Netz innerhalb eines
physischen Netzes.
Das folgende Type Feld gibt Auskunft über das verwendete Protokoll in der nächsthöheren Schicht der Nutzerdaten, so steht z.B. 0x0800 für das Internet Protkoll (IP).
Die folgenden Nutzdaten können pro Datenblock zwischen 0 und 1500 Bytes lang sein.
Sie sind die eigentlichen Informationen, die übertragen werden sollen. Die Nutzdaten
werden von dem unter Type angegebenen Protokoll interpretiert.
Das Pad Feld wird bei Bedarf verwendet um das Ethernet Frame auf die erforderliche
Minmalgröÿe von 64 Byte aufzufüllen. Das in Type angegebene Protokoll muss dafür
sorgen, dass diese als Pad angefügten Bytes nicht interpretiert werden.Das letzte Feld
65
7 Glossar
gibt schlieÿlich die Prüfsumme über den gesamten Frame an. Anhand dieser kann der
Empfänger überprüfen, ob das Paket korrekt übertragen wurde und es bei Bedarf neu
anfordern.
Hardware
In modernen Netzwerken sind zumeist alle Stationen, über Twisted-Pair-Kabel sternförmig mit einem Hub oder Switch verbunden, der die entsprechenden Signale weiterleitet.
First Person Kamera
Bei der rst person Kamera Ansicht wird die Szene aus der Sicht des Spieler-Avatars
gezeigt. Der Avatar wird also (bis auf ggf. die Arme oder Körperteile) nicht direkt vom
Spieler gesehen, welches eine bessere Identikation mit dem gespielten Charakter ermöglichen soll.
Framework
In der Softwareentwicklung bestimmt ein Framework die Rahmenstruktur und somit die
Archtiektur der Anwendung grundlegend. Hierzu stellt es dem Programmierer Basisbausteine in Form von abstrakten und konkreten Klassen zur Verfügung.
Gateway
Ein Gateway dient als Vermittler zwischen verschiedenen Netzwerken und erlaubt diesen, unabhängig von ihren Protokollen, zu kommunizieren.
Host
Host steht im Englischen für Wirt/Gastgeber und bezeichnet in der Informationstechnik
einen Computer, der in einem Netzwerk ein oder mehrere Server betreibt. Aus diesem
Zusammenhang werden Hosts umgangsprachlich auch oft als Server bezeichnet.
Hub
Hub steht im englischen für Knotenpunkt und bezeichnet in der Telekommunikation
Geräte, die Netzwerk Knoten sternförmig verbinden.
LAN
Siehe Local Area Network
66
7 Glossar
Library
Unter Library, engl. für Bibliothek, versteht man in Informationstechnologie eine Programmbibilothek. Bei diesen handelt es sich um Sammlungen von Programmfunktionen
und Klassen, die kein eigenständiges Programm bilden, sondern Hilfsmodule darstellen
die in anderen Programmen verwendet werden können.
Lobby
Unter einer Lobby versteht man im allgemeinen einen Empfangsraum. Im Zusammenhang mit Computerspielen bezeichnet eine Lobby einen Teil des Programmes, in dem
Mehrspielerpartien gestartet werden können. Hierbei bietet eine Lobby nicht nur eine
Übersicht über vorhandene Spielmöglichkeiten, sondern lässt die Nutzer vor und während dem Matchmaking miteinander kommunizieren.
Local Area Network
Ein Local Area Network (LAN) bezeichnet ein lokales Netz, das es einer Anzahl gleichberechtiger Teilnehmer auf einem räumlich begrenzten Gebiet (üblich sind bis zu 10km)
Nachrichten/Daten auszutauschen. LANs können hierbei drahtgebunden arbeiten, wie
z.B. die standartisierten Verfahren Ethernet und Token Ring, aber auch drahtlos wie
dies bei WLANs der Fall ist.
Matchmaking
Im Zusammenhang mit Multiplayer Spielen bezeichnet Matchmaking, den Prozess in
dem sich Nutzer zu einer gemeinsamen Partie zusammenschliessen und diese starten.
Massively Multiplayer Online Role-Playing Game(MMORPG)
Der Begri des Massively Multiplayer Online Role-Playing Game (wörtlich übersetzt:
Massen-Mehrspieler-Online-Rollenspiel) beschreibt ein Computerrollenspiel, bei dem gleichzeitig bis zu einige tausend Spieler eine dauerhaft bestehnde virtuelle Welt mit ihren
Avataren betreten können. Dies geschieht üblicherweise, indem sich die Nutzer mit Hilfe
eines Clients auf dem Rollenspielserver einloggen.
Open Source
Open Source bedeutet wörtlich übersetzt Quelloenheit. Im Zusammenhang mit Software heiÿt dies, dass es jedem möglich ist den Quelltext des Open Source Programmes
67
7 Glossar
Abbildung 7.2: Screenshot aus Stendhal einem Open
Source MMORPG
einzusehen. Auch wird damit die Erlaubnis verbunden diesen zu ändern und weiterzugeben.
Packet Loss
Packet Loss beschreibt den Verlust von Paketen bei einer paketbasierenden Datenübertragung in einem Netzwerk (siehe Ethernet).
RTS
Abkürzung für Real Time Strategy, siehe Echtzeitstrategie Spiele.
Script
Bei einem Script handelt es sich um ein Programm oder eine Befehlsfolge, die erst bei
ihrer Ausführung durch einen Interpreter in Maschinencode umgewandelt wird. Dadurch
sind Scriptsprachen im allgemeinen nicht so performant wie Programmiersprachen, deren
Code vor der Ausführung komplett durch einen Compiler in Maschinencode übersetzt
wird.
Switch
Ein Switch (engl. Schalter oder Weiche), ist ähnlich dem Hub eine Netzwerk Komponente zum sternförmigen Verbinden von Netzwerkkomponenten. Zusätzlich analysieren
Switches den Netzwerkverkehr und treen logische Entscheidungen, so dass die Daten
68
7 Glossar
nicht wie bei klassischen Hub an jeden Teilnehmer weitergeleitet werden, sondern möglichst nur an den Rechner, der als Empfänger bestimmt ist. Aus diesem Grund entlastet
die Verwendung von Switches das Netzwerk erheblich.
Abbildung 7.3: Mit Hilfe eines Switches werden Rechner
sternförmig vernetzt
Structured Query Language (SQL)
SQL bezeichnet eine Sprache zur Ansicht und Manipulation von Daten in relationellen
Datenbanken.
Szenengraph
Ein Szenengraph ist eine Datenstruktur, die häug bei der Entwicklung computergrascher Anwendungen eingesetzt wird. In der graphentheoretischen Sicht handelt es sich
bei einem Szenegraphen um einen Baum, dessen Wurzelknoten die Gesamtszene bildet.
Diesem untergeordnet sind Objekte der Szene, die wiederrum selbst Objekte als Kinder enthalten können. Man unterscheidet in diesem zwischen Objektkoordinaten und
Weltkoordinaten. Objektkoordinaten bezeichnen die Position eines Objektes zu seinem
übergeordneten Objekt/Knoten, Weltkoordinaten hingegen bezeichnen die Position im
Bezug zur Position der Wurzel (Gesamtszene). Bei der Transformation eines Knotens
werden dabei sowohl der Knoten, als auch alle seine Kinder transformiert.
Third Person Kamera
Die
third person
Kamera zeigt die Szene aus der dritten Person, meist leicht schräg von
oben, der Sichtwinkel kann dabei oft vom Nutzer gesteuert werden. Ein Vorteil dieser
69
7 Glossar
Ansicht ist eine gröÿere Übersicht über die Szene, da der Spieler auch Bereiche einsehen
kann, die unmittelbar neben und hinter seinem Avatar liegen.
User Datagram Protocol (UDP)
Das User Datagram Protocol -kurz UDP- ist ein Netzprotokoll, dass zur Transportschicht der Internetprotokollfamilie gehört. Hierbei handelt es sich um verbindungsloses
Protokoll, d.h. dass vor Übertragungsbeginn keine Verbindung aufgebaut werden muss,
wie dies z.B. bei TCP der Fall ist. UDP stellt jedoch keinen Mechanismus bereit um
verlorengegangene oder vertauschte Pakete zu erkennen. Daher sollte eine Anwendung,
die UDP als Netzprotokoll verwendet unempndlich gegenüber diesen sein.
70
8 Screenshots
Abbildung 8.1: Screenshot: Lobby Client
71
8 Screenshots
Abbildung 8.2: Screenshot: Lobby Client
72
8 Screenshots
Abbildung 8.3: Screenshot: Lobby Client
73
8 Screenshots
Abbildung 8.4: Screenshot: Lobby Client
74
Abbildungsverzeichnis
1.1
Screenshot aus Microsoft: Solitaire
. . . . . . . . . . . . . . . . . . . . .
5
2.1
Screenshot aus CC: Generäle - Die Stunde Null, Publisher: EA Games . .
8
2.2
Screenshot aus CC: Generäle - Die Stunde Null, Publisher: EA Games . .
9
2.3
Screenshot aus World of Warcraft: Burning Crusade, Publisher: Blizzard
11
2.4
Screenshot aus World of Warcraft: Burning Crusade, Publisher: Blizzard
12
3.1
Grundzustände des Lobbysystems . . . . . . . . . . . . . . . . . . . . . .
15
3.2
Zustände eines Clients innerhalb der Lobby . . . . . . . . . . . . . . . . .
19
3.3
Pseudocode: Übergang zwischen Lobby Client und Spiel
. . . . . . . . .
22
4.1
Kommunikation mit Nebula Mangalore . . . . . . . . . . . . . . . . . . .
26
4.2
Screenshot aus dem Projekt: Login Screen
30
4.3
Screenshot aus dem Projekt: Main Lobby State mit Bots
. . . . . . . . .
31
4.4
Übersicht über die Lobby Client States . . . . . . . . . . . . . . . . . . .
32
4.5
SQL Level Datenbank
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
4.6
Jedes Spielobjekt erhält durch seine Eigenschaften Funktionen . . . . . .
34
4.7
Avatar Entity: Screenshot aus dem Lobby Client . . . . . . . . . . . . . .
35
4.8
Avatar Entity: Screenshot aus dem Lobby Client . . . . . . . . . . . . . .
36
4.9
Kommunikation zwischen Spieler und Matchmaking Entity . . . . . . . .
38
. . . . . . . . . . . . . . . . .
4.10 Quelltext: Lobby Server - LSNetworkCon.cpp Zeile 226
. . . . . . . . . .
40
. . . . . . . . .
41
4.12 Screenshot: Darstellung mit als Kugeln visualisierten Navigationsmesh . .
43
4.13 Screenshot: Netzwerk Pong Variante
49
4.11 Gekürzter Quelltext: Lobby Client - LCNetworkCon.cpp
. . . . . . . . . . . . . . . . . . . .
5.1
Tabelle: Messergebnisse Auslastungstest 1
5.2
Screenshot: Zusammenbruch des Servers bei sehr vielen Pseudo Clients
5.3
Tabelle: Messergebnisse Auslastungstest 2
5.4
Diagramm: Zusammenhang Aktionsintervall - Latenz
75
. . . . . . . . . . . . . . . . .
54
.
55
. . . . . . . . . . . . . . . . .
56
. . . . . . . . . . .
56
Abbildungsverzeichnis
5.5
Tabelle: Messergebnisse Auslastungstest 3
. . . . . . . . . . . . . . . . .
57
5.6
Screenshot: FPS Tests mit vielen Clients
. . . . . . . . . . . . . . . . . .
58
5.7
Messung: Bilder pro Sekunde bei steigender Client Anzahl
. . . . . . . .
59
5.8
Messung: Wahrnehmung von steigender Latenz . . . . . . . . . . . . . . .
60
6.1
Screenshot: Weniger aufwändige Avatare können für eine bessere Framerate sorgen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
7.1
Aufbau eines Ethernet Paketes, Quelle: http://de.wikipedia.org/wiki/Ethernet 65
7.2
Screenshot: Stendhal, Quelle: http://arianne.sourceforge.net/screens/stendhal/20050605stendh
7.3
Stern Architektur in Netzwerken, Quelle: http://de.wikipedia.org/wiki/Switch
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69
8.1
Screenshot: Lobby Client . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
8.2
Screenshot: Lobby Client . . . . . . . . . . . . . . . . . . . . . . . . . . .
72
8.3
Screenshot: Lobby Client . . . . . . . . . . . . . . . . . . . . . . . . . . .
73
8.4
Screenshot: Lobby Client . . . . . . . . . . . . . . . . . . . . . . . . . . .
74
76
Literaturverzeichnis
[1] Bericht über die Game Developer Converence 2005, Version: November 2006
http://www.heise.de/tp/r4/artikel/20/20776/1.html
[2] Online
Gaming.
Markets
to
2007.
The
New
Growth
Opportunities,
Version
November 2006 https://www.markt-studie.de/studien/onlinespiele-marktausblick2007-online-gaming-markets-2007-growth-opportunities-inh-2741.html
[3] Casual
games
-
good,
clean,
cheap
fun
online
Version
November
2006
http://www.cnn.com/2006/TECH/fun.games/02/28/casual.games/
[4] Game Programming Gems edited by Mark DeLoura - erschienen 2000 im Charles
River Media Verlag ISBN: 1-58450-049-2
[5] 3D Spiele Programmierung von David Scherfgen - erschienen 2004 im Hanser Verlag
ISBN: 3-3446-22869
[6] The
Nebula
Device:
What
ist
the
Nebula
2
Device?
Version
Januar
2007
http://nebuladevice.cubik.org/what-is-n2/
[7] The
Nebula
Device
2:
Engine
Version
Januar
2007
Details
http://www.devmaster.net/engines/engine-details.php?id=69
[8] The
Rakknet
Multiplayer
Network
Engine
Version
Januar
2007
http://www.rakkarsoft.com
[9] Wikipedia: Ethernet, März 2007 http://de.wikipedia.org/wiki/Ethernet
[10] Tecchannel:
Ethernet
Grundlagen
und
Co,
März
2007
http://www.tecchannel.de/netzwerk/grundlagen/431828/
[11] Tecchannel:
Ethernet
im
Überblick,
http://www.tecchannel.de/netzwerk/grundlagen/401674/
77
März
2007
Literaturverzeichnis
[12] Wikipedia: LAN, März 2007 http://de.wikipedia.org/wiki/LAN
[13] Wikipedia: Hub, März 2007 http://de.wikipedia.org/wiki/Hub
[14] Wikipedia: http://de.wikipedia.org/wiki/TokenRing
[15] ItWissen: Denition LAN, März 2007 http://www.itwissen.info/denition/lexikon/lanlanlanlocal
[16] Wikipedia: Programmbibliothek, März 2007 http://de.wikipedia.org/wiki/Library
[17] Studie: EA Games - Spielplatz Deutschland, Typologie der Spieler; März 2007
http://publish.electronic-arts.de/publish/page204280515468314.php3
[18] Gert Fischer, Lineare Algebra 13 Auage - erschienen Juli 2002 im Vieweg Verlag
ISBN: 3-528-97217-3
[19] Studie: Computer und Videospiele - Einstellungen und Nutzungsverhalten in
Deutschland, Frankreich und Groÿbritannien; März 2007 http://publish.electronicarts.de/publish/page204280515468314.php3
78
Literaturverzeichnis
Erklärung
Ich versichere hiermit, dass ich die Arbeit selbstständig verfasst, keine anderen, als
die angegebenen Hilfsmittel verwendet und die Stellen, die anderen Werken im Wortlaut
oder dem Sinne nach entnommen sind, mit Quellenangaben kenntlich gemacht habe.
Dies gilt auch für Zeichnungen, Skizzen, Notenbeispiele, Ton- und Bildträger sowie bildliche Darstellungen.
Ort, Datum
Johannes Bufe
79