2D Isometric Medieval RTS – Devlog #1

Lesedauer 3 Minuten

Inspiriert von Spielen wie Stronghold Crusader, Age of Empires und Anno, war es schon lange mein Ziel, ein eigenes RTS zu entwickeln. Über die Jahre habe ich einiges an Ideen sammeln können, von denen ich mir erhoffe, dass sie frischen Wind in das Genre bringen.

Tatsächlich ist das nicht mein erster Versuch ein RTS zu entwickeln. Es liegen sicher schon drei bis vier Versuche in der Vergangenheit. Es hat meist an fehlenden Programmierfähigkeiten gemangelt, dass ich mich irgendwann in einer Sackgasse aus Spaghetti-Code verrannt habe, oder weil ich unzufrieden mit den Look&Feel des Spiels war. Der viel größere Fehler war allerdings, dass ich mir bisher zu hohe Ziele gesetzt habe.

Diesmal möchte ich es anders machen. Bevor ich meinen eigenen, neuen Ansatz an das Genre wage, dachte ich mir, dass ich erst ein sauberes Research-Projekt baue. Das soll mir helfen, einmal die grundlegenden Mechaniken zu implementieren und kennenzulernen und um ein besseres Gefühl für die Wechselbeziehungen der Sub-Systeme eines typischen RTS zu bekommen.

Mit dem erlangten Wissen wäre es mir dann möglich trittsicherer auf dem neuen Terrain zu navigieren. Fundiertere Entscheidungen beim Game-Design zu treffen und mich damit vor Frust zu schützen.

Das Ziel

Wenn ich meine, dass ich ein grundlegendes RTS entwickeln möchte, dann meine ich damit, dass ich auf die meisten extravaganten Features und Mechaniken großer Genrevertreter verzichte. Beispielsweise werde ich keine Einheitenformationen realisieren, oder Dutzende Wirtschafts- und Militärgebäude. Mein Ziel ist es die grundlegenden Sub-Systeme eines RTS zu implementieren. So, dass ich erkennen kann, wie ich sie am besten erweitern kann.

Folgende Punkte sind mein Mindest-Standard, welchen ich erreichen möchte:

  • Befehligen von Einheiten
  • Ressourcen abbauen & lagern
  • Errichten von Gebäuden
  • Ausbildung von Einheiten über Gebäude
  • Eliminieren von Einheiten & Gebäuden

Hinter diesen vier Punkten steckt viel. Doch trotz allem handelt es sich um das Mindeste, was ein RTS für mich ausmacht. Hier und dort werde ich auch etwas darüber hinaus gehen, das wird kaum zu vermeiden sein. Schließlich ist das der Reiz an einem Freizeit-Projekt.

Ich berufe mich bei diesem Projekt auf das was ich kann. Bedeutet, dass ich mich in einer mir bekannten Engine bewege: Godot. Die grafische Darstellung beschränkt sich auf isometrisches 2D Pixel-Art. Ich habe nicht vor in einem Team zu arbeiten. Somit wäre es unnötiger Aufwand, auch noch bei Engine und Grafik sich neue Dinge aneignen zu müssen.

Im ersten Schritt des Devlogs, soll es um Navigation der Einheiten in der Spielwelt gehen. Schließlich ist das Kontrollieren der Einheiten einer der Hauptbestandteile, wie Spieler:innen mit der Welt interagieren. Sei es um Ressourcen abzubauen, Gebäude zu errichten oder gegeneinander zu Kämpfen.

Einheiten-Bewegung

Zunächst hatte ich mich daran gesetzt, Einheiten auswählen und Bewegungsbefehle geben zu können. Ich habe mich zunächst gegen die Entwicklung eines Command-Systems entschieden. Dazu werde ich kommen, sobald es wichtig wird. Zunächst geht es nur um die Navigation.

Godot besitzt ein eigenes TileMap-System, welches mir nicht nur bei der Erstellung meiner zweidimensionalen, isometrischen Spielwelt helfen wird, sondern auch die Möglichkeit bietet ein Navigation-Grid zu erstellen.

Meine Einheiten hatte somit schnell die Möglichkeit von A nach B zu kommen.

Für die bessere Optik habe ich schonmal einen einfachen Sprite inkl. Animation erstellt und mithilfe eines Shaders eine Outline erzeugt, welche angezeigt wird, wenn man eine Einheit auswählt.

Für die Navigation verwende ich die built-in NavigationAgent2D-Nodes von Godot. Diese sind zwar noch als experimental eingestuft, aber für jetzt dürften sie ihre Arbeit ganz gut erfüllen. Später einen neuen Ansatz für die Navigation einzubauen dürfte kein allzu großes Problem darstellen.

Hindernisse

Pixel-Art an sich ist zwar für mich nichts Neues, doch die isometrische Perspektive dagegen schon. Um ein gutes Verständnis dafür zu bekommen, wollte ich mich zunächst der Erstellung der Sprites widmen für die Mauer-Befestigungen.

Das Ganze hat zwar letztendlich funktioniert, doch war es keine leichte Aufgabe. Immerzu haben Übergänge zwischen den Times nicht genau gepasst und mussten angepasst werden. Es glich etwas einem Puzzle-Spiel. Hoffentlich wird das in Zukunft leichter werden, wenn dann auch das Verständnis dafür wächst.

In Godot ist es möglich für jedes Tile eines TileSets Metadaten hinzuzufügen. Dadurch ist es möglich Tiles als Hindernisse für die Navigation zu markieren oder auch das Auto-Tiling-Feature zu verwenden.

Letztendlich war es mir so möglich, dass meine Einheiten durch die Welt navigieren. Nachdem man sie auswählt, umgehen sie Hindernisse, können sogar Tore passieren, um an ihr Ziel zu gelangen.

Ausblick

Als nächstes werde ich mich wohl mit dem Ressourcen-System beschäftigen. Einheiten sollen Ressourcen abbauen und zu einem zentralen Lager bringen können, damit diese den Spieler:innen für weitere Einheiten oder Gebäude zur Verfügung stehen.