Fünf Jahre Sklaverei

Hast du jemals über dein eigenes Spiel nachgedacht? Und was ist mit deinem eigenen Multiplayer-Spiel? Ich denke, ja! Viele von Ihnen möchten an der Entwicklung Ihres eigenen Meisterwerks festhalten, in dem Ihre vielfältige Vorstellungskraft und Ihr außergewöhnlicher Perfektionismus verschmelzen. Ich verstehe dich und möchte meine Geschichte auf diese faszinierende Weise erzählen.




Hintergrund


Alles begann im Jahr 2007, als ein Online-j2me-Spiel erschien, das auf der Arbeit von Sergey Lukyanenko basiert. Ich hatte noch keinen Computer und war sehr beeindruckt von diesem Spiel auf einem Handy, vor allem von der offenen Welt. Ich mischte mich ein und fand trotz fehlender Tutorials schnell heraus, was los war.


Die Zeit verging, aber das Interesse ließ nicht nach, es gab schon nicht genug nur ein Spiel. Der Wunsch zu lernen, wie dies funktioniert, und die Zufälligkeit führten zur Verwendung von Fehlern mit nachfolgenden Verboten. Der weitere Abschluss und die Berufswahl "Programmierer" gaben der Entwicklung meiner ersten Software für Profit in der Online-Welt Impulse.


Sobald mein Wissen auf dem Gebiet der OOP vertieft war, haben wir uns bereits mit meinem Spielkameraden und Künstler entschlossen, ein eigenes MMO zu entwickeln, das hundertmal cooler wäre!


Worum geht es in unserem Spiel?


Unser Spiel verherrlicht zwei kriegführende Fraktionen, Oseon und Weiland. Jeder von ihnen hat seinen eigenen Planeten und beherbergt die Gebäude, die für die Entwicklung des Spielers notwendig sind.



Heimatplanetenfraktion Oseon


Fraktionsplaneten sind durch ein System von 12 Toren geschützt. Nachdem alle Tore erobert wurden, erhalten die Spieler Zugang zum feindlichen Planeten. Es reicht nicht aus, sich nur durch den geöffneten Pfad zu teleportieren, danach muss die Zitadelle - das Hauptgebäude des Planeten - erobert werden. Die Spieler der besetzten Seite befinden sich in einer schwierigen Situation und erhalten Reservetruppen mit 1,4-mal höheren Parametern als ihre eigenen.


Die Schlachten finden Schritt für Schritt statt, einige vergleichen sie mit ähnlichen in „Heroes“, andere nennen sie eine Art Schach. Zum Teil ist alles in Ordnung, hier gibt es Einheiten mit Magie, und Sie müssen mit Ihrem Kopf ein paar Schritte vorausdenken.



Kämpfe mit dem Feind


Die grausame Welt der PvP-Spiele hat jedoch andere interessante Mechanismen, angefangen von der üblichen Entwicklung reicher Ablagerungen bis hin zur Jagd nach Schatzsuchern.


Prototyp


Da wir keine Erfahrung mit der Erstellung von MMO-Spielen hatten, haben wir uns entschlossen, alles zu nehmen, was schlecht ist. Unser Set enthält: Anthill, Netty, MySQL. Dies waren nicht genau diese Technologien. Nach viel Arbeit stießen wir auf eine Reihe von Problemen: das Fehlen eines Schnittstelleneditors, die Mikroprotokolle der Karte beim Verschieben, Texteingabe und vieles mehr. Im Vollbild sah das Spiel ekelhaft aus.



Der Prototyp des Spiels. Minenentwicklung


In einigen Fällen begann sich die virtuelle Kamera der Engine beim Umschalten des Spielstatus merkwürdig zu verhalten.



Der Prototyp des Spiels. Verzögerungen


Nach einem Jahr der Entwicklung, in dem es nicht mehr möglich war, sich zurückzuziehen, haben wir dennoch die Grundmechanik des Spiels fertiggestellt, einen Karteneditor zusammengestellt und entschieden, dass es an der Zeit war, es öffentlich zu testen.
Wir haben das Spiel zu VK hinzugefügt (ohne Katalog) und den Start in unserer Gruppe angekündigt, in der ungefähr 100 Personen anwesend waren.
Zu diesem Zeitpunkt hatte das Spiel eine unverständliche Kontrolle über die Tastatur, es gab viele Fehler sowie zu einfache Karten mit nur zwei Ebenen (Gras und Bäume). Und nach drei Tagen Spiel in VK haben sich nur 15 Personen registriert - die Leute haben nicht verstanden, wie man spielt. Und wir haben beschlossen, alles von Grund auf neu zu machen.


Screenshots der alten Version

Großartig online



Spielerinteraktionsmenü



Kämpfe


Lech, das ist es nicht, komm zuerst!


Wahrscheinlich denken viele, die mit einem Misserfolg konfrontiert sind, dass dies nicht ihre ist, weil viel Zeit aufgewendet wurde, aber es gibt kein sichtbares Ergebnis. Aber aufzugeben ist dumm, wenn man so weit gekommen ist. Nach ein paar Monaten haben wir uns mit der vorhandenen Erfahrung entschlossen, das Spiel wieder aufzunehmen.


Wir haben uns entschlossen, die neue Version des Clients definitiv mit dem Rendern von Grafiken über eine Grafikkarte zu erstellen. Von den vielen Frameworks schien Starling das attraktivste zu sein, es hatte eine ähnliche API mit einem Standard-Flash, es wurde von Adobe unterstützt und es war möglich, vorhandene Grafiken ohne großen Aufwand zu verwenden. Schließlich funktionierte die neue Version reibungslos.
Um den Vektor im laufenden Betrieb zu rastern, habe ich den Dynamic TextureAtlas Generator verwendet . Aber in der nachfolgenden Bibliothek musste fast vollständig umgeschrieben und Atlanten aufgegeben werden, die Animation nahm viel Platz ein und konnte nicht in den Atlas der erlaubten Größen passen.


Karten


Nachdem wir die Technologien auf dem Client herausgefunden hatten, entschieden wir uns, uns mit den Serverkarten zu befassen. Jeder Planet kann aus einem oder mehreren Orten bestehen, zwischen denen Sie nach rechts oder links gehen können. Für jeden Ort wurde ein Teil der Karte erstellt, der zunächst aus zwei Ebenen bestand. Später beschlossen wir, eine weitere Ebene und dann eine weitere Ebene hinzuzufügen, und entschieden uns daher für vier:


  • Gras / Boden;
  • Steine ​​\ Wasser;
  • käfiggroße Dekorationen;
  • große Landschaft.

Die Idee war, dass die ersten drei Ebenen in einer Bitmap gezeichnet und an den Videospeicher gesendet wurden. Dies ist ein guter Ansatz, wenn anstelle von drei Ebenen eine im Hintergrund gezeichnet wird. Dies war jedoch nicht ohne Probleme: Wenn Sie MovieClipa zur Rasterung auf das nächste Bild umschalten, sollten alle vorherigen Bilder gezeichnet werden. Am Eingang des Ortes wurde das Spiel eingefroren, daher wurde beschlossen, alle Kacheln im Voraus auf BitmapData zu übertragen und schnelle copyPixel zu erstellen. Gleichzeitig wurde zu Beginn des Spiels ein unangenehmer Fries erhalten, als eine große Anzahl von Frames gerastert wurde. Möglicherweise haben einige Browser beim Start beim Laden von Ressourcen eingefroren. Wir wollten nicht, dass unser Spiel gleich ungültig ist, deshalb habe ich die Zeit für das Zeichnen von Kacheln für jeden Frame begrenzt. Hier können Sie mehr darüber lesen.
Alle Karten hatten eine Größe von 20x16 quadratischen Kacheln mit einer Größe von 64px. Die Kartendaten wurden im Binärformat in eine Datei geschrieben, wobei die Ebenengrenzen im Voraus festgelegt wurden und nur die MovieClip-Frame-Nummer aufgezeichnet werden musste. Somit betrug das Gewicht der Kartendatei 1280 Bytes. Später wurde das Format jedoch in JSON konvertiert, um die Arbeit mit Daten zu vereinfachen.


Infolgedessen nahm die Arbeit an Karten einen wesentlichen Teil der Entwicklung des Kunden ein. Um schöne Karten erstellen zu können, wurde ein Editor auf Flex geschrieben.



Karteneditor


Jeder der 14 Planeten hat seine eigene Flora und Fauna, so dass Sie visuell verstehen können, auf welchem ​​Planeten Sie sich befinden.



Vielfalt


Außerdem haben wir programmgesteuert von oben und unten Hälften von Kacheln für die Karte hinzugefügt, die einfach benachbarte Kacheln duplizieren. Dies wurde für herausragende interaktive Elemente wie Menüschaltflächen durchgeführt. Links und rechts wurden Felder benachbarter Orte mit dem Nebel des Krieges hinzugefügt - dies war eine großartige Idee, die mehrere Probleme gleichzeitig löste. Das Spiel sah im Vollbildmodus viel besser aus.



Karte mit Nebel des Krieges an den Seiten


Server


Während wir uns mit dem Client befassten, suchten wir gleichzeitig nach einem Serverprogrammierer, aber es gab nicht viele, die ein zweifelhaftes Spiel ohne normale Dokumentation schreiben wollten. Einige begannen zu schreiben und brachen sofort ab, weil unklar wurde, was sie schreiben sollten, und sich in die Dornen der Spielelogik zu vertiefen, war langweilig. Nach einiger Zeit stellten wir fest, dass wir einen Spezialisten brauchen, der den Server in Java entwerfen kann, und wenn er das Projekt in Zukunft aufgibt, könnte ich es hinzufügen. Der lokale Handwerker- Löser half uns bei der Server-Architektur. Man könnte sagen, er hat uns auf den richtigen Weg gebracht: Er hat gezeigt, wie man einen Server erstellt, und die Architektur aus dem Mail.ru-Schulungskurs ausgeliehen. Solver war keine Ausnahme und verließ uns nach einer Weile. Nach einem weiteren Jahr der Anstrengung gelang es mir, die gesamte grundlegende Spiellogik zu schreiben. Wenn ich jetzt zurückblicke, bin ich ratlos, warum wir den Server nicht auf Akka geschrieben haben?


Informationen zur Architektur finden Sie hier - Architektur eines Online-Spieleservers am Beispiel von Skyforge. Außerdem finden Sie Vorträge zu Intuit. Auf unserem Server natürlich nicht 2 Millionen Leitungen, aber auch ziemlich viel. Es werden keine Fasern (wie in Skyforge) verwendet, und unser Server hat sich höchstwahrscheinlich als weniger lesbar herausgestellt. Übrigens wurde der Code, der für dieselbe Faser für nicht überfülltes Multitasking in Skyforge verwendet wurde , viel später veröffentlicht, als alles bereits für uns funktionierte.
Während ich mit dem Server beschäftigt war und die Logik auf den Client klebte, vervollständigte der Künstler die fehlenden Details, die sofort in den Client fielen. Sobald der Server bereit war, haben wir einen Alpha-Test gestartet. Diesmal war alles fast so, wie es sollte, aber Serverfehler und -fehler mussten für eine lange Zeit behoben werden.


Hin und zurück. Selbstgeborene Spielmechanik


Ich möchte Ihnen etwas anderes Ungewöhnliches im Spiel erzählen. Wie würden Sie einen Spieler nennen, der speziell eine unvollständige Armee bildet und gegen andere Spieler / Bots verliert? Wir nennen sie "Pflaumen". Sie verschmelzen Erfahrung und senken absichtlich ihr Niveau, so dass sie auf ihrem Niveau stärker werden. Dies ist wichtig, wenn die Anzahl der Spieler, die angegriffen werden können, begrenzt ist und ihnen mehr Entwicklungsmöglichkeiten bietet. Es wird immer einfacher, hochrangige Feinde zu besiegen und mehr Belohnungen zu erhalten. Es ist, als würde man seinen Perser pumpen, aber in die entgegengesetzte Richtung. Obwohl es einfacher zu sein scheint als das klassische Spiel, erfordert der Erfahrungsverlust zunächst mehr Zeit und geschicktes Aufpumpen. Wenn Sie die Stufe eines schwachen Charakters senken, hat dies keinen großen Vorteil und zieht den Spieler nur auf den Durchschnitt. Das Anheben und Absenken des Levels kann unendlich lang sein. Selbst wenn der Spieler die maximale Entwicklung für sein aktuelles maximales Level erreicht hat, kann er auf ein noch höheres Level aufsteigen, um auf neue Technologien zuzugreifen und seinen Fortschritt aus Erfahrung wieder zusammenzuführen, wobei er ebenso stark in der Technologie bleibt.


Anfänger haben ein Problem, wenn sie solchen gepumpten Zwergen nichts antun können. Wir haben dieses Problem gelöst, indem wir Einschränkungen eingeführt haben, bei denen die Spieler in zwei Gruppen eingeteilt wurden: Sie können nur Bots auf Bots angreifen, wobei das maximale Level bei anderen Spielern und bei denselben zusammengeführten Spielern wie bei ihnen eingeschränkt ist. So haben sie fast aufgehört, Druck auf das Gleichgewicht des Spiels auszuüben, und vor allem konnten sie weiterhin tun, was sie wollten.


Es hat nicht funktioniert, nicht Fartanulo


Wir haben den VK-Spielekatalog am 4. Februar 2018 und nicht zum ersten Mal betreten. Unser erster Antrag wurde ohne Begründung abgelehnt, während wir uns erneut bewarben, wurden wir dennoch in den Katalog aufgenommen.


Trotz der langen Entwicklungszeit des Spiels war es nicht möglich, alle Details zu erfassen, wir haben viele Fehler gemacht. Zunächst haben sie einen Fehler mit der Plattform gemacht: Nicht jeder Spieler ist bereit, viel Zeit in einem browserbasierten 2D-Spiel zu verbringen, für das eine Mechanik erforderlich ist. Viele Menschen sind an einfachere und verständlichere Spiele gewöhnt, bei denen es von Anfang an mehr Spaß macht. Unser Training im Spiel ist, gelinde gesagt, gescheitert. Nach Abschluss des Tutorials vergessen die Spieler sicher, was sich dort befand, und lesen möglicherweise nicht einmal.
Laut VK-Statistiken haben wir eine riesige Anzahl von Spielern, zum größten Teil bleiben nur diejenigen übrig, die dieses alte Spiel einmal gespielt haben und bereits mit der Mechanik vertraut sind.


48 Wochen später ...


Ungefähr ein Jahr nach dem Start der Alpha-Version wurde klar, dass Flash bald nicht mehr in Browsern funktionieren würde. Von diesem Moment an beschloss ich, den Kunden auf etwas Hartnäckigeres zu portieren. Natürlich ist es schöner, in einer vertrauten Sprache zu schreiben, deshalb habe ich mich für LibGDX entschieden. Mit diesem Java-Framework konnten wir einen Teil der Logik nicht neu schreiben, sondern einfach vom Server kopieren. Es hat gute Abstraktionen für Kachelkarten und eine Implementierung für Kacheln, mit der wir schnell Code für unsere Karten schreiben konnten. Es gibt aber auch Schwachstellen: Schriftwiedergabe, Mangel an Editoren für visuelle Live-Schnittstellen usw.


Im Moment ist ein Alpha-Client für Android geschrieben, der 50% aller Funktionen im Spiel implementiert.



Mobile Game Client


Die Entwicklung ist noch nicht abgeschlossen. Wenn Sie etwas für einen mobilen Client zeichnen oder schreiben möchten, schreiben Sie.


Ich möchte auch dem Toningenieur Peresvet Mukhanov und dem Komponisten Artem Davydov meinen Dank aussprechen, sie haben alles geschrieben, was im Spiel in sehr kurzer Zeit und in sehr hoher Qualität zu hören ist.

Source: https://habr.com/ru/post/de451636/


All Articles