[Project] Invasion 2400 - 2D Space Shooter in C++ & SDL

Hier könnt ihr euch selbst, eure Homepage, euren Entwicklerstammtisch, Termine oder eure Projekte vorstellen.
Forumsregeln
Bitte Präfixe benutzen. Das Präfix "[Projekt]" bewirkt die Aufnahme von Bildern aus den Beiträgen des Themenerstellers in den Showroom. Alle Bilder aus dem Thema Showroom erscheinen ebenfalls im Showroom auf der Frontpage. Es werden nur Bilder berücksichtigt, die entweder mit dem attachement- oder dem img-BBCode im Beitrag angezeigt werden.

Die Bildersammelfunktion muss manuell ausgeführt werden, die URL dazu und weitere Details zum Showroom sind hier zu finden.

This forum is primarily intended for German-language video game developers. Please don't post promotional information targeted at end users.
Antworten
Benutzeravatar
hill 2
Beiträge: 41
Registriert: 07.05.2007, 16:41
Kontaktdaten:

[Project] Invasion 2400 - 2D Space Shooter in C++ & SDL

Beitrag von hill 2 »

Hallo Leute,


da im anderen Thread darüber geredet wird, dass Anfänger sich womöglich nicht dazu überwinden können, am Forum teilzunehmen, weil viele Themen hier auf hohem Niveau sind, dachte ich mir, ich poste mal mein kleines Projekt. Vielleicht ermutigt das andere, auch ihres vorzustellen ;) . Außerdem habe ich jetzt, da ich es publik gemacht habe, auch etwas Druck weiterzuarbeiten. Und um das Ganze zeitnah abzuwickeln, setze ich das Release-Datum auf den 1. Mai. Danach gehts mit 3D-Programmierung weiter.

Ich bin schon seit einiger Zeit dabei, einen kleinen Space Shooter zu programmieren, um in C++ reinzukommen. Ich habe ein paar Monate ausgesetzt, weil ich zu sehr mit meinem Studium beschäftigt war. Ein Großteil der Arbeit ist schon erledigt.

Die grundlegende Spielmechanik gehört natürlich dazu. Man steuert ein Raumschiff durchs Weltall und schießt gegnerische Einheiten ab. Das übliche eben. Jede Einheiten besitzt 4 Kanonen, die mit unterschiedlichen Projektilen besetzt werden können. Meistens benutze ich jedoch 2x2 Kanonen mit gleichen Projektilen. Die Eigenschaften der Projektile, der Schiffe und das Level sind in Textdateien abgespeichert und werden automatish geladen. Somit lassen sich leicht neue Schiffe, Projektile, Level, Effekte etc. erstellen.

Viel mehr gibt es eigentlich nicht zu sagen. Die Grafiken sind nicht von mir, allerdings sind sie Open Source soweit ich weiß.

Kennt ihr eine Methode, um SDL-Spiele aufzunehmen? Anscheinend gibt es keine, außer Desktop Screen Capturing, welches aber eine sehr niedrige Framerate aufweist. Momentan bin ich eher dazu geneigt mit SDL_SaveBMP das Spiel in Bildern abzuspeichern und später zu einem Video zusammenzufügen.

Neue Vorschläge und Ideen sind wie immer herzlich wilkommen.

Viele Grüße


hill 2


To-Do-List:
  • Bullet Time (wie findet ihr die Idee?)
  • Grundlegende Spielmechanik ✔
  • HUD
  • Kompabiliät mit allen PNG-Dateien (Alpha Channel / Color Key) ✔
  • Lade-System für Einheiten, Projektile, Effekte und Level ✔
  • Level
    • Kampagne (10 Level)
    • Survival-Mode (vielleicht, was meint ihr?)
  • Menu-System
  • Musik
  • Pixelgenaue Kollisionsberechnung ✔
  • Power-Ups ✔
  • Sounds
  • Sprites ✔
  • Sternenfeld ✔
  • Textpanels (für Tipps, Anweisungen und Story)
  • Verschiedene Flugverhalten für Projektile ✔
  • Verschiedene Flugverhalten für Gegner ✔
Videos
  • [youtube]fx7B_xRFdzE[/youtube]
Bilder
  • screenshot07.png
    screenshot08.png
Zuletzt geändert von hill 2 am 23.04.2013, 00:48, insgesamt 10-mal geändert.
Benutzeravatar
Schrompf
Moderator
Beiträge: 5047
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: [Project] Invasion 2400 - 2D Space Shooter in C++ & SDL

Beitrag von Schrompf »

Das sieht doch sehr gut aus! Wenn Du den Levelaufbau und die Eigenschaften der Feindschiffe aus Dateien liest, hast Du sogar schon die Grundzüge der datengetriebenen Programmierung drauf! Auf Englisch: data-driven design, findet sich im Netz eher als "datengetrieben" :-)

Eine Zeitlupe als kurzzeitige Spielerleichterung finde ich ne tolle Sache! Wenn die Spielmechanik sowas ganz weich mitmacht, kann man das gezielt nutzen, um besondere Momente im Spiel zu setzen. Oder Du gibst eine limitierte Zeitlupe dem Spieler als Extra-Taste in die Hand, so dass der Einsatz der Zeitlupe eine taktische Spielerentscheidung wird.

Eine Kampagne finde ich immer ne tolle Sache, aber ich fürchte, dann müsstest Du zumindest noch Bossgegner einbauen. Und das wird unter Umständen ein stattliches Stück Arbeit. Es hat ja keinen Sinn, 20 Level zu basteln, wenn die sich dann alle gleich spielen. Da Du aber eh schon verschiedene Flugverhalten für Schüsse und Gegner auf der Liste hast, wäre das vielleicht ne Idee.

Multiplayer kannst Du dagegen gleich von Deiner Gedankenliste streichen. Das liefe auf ein Neuschreiben des Spiels hinaus - Netzwerkfähigkeit kann man nicht im Nachhinein in ein Spiel patchen, das erfordert völlig neue Spiellogik.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
starcow
Establishment
Beiträge: 560
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

Re: [Project] Invasion 2400 - 2D Space Shooter in C++ & SDL

Beitrag von starcow »

Hi Hill

Das sieht schonmal klasse aus. Es erinnert mich an meinen Einstieg damals in C++ mit Hilfe des Buches von Heiko Kalista (wer kennt es nicht ;-)).
So wie du an die Sache rangehst, bin ich überzeugt das du dieses Projekt auch zeitnah umsetzen kannst. Und ich finde es ist halt immer super, wenn man ein Projekt auch zu einem Abschluss bringen kann (was mir leider nicht allzuoft gelingt :-X).
Ich bin jedenfalls aufs Gameplay gespannt!

Gruss starcow
Freelancer 3D- und 2D-Grafik
mischaschaub.com
Benutzeravatar
hill 2
Beiträge: 41
Registriert: 07.05.2007, 16:41
Kontaktdaten:

Re: [Project] Invasion 2400 - 2D Space Shooter in C++ & SDL

Beitrag von hill 2 »

Guten Abend Leute,

in den letzten Tagen habe ich relativ intensiv an meinem Projekt gearbeitet. Ich habe folgende Flugverhalten implementiert:
  • Straight: Gerade Flugbahn
  • Straight_Inaccurate: Gerade Flugbahn mit Ungenauigkeit
  • Sinusoidal: Fliegt in einer Sinuskurve
  • Radial: radial von der Kanone aus
  • Radial_Inaccurate: radial von der Kanone aus mit Ungenauigkeit
Es fehlen eigentlich nur noch Lenkkörper, die das Ziel verfolgen und die Fähigkeit, Geschosse in Richtung des Ziels abzuschießen. Eine weitere Idee wären Geschosse, die nach einiger Zeit explodieren und weitere Geschosse freisetzen. Falls ihr weitere Ideen habt, lasst es mich wissen.
Einstellbare Parameter diesbezüglich sind die Menge, der gleichzeitig abgeschossenen Projektile, die Feuerrate und die Reichweite. Damit lässt sich schon viel darstellen. Ist die Reichweite begrenzt schwindet das Projektil (Sichtbarkeit und Schaden) immer mehr.

Besonders die Transparenz hat mir große Probleme bereitet. SDL scheint keine Funktionen bereitzustellen, um den Alpha-Channel direkt zu steuern. Besonders dann nicht, wenn man die Surface aus einer PNG-Datei mit Alpha-Channel lädt. Wenn man Bilder mit Color-Key benutzt, gibt es eine Methode, aber die funktioniert anscheinend nicht. (Sorry, wenn ich gff. fachlich gesehen Unsinn rede. Ich kenne mich da nicht so gut aus und bin auf die Lösung erst nach langem Probieren und Kopfzerbrechen gekommen).
Ich habe also selbst was gecodet. Kurz gesagt, lassen sich jetzt sowohl PNG-Dateien mit Alpha-Channel und auch ohne automatisch laden. Ggf. muss die Surface ins RGBA-Format überführt werden. Dann wird der Pixel bei Position (0|0) betrachtet und alle gleichwertigen Pixel auf 0 gesetzt. Für Transparenz muss dann noch weiteres gemacht werden, aber das ist an dieser Stelle uninteressant. Jedenfalls lassen sich jetzt beliebige Bilder in beliebiger Transparenz darstellen. Es kostet mich einige FPS, aber das ist es wert. Falls jemand irgendwann das gleiche Problem hat, kann er mich einfach kontaktieren. Im Netz findet man dazu kaum was, da heißt es einfach, dass es nicht geht (Schlagwörter: Colorkeying, Per-Surface Alpha, Per-Pixel Alpha).

Auf den folgenden Bildern, seht ihr den Prototypen eines Bossgegners. Das Schiff selbst fliegt nur nach links und rechts, Standard halt. Ich habe die Anzahl der möglichen Kanonen auf 6 erhöht (für die Bosse wären 4 zu wenig). In diesem Fall gibt es 2 x Radial, 2 x Straight_Inaccurate als Schrotflinte und noch 2 x Straight_Inaccurate als Feuer. Ich habe versucht Screenshots zu wählen, auf denen man möglichst eines davon sieht. Die Kanonen schießen übrigens erst, wenn der Spieler in Reichweite ist (falls begrenzt). Das lässt sie intelligent wirken und es ist auch bescheuert, wenn der Flammenwerfer dauerfeuert. Die Grafiken der Projektile sind nicht endgültig.

Ich freue mich auf Kommentare und Kritiken.

Viele Grüße


hill 2

1.Edit: Hab mal kurz die Farben editiert, damit es stimmiger ist.
2.Edit: Die Gegner können Geschosse jetzt auch gezielt auf den Spieler abschießen.

21.png
19.png
63.png
Benutzeravatar
hill 2
Beiträge: 41
Registriert: 07.05.2007, 16:41
Kontaktdaten:

Re: [Project] Invasion 2400 - 2D Space Shooter in C++ & SDL

Beitrag von hill 2 »

Hi Leute,

ich habe ein kleines Video aufgenommen, auf dem ihr jetzt sehen könnt, wie das Spiel in etwa aussieht. Es gibt noch viel zu tun, aber ich bin zuversichtlich, dass ich meine selbst gesetzte Frist einhalten werde.
Wie immer freue ich mich auf Rückmeldung.

[youtube]fx7B_xRFdzE[/youtube]
Antworten