Nicht noch ein Zombie-Shooter

Es ist etwas stiller auf meinem Blog geworden. Das liegt daran, dass ich zur Zeit verstärkt an Prototypen für Spiele arbeite. In erster Linie entwickle ich derzeit mit Phaser. Ob und welche Spiele dabei entstehen ist mir derzeit erst einmal Einerlei. Mir geht es vor allem darum auszuprobieren, was man mit HTML5 alles realisieren kann. Heute möchte ich den Prototypen eines 2D-Zombie-Shooters vorstellen. Arbeitstitel: Basement.

Ziel dieses Prototypen war es die Engine für einen Top-Down-Shooter zu schaffen, mit der ich dann einfach weitere Shooter bzw. richtige Spiele entwickeln kann. Umgesetzt wird das Ganze mit Phaser. Es handelt sich hier natürlich um einen Work in Progress, aber ich möchte Euch schon einmal einen kleinen Einblick in meinen bisherigen Fortschritt geben.

Grafik

Top-Down Shooter Pack

Bild: "Top-Down Shooter Pack", Quelle: Hersteller

Für den Prototypen habe ich mich für das "Top-Down Shooter Pack" von Elias Frost entschieden. Dieses könnt Ihr auf www.gamedevmarket.net käuflich erwerben. Die Sprites werden als Pixelgrafiken innerhalb einer HTML5-Canvas-Umgebung gerendert. Verantwortlich für das Rendern ist bei diesem Prototypen Phaser bzw. PixyJS. Hardware-technisch läuft das Rendering dann entweder über OpenGL oder einen Software-Renderer. Das nagt allerdings ziemlich an der Performance.

Mapsystem (Tiled)

Tiled Mapeditor

Bild: "Tiled Mapeditor", Quelle: Hersteller

Die Tilemaps auf denen quasi die gesamte Action statt findet, erstelle ich mit Tiled. Der Mapeditor kann kostenlos herunter geladen werden, allerdings sollte man den Autor wirklich unterstützen. Die Bedienung ist schnell erlernt, der Export erfolgt in diversen Formaten. Ich habe mich für den Export als JSON-Format entschieden, da es sich für JavaScript-Projekt schlicht anbietet.

Besonders schön ist das Feature Items auf der Karte zusätzliche Eigenschaften bzw. Variablen geben zu können. Ich habe mir darum ein Set an Eigenschaften überlegt, mit dem ich das Spielgeschehen steuern kann. Hier ein kleiner Auszug aus meiner Dokumentation:

Name (Allowed) Values Available (type)
type ammo, health, weapon, light, trigger *
weapon pistol, rifle, shotgun, flashlight ammo, weapon
op destroy, disable, default (keep) *
size small, medium, large ammo, health, light
state safety, main light

Features

Das Spiel ist aus mehreren, größtenteils unabhängigen Modulen zusammen gesetzt. All diese Module kommunizieren über einen internen Messagebus miteinander. So kann ich problemlos einzelne Features an und wieder abschalten. Derzeit sind bereits eine Reihe von Modulen bzw. Features implementiert.

Der Spieler

Die wenigsten Spiele kommen ohne einen Protagonisten aus. Triff "Der Spieler". Der Spieler ist eine Person mit diversen einzigartigen Eigenschaften. Er ist ziemlich sauer, schwer bewaffnet und tötet am liebsten Zombies. Eventuell könnte man noch Muskel-bepackt ergänzen, aber das kann ich aufgrund der Detailtiefe der verwendeten Grafiken nicht genau erkennen. Der Spieler wird mit Maus und Tastatur gesteuert. Derzeit gibt es nicht wirklich Ziel ein des Spieles, aber man kann herum laufen und auf Dinge schießen. Und mal ehrlich... was will man mehr?

Health

Der Spieler verfügt über eine gewisse Menge Lebensenergie. Ist diese aufgebraucht, stirbt er und wird (derzeit) an den Anfang des Levels zurück versetzt. Energie kann über Health Packs wieder hergestellt werden. Health Packs gibt es in verschiedenen Größen.

Stamina

Neben der Lebensenergie verfügt der Spieler außerdem über eine gewisse Menge Stamina. Diese wird aufgebraucht, wenn der Spieler rennt. Ist die Ausdauer erschöpft, kann der Spieler nur noch langsam laufen. Die Ausdauer füllt sich wieder auf, wenn der Spieler eine Weile an einem Ort stehen bleibt.

Gegner-KI

Die Gegner (in diesem Fall Zombies) verfügen über einen Sichtradius. Bewegt sich der Spieler in Sichtweite, "rennen" die Zombies sofort auf diesen zu. Verlässt der Spieler den Sichtradius wieder, so merkt sich der Zombie, die letzte Position des Spielers und bewegt sich langsamer (und verwirrt) auf den letzten bekannten Punkt des Spielers zu.

Ich fand es ganz nett dadurch die Spannung aufrecht zu erhalten, dass die Gegner nicht sofort das Interesse verlieren, sondern über eine Art Gedächtnis verfügen. In Zukunft wäre es denkbar die Zombies in einem gewissen Radius nach dem Spieler suchen zu lassen, bevor sie wieder zu ihrem Tagesgeschäft übergehen: In erster Linie Gehirne fressen und rumlungern.

Waffen

Der Spieler verfügt über eine konfigurierbare Anzahl von Waffen. Konfigurierbar in diesem Fall durch den Entwickler und nicht durch den Spieler. Jede Waffe verfügt über einen gewissen Schaden, eine Schussfrequenz und diverse andere Eigenschaften. Alle Waffen benötigen für ihr Funktionieren Munition. Derzeit gibt es also noch keine Nahkampfwaffen, wie Messer, Knüppel, Bratpfannen oder ähnliches.

Gegenstände

Der Entwickler (also ich) kann über die weiter oben beschriebene Logik diverse Gegenstände auf der Karte platzieren. Das kann zum einen Munition sein, zum anderen Health Packs oder neue Waffen. Der Spieler kann diese Gegenstände einsammeln und entweder seine Vorräte aufstocken oder seine Gesundheit verbessern.

Lichteffekte

Neben dem Lichtkegel der Taschenlampe erhellen diverse weitere Lichter den Keller (darum Basement). Auch diese Lichter können über Tiled definiert werden und dabei sowohl in Farbe, als auch in Größe variieren. Es ist geplant, dass die Beleuchtung über diverse Schalter umgeschaltet werden kann und auch Einfluss auf das Verhalten der Zombies haben soll.

Steuerung

Gespielt wird mit Maus und Tastatur. Ich habe mich hier ganz klassisch für eine WASD-Steuerung entschieden. Mit [SHIFT] kann man rennen, was die Ausdauer reduziert. Das hat derzeit allerdings nicht wirklich eine Auswirkung. [Linke Maustaste] feuert die Waffe ab bzw. schaltet die Taschenlampe um. Mit [E] könnt Ihr Dinge benutzen. Das bedeutet derzeit in erster Linie, dass Ihr Munition und Health Packs aufheben könnt. [R] lädt Eure Waffe nach, sofern genug Munition vorhanden ist. Mit [1]-[4] könnt Ihr zwischen den verschieden Waffen durch schalten. Die Steuerung kann derzeit nicht angepasst werden.

Prototyp

Basement Gameplay

Basement Gameplay

Einen spielbaren Prototypen findet Ihr auf meiner Webseite. Es versteht sich von selbst, dass die Demo derzeit nicht auf Handys funktioniert. Es sei denn Ihr schafft es Maus und Tastatur anzuschließen. Ihr seht hier natürlich kein fertiges Spiel, sondern lediglich eine Kitchen Sink in der ich die Features des Spieles ausprobieren kann. Wie immer bin ich gespannt auf Euer Feedback.

Update

Leider macht Chrome derzeit Ärger mit transparenten Flächen bei Canvas-Elementen. Ich musste darum den Layer ausschalten, der für die Lichteffekte zuständig ist. Hoffentlich komme ich in nächster Zeit dazu, mir das Ganze mal genauer anzuschauen. So lange ist es nun eben etwas heller im Keller.