[Projekt] Zorn der Könige - MORPG
Verfasst: 02.11.2010, 15:21
Hallo ZFX Community
Ich möchte euch mein aktuelles Projekt „Zorn der Könige“ vorstellen. Es handelt sich um ein MORPG (ich habe das M für Massive bewusst ausgelassen) wobei man nur instanzierte Dungeons spielen kann. Das Game kann man zurzeit als Tech-Demo betrachet, es sind aber schon diverse Spielelemente eingebaut. Es gibt also keine „grosse Spielwelt“ sondern man kann sich in einem separaten Windows Client (Normale .NET WinForms Applikation) seine Gruppe zusammenstellen und dann einen Dungeon betreten. Dabei öffnet sich dann das eigentliche Spiel.
Bevor ich weitere Details erläutere, hier ein paar Screenshots von der aktuellen Version:
http://www.deltasoftgames.ch/zdk.html
DER CLIENT
Es gibt zwei Clients (nur Windows): Man startet das Spiel mit einem normalen WinForms Client (in c# .NET geschrieben). Hier finden das Login und die Charakterauswahl statt. Nach erfolgreichem Login kann man mit anderen Spielern chatten und die Charakterwerte betrachten. Sind genug Spieler online, kann man eine Gruppe zusammenstellen und einen Dungeon starten. Dabei wird der zweite Client gestartet, eine separate EXE. Dies ist das eigentliche Spiel. Dieser Client wurde komplett in C++ entwickelt und verwendet OpenGL. Die Engine ist eine Eigenentwicklung (ich bastle schon sehr lange daran). Hier die wichtigsten Features der Engine:
- Hierarchischer „Szenengraph“ (Sektorbasiert) mit ganzem Kram wie Frustumculling usw.
- Eigenes Format für Levelgeometrie und statische Objekte (erstellt durch eigenes Tool WorldStudio 3D)
- Shader Unterstützung (GLSL)
- Material und Ressourcen Manager
- Klassische Lightmaps
- Kollisionserkennung
- Charakteranimation (auf MD2 Files basiert)
- Simples GUI (Buttons, Chat, Labels, …)
DIE SERVER ARCHITEKTUR
Damit der Server später gut skaliert, habe ich viel Zeit in eine gute Serverarchitektur investiert. Da ich Beruflich auch mit Serverentwicklungen zu tun habe konnte ich schon bewährte Architekturen übernehmen.
Es gibt drei Servermodule (nur WIndows, ich hab keine Ahnung von Linux :? ) um die Last optimal zu verteilen.
- LoginServer: Der LoginServer ist ein eigenständiger Service welcher sich um das Login der Spieler kümmert. Die WinForms Applikation verbindet sich via TCP mit diesem Server. Hier werden auch die Gruppenzusammenstellung und später die Charaktereinstellungen vorgenommen. Sobald ein Dungeon angefordert wird, sucht der LoginServer einen ControlServer aus welcher am wenigsten ausgelastet ist.
- Der ControlServer ist wiederum ein eigenständiger Service und kann auf mehrere Maschinen verteilt werden. Der ControlServer erzeugt die eigentlichen Game-Instanzen (SessionServices). Jeder ControlServer ist mit dem LoginServer verbunden, damit der LoginServer die Auslastung des ControlServers abfragen kann.
- SessionServices: Dies SessionServices sind eigenständige EXEs und werdem vom ControlServer gestartet. Einmal gestartet, laufen die SessionServices zwar als Childprozess vom ControlServer, verwalten aber die Session völlig autonom. Sobald ein neuer Dungeon gestartet wird, wird ein neuer SessionService Prozess gestartet und der 3D Client verbindet sich direkt mit diesem Prozess (via RakNet/UDP).
Für einen Realm gibt es also immer nur einen LoginServer. Je nach dem wie viele Spieler für diesen Realm existieren, können neue ControlServer auf separaten Maschinen hinzugefügt werden um zu Skalieren. Jede Server-Maschine besitzt immer nur einen ControlServer. Je nach Serverhardware kann dann konfiguriert werden wie viele SessionServices pro Controller gestartet werden sollen.
Der eigentliche Spielserver ist im SessionService eingebaut, hier findet die ganze Gamelogik statt. Jeder Client einer Gruppe ist dann mit diesem Service verbunden. Da jeder SessionService in einem eigenen Prozess ausgeführt wird, sind andere Spieler von einem Absturz der Session nicht betroffen.
Ich konnte diese Architektur noch nicht mit vielen Spielern testen. Da ich aber Beruflich als Serverentwickler arbeite, weiss ich das diese Architektur für viele Spieler in Zukunft gut skalieren wird (hoffe ich zumindest, da Theorie != Praxis).
Für die Netzwerkkommunikation zwischen Gameclient und SessionService verwende ich das RakNet Framework.
Für die Persistenz verwende ich eine MySql DB. Sowohl der LoginServer wie auch die SessionServices haben zugriff auf die DB und können Charakterinformationen abfragen.
LEVELDESIGN UND ARTWORK
Die Levels für die Dungeons entwickle ich mit einem eigenen Tool namens WorldStudio 3D. Das ist ein Leveleditor denn ich ursprünglich für mein Game „AssaultForce“ entwickelt habe. Der Editor und der Sourcecode (ist alles in Delphi programmiert) kann für Interessierte hier heruntergeladen werden: http://www.deltasoftgames.ch
Da die Dungeons eine Indoorarchitektur besitzen erfüllte mein eigenes Tool WorldStudio 3D meine Anforderungen und ich habe mich entschlossen das Tool weiterzuentwickeln für mein aktuelles Projekt.
Einfachere Statische Modelle habe ich selber erstellt komplexere habe ich gekauft. Auch die Animierten Modelle habe ich alle gekauft, ich habe weder Skill noch Zeit eigene Models zu Animieren, Riggen und Texturieren.
Wem die Grafiken für die Spells aufgefallen sind, ja die sind aus WoW geklaut. Die dienen lediglich als Platzhalter und werden später mit eigenen Grafiken ersetzt.
DAS GAME
Jetzt möchte ich etwas Gamespezifischer werden: Das Spiel ist ein klassisches Online RPG. Zurzeit gibt es drei Klassen:
- Krieger (Tank)
- Waldläufer (Distanzschaden)
- Druid (Heilung)
Jede Klasse hat eigene Attribute und Fähigkeiten. Ich arbeite gerade an dem Balancing der Fähigkeiten und der Attribute, es ist echt nicht trivial ein Spiel so zu Balancen dass es nicht zu schwer aber auch nicht zu leicht ist. Zudem kommen Später Gegenstände und Rüstungen dazu die die Attribute verändern usw.
Storymässig habe ich mir auch schon Gedanken gemacht. Es wird ein klassischer Plot wie „Gut gegen Böse“. In einem Land mit mehreren Königreichen, wo ein altes Bündnis alter Könige den Frieden bewahrte, ist etwas Böses im gang. Als Spieler muss man nun in Verschiedenen Dungeons herausfinden was und erfährt immer mehr von der Story und der alten Königreiche.
Ich habe bisher nur einen roten Faden der Story, da ich mich voll und ganz auf die Umsetzung des Games (technisch) konzentriere.
AKTUELLER STAND
Ich habe nun einen Stand erricht wo man das Spiel tatsächlich spielen kann. Die Servermodule laufen nur lokal. Meine kurzfristigen Ziele (ca. Ende Jahr):
- VirtualServer mieten um die ganzen Servermodule Live zu testen.
- Attribut und Kampfsystem so ausbauen, dass das Spiel spielbar ist (Gegner und Spielerklassen ausbalancen).
- Erster Dungeonabschnitt mit einem Bosskampf.
- Einfache Projekthomepage aufsetzen um einen Account/Charakter zu erstellen damit auch Aussenstehende das Spiel testen können.
Sobald ich wieder mehr Infos zu meinem Projekt habe werde ich dies hier publizieren (vielleicht sogar schon eine Demo zum Spielen). Ich werde mich auch noch nach interessierten Personen umschauen, da schon bald der Zeitpunkt kommt wo ich nicht mehr alles alleine machen kann. Ich will aber zuerst eine anständige Tech-Demo haben wo man sich ein Bild des Spieles machen kann, bevor ich mit leeren Versprechungen auf Teamsuche gehe ;-)
Ach ja, das ganze ist ein Hobbyprojekt habe aber keine Abneigung das ganze vielleicht mal kommerziell aufzuziehen, mal schauen ;-)
MfG
LPVOID_CH
Ich möchte euch mein aktuelles Projekt „Zorn der Könige“ vorstellen. Es handelt sich um ein MORPG (ich habe das M für Massive bewusst ausgelassen) wobei man nur instanzierte Dungeons spielen kann. Das Game kann man zurzeit als Tech-Demo betrachet, es sind aber schon diverse Spielelemente eingebaut. Es gibt also keine „grosse Spielwelt“ sondern man kann sich in einem separaten Windows Client (Normale .NET WinForms Applikation) seine Gruppe zusammenstellen und dann einen Dungeon betreten. Dabei öffnet sich dann das eigentliche Spiel.
Bevor ich weitere Details erläutere, hier ein paar Screenshots von der aktuellen Version:
http://www.deltasoftgames.ch/zdk.html
DER CLIENT
Es gibt zwei Clients (nur Windows): Man startet das Spiel mit einem normalen WinForms Client (in c# .NET geschrieben). Hier finden das Login und die Charakterauswahl statt. Nach erfolgreichem Login kann man mit anderen Spielern chatten und die Charakterwerte betrachten. Sind genug Spieler online, kann man eine Gruppe zusammenstellen und einen Dungeon starten. Dabei wird der zweite Client gestartet, eine separate EXE. Dies ist das eigentliche Spiel. Dieser Client wurde komplett in C++ entwickelt und verwendet OpenGL. Die Engine ist eine Eigenentwicklung (ich bastle schon sehr lange daran). Hier die wichtigsten Features der Engine:
- Hierarchischer „Szenengraph“ (Sektorbasiert) mit ganzem Kram wie Frustumculling usw.
- Eigenes Format für Levelgeometrie und statische Objekte (erstellt durch eigenes Tool WorldStudio 3D)
- Shader Unterstützung (GLSL)
- Material und Ressourcen Manager
- Klassische Lightmaps
- Kollisionserkennung
- Charakteranimation (auf MD2 Files basiert)
- Simples GUI (Buttons, Chat, Labels, …)
DIE SERVER ARCHITEKTUR
Damit der Server später gut skaliert, habe ich viel Zeit in eine gute Serverarchitektur investiert. Da ich Beruflich auch mit Serverentwicklungen zu tun habe konnte ich schon bewährte Architekturen übernehmen.
Es gibt drei Servermodule (nur WIndows, ich hab keine Ahnung von Linux :? ) um die Last optimal zu verteilen.
- LoginServer: Der LoginServer ist ein eigenständiger Service welcher sich um das Login der Spieler kümmert. Die WinForms Applikation verbindet sich via TCP mit diesem Server. Hier werden auch die Gruppenzusammenstellung und später die Charaktereinstellungen vorgenommen. Sobald ein Dungeon angefordert wird, sucht der LoginServer einen ControlServer aus welcher am wenigsten ausgelastet ist.
- Der ControlServer ist wiederum ein eigenständiger Service und kann auf mehrere Maschinen verteilt werden. Der ControlServer erzeugt die eigentlichen Game-Instanzen (SessionServices). Jeder ControlServer ist mit dem LoginServer verbunden, damit der LoginServer die Auslastung des ControlServers abfragen kann.
- SessionServices: Dies SessionServices sind eigenständige EXEs und werdem vom ControlServer gestartet. Einmal gestartet, laufen die SessionServices zwar als Childprozess vom ControlServer, verwalten aber die Session völlig autonom. Sobald ein neuer Dungeon gestartet wird, wird ein neuer SessionService Prozess gestartet und der 3D Client verbindet sich direkt mit diesem Prozess (via RakNet/UDP).
Für einen Realm gibt es also immer nur einen LoginServer. Je nach dem wie viele Spieler für diesen Realm existieren, können neue ControlServer auf separaten Maschinen hinzugefügt werden um zu Skalieren. Jede Server-Maschine besitzt immer nur einen ControlServer. Je nach Serverhardware kann dann konfiguriert werden wie viele SessionServices pro Controller gestartet werden sollen.
Der eigentliche Spielserver ist im SessionService eingebaut, hier findet die ganze Gamelogik statt. Jeder Client einer Gruppe ist dann mit diesem Service verbunden. Da jeder SessionService in einem eigenen Prozess ausgeführt wird, sind andere Spieler von einem Absturz der Session nicht betroffen.
Ich konnte diese Architektur noch nicht mit vielen Spielern testen. Da ich aber Beruflich als Serverentwickler arbeite, weiss ich das diese Architektur für viele Spieler in Zukunft gut skalieren wird (hoffe ich zumindest, da Theorie != Praxis).
Für die Netzwerkkommunikation zwischen Gameclient und SessionService verwende ich das RakNet Framework.
Für die Persistenz verwende ich eine MySql DB. Sowohl der LoginServer wie auch die SessionServices haben zugriff auf die DB und können Charakterinformationen abfragen.
LEVELDESIGN UND ARTWORK
Die Levels für die Dungeons entwickle ich mit einem eigenen Tool namens WorldStudio 3D. Das ist ein Leveleditor denn ich ursprünglich für mein Game „AssaultForce“ entwickelt habe. Der Editor und der Sourcecode (ist alles in Delphi programmiert) kann für Interessierte hier heruntergeladen werden: http://www.deltasoftgames.ch
Da die Dungeons eine Indoorarchitektur besitzen erfüllte mein eigenes Tool WorldStudio 3D meine Anforderungen und ich habe mich entschlossen das Tool weiterzuentwickeln für mein aktuelles Projekt.
Einfachere Statische Modelle habe ich selber erstellt komplexere habe ich gekauft. Auch die Animierten Modelle habe ich alle gekauft, ich habe weder Skill noch Zeit eigene Models zu Animieren, Riggen und Texturieren.
Wem die Grafiken für die Spells aufgefallen sind, ja die sind aus WoW geklaut. Die dienen lediglich als Platzhalter und werden später mit eigenen Grafiken ersetzt.
DAS GAME
Jetzt möchte ich etwas Gamespezifischer werden: Das Spiel ist ein klassisches Online RPG. Zurzeit gibt es drei Klassen:
- Krieger (Tank)
- Waldläufer (Distanzschaden)
- Druid (Heilung)
Jede Klasse hat eigene Attribute und Fähigkeiten. Ich arbeite gerade an dem Balancing der Fähigkeiten und der Attribute, es ist echt nicht trivial ein Spiel so zu Balancen dass es nicht zu schwer aber auch nicht zu leicht ist. Zudem kommen Später Gegenstände und Rüstungen dazu die die Attribute verändern usw.
Storymässig habe ich mir auch schon Gedanken gemacht. Es wird ein klassischer Plot wie „Gut gegen Böse“. In einem Land mit mehreren Königreichen, wo ein altes Bündnis alter Könige den Frieden bewahrte, ist etwas Böses im gang. Als Spieler muss man nun in Verschiedenen Dungeons herausfinden was und erfährt immer mehr von der Story und der alten Königreiche.
Ich habe bisher nur einen roten Faden der Story, da ich mich voll und ganz auf die Umsetzung des Games (technisch) konzentriere.
AKTUELLER STAND
Ich habe nun einen Stand erricht wo man das Spiel tatsächlich spielen kann. Die Servermodule laufen nur lokal. Meine kurzfristigen Ziele (ca. Ende Jahr):
- VirtualServer mieten um die ganzen Servermodule Live zu testen.
- Attribut und Kampfsystem so ausbauen, dass das Spiel spielbar ist (Gegner und Spielerklassen ausbalancen).
- Erster Dungeonabschnitt mit einem Bosskampf.
- Einfache Projekthomepage aufsetzen um einen Account/Charakter zu erstellen damit auch Aussenstehende das Spiel testen können.
Sobald ich wieder mehr Infos zu meinem Projekt habe werde ich dies hier publizieren (vielleicht sogar schon eine Demo zum Spielen). Ich werde mich auch noch nach interessierten Personen umschauen, da schon bald der Zeitpunkt kommt wo ich nicht mehr alles alleine machen kann. Ich will aber zuerst eine anständige Tech-Demo haben wo man sich ein Bild des Spieles machen kann, bevor ich mit leeren Versprechungen auf Teamsuche gehe ;-)
Ach ja, das ganze ist ein Hobbyprojekt habe aber keine Abneigung das ganze vielleicht mal kommerziell aufzuziehen, mal schauen ;-)
MfG
LPVOID_CH