[Projekt]First Strike - Firestorm (shot em up)

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
gombolo
Establishment
Beiträge: 130
Registriert: 26.01.2011, 20:33

[Projekt]First Strike - Firestorm (shot em up)

Beitrag von gombolo »

Dieser Text beschreibt die Entwicklung des Spiels First Strike – Firestorm. Das Spiel nutzt die DirectX7 Schnittstelle von Microsoft und wurde mit Blitz3D entwickelt. Der Autor erhebt keinen Anspruch auf Professionalität oder Vollständigkeit.

Bild

Demo

Hier könnt Ihr die Demo-Version runterladen. Über Feedback würde ich mich freuen.

klick hier -> http://gombolo.bplaced.net/Firestorm/

Video

[youtube]JpjCViTxGxg[/youtube]

Einführung

In der Regel lernt man das Programmieren von Spielen am besten wenn man selber ein paar kleine Projekte macht. Üblicherweise sind das Spiele wie Pong, Tetris oder Snake. Die nächste Stufe ist dann ein Shot em up. So war es jedenfalls bei mir.

Die erste Version meines Shot em up wurde noch in C/C++ programmiert. Das Spiel nutzte giDX², eine selbstentwickelte 2D Engine, und war auch nur zum Testen der 2D Engine gedacht.

Vor ein paar Jahren entdeckte ich für mich Blitz3D. Selbstverständlich begann ich mit der Programmierung eines neuen Shot em ups, aber diesmal in 3D. Die Spielmechanik schaute ich mir von einem anderen Spiel ab. Das Spiel nennt sich Cho Ren Sha und kommt aus dem Mutterland der Shot em ups aus Japan.

Den ersten Code für das neue Spiel schrieb ich am 1.5.2011. Nun haben wir das Jahr 2017 und ich möchte das Spiel der Öffentlichkeit vorstellen, aber warum dauert ein Spiel so lange? Nun, das ist eine Angewohnheit von mir. Ich programmiere nur alle paar Jahre mal was und dann kann es auch mal passieren das so ein Spiel ein Jahr lang auf der Festplatte schlummert. Trotzdem denke ich mein Ziel erreicht zu haben. Das Spiel funktioniert :)

Das Grundgerüst

Ich möchte noch einmal daran erinnern dass ich kein Profi bin. Ich möchte nur meine Erfahrung mit euch teilen.

Meine Spiele baue ich immer nach einem bestimmten Schema auf. Es ist dabei nicht wichtig mit welcher Programmiersprache man programmiert. Mir erleichtert es die Handhabung und die Übersicht.

Bild

Die Grafik ist ein Versuch das zu verdeutlichen. Wer sich das genauer anschauen will. Kann hier http://gombolo.bplaced.net/quellcodes/ den Quellcode von zwei Spielen runterladen. Die Spiele sind in C/C++ programmiert und nutzen giDX² für die Grafikausgabe, Sound und Input. Es gilt. Theorie ist nichts ohne die Praxis.

Bild

Gegner erzeugen und ein eigener Script

Die Gegner und das Verhalten werden in einer eigenen Script-Sprache definiert. Wie es sich bewegt, welche Grafik verwendet wird und welche Art von Waffen der Gegner hat. So auch die Bewegung.
Es gibt eine Datei in der alle Gegnertypen beschrieben sind. Die Levels werden dann aus dieser Liste zusammengebaut. Heute würde ich das anders machen. Ich würde einen Emitter programmieren der eine bestimmte Art von Gegner erzeugt. Wie eine Partikel-Engine. Ich würde nicht jeden Gegner einzeln positionieren, sondern nur den Emitter. Den Rest würde dieser erledigen.

Performance bei so vielen Geschossen

Als ich die erste Version fertig hatte merkte ich dass die FPS schon beim ersten Schuss in den Keller sank. Wenn man mehrere hundert Geschosse und auch noch ein paar Sterne bewegen will stößt man an Grenzen.
Die Rotation und die Bewegung der Objekte rechnet man in DirectX und auch OpenGL mit Rotations- und Transformationsmatrizen. Bevor ein Objekt jetzt gerendert wird, müssen einige Renderstates, die Textur sowie die Rotations- und Transformationsmatrizen gesetzt werden. Hat man mehrere Objekte, muss das für jedes dieser 3D Objekte gemacht werden. In meinem Fall waren es mehrere hunderte.
Die Lösung war es aus diesen hunderten einzelner 3D Objekte eins zu machen. Jedes Geschoss besteht aus einem Quad (Vier Vertices die zu einem Rechteck zusammengefügt werden). Ihr müsst euch die vielen Quads, die im Spiel erstellt werden, als ein einziges Objekt vorstellen. Die Vertices müssen nicht miteinander zusammenhängen. Nur vier Vertices werden zu einem Quad zusammengefügt. Um die Rotation, die Skalierung und Transformation muss man sich selber kümmern.
Der Vorteil ist nun, dass alle Geschosse in einem Rutsch gerendert werden. Denn diese sind für die Grafikkarte nun ein einziges 3D Objekt.

Bild

Kollisionsabfrage

Es ist nicht sinnvoll, Objekte die nicht zu sehen sind oder nicht aktiviert auf Kollision zu prüfen. Das Spiel erstellt eine Liste mit allen Objekten die aktiv sind und prüft nur diese auf Kollision. Wir ein Gegner zerstört oder das Geschoss trifft einen Gegner wird es aus dieser Liste gelöscht. Auch das bringt einen Performanceschub.

Demonstration oder wie zeichnet man ein Spiel auf

Wenn man nach dem Start des Spiels ein paar Sekunden wartet erscheint die Highscore-List und noch mal ein paar Sekunden später startet eine Demonstration des Spiels. Es scheint als ob der Computer selber spielt. Was er nicht tut. Das Ganze ist nur eine Aufzeichnung. Ich habe mir lange überlegt wie ich das am besten realisiere. Ich hätte es gerne so gehabt das jedes Spiel aufgezeichnet wird und wieder abgespielt werden kann. Leider habe ich das nicht so sauber hinbekommen, aber die Aufzeichnung funktioniert. Das kann man an der Demonstration sehen. Auch hier bin ich am Ende schlauer als vorher. Ich habe die Aufzeichnung Zeitabhängig gemacht. Heute würde ich die Position speichern und interpolieren, aber nun ist es so wie es ist. Beim nächsten Projekt wird es besser ;)

Zum Schluss

Das war ein kleiner Blick hinter die Kulissen der Entwicklung dieses Spiels. Ideen sind oft nicht so schwer umzusetzen. Im Detail liegen oft die schweren Brocken. Das Thema Optimierung hat viel Nerven gekostet. Und am Ende bin ich wieder etwas schlauer und denke mir heute hätte ich das anders gemacht.

Ich habe auch eine Version von diesem Spiel bei der man den Monitor senkrecht aufstellen muss. Meine Idee war es einen eigenen Spielautomaten zu bauen. Mal sehen wann das fertig wird :)

Demo

Bild

Hier könnt Ihr die Demo-Version runterladen. Über Feedback würde ich mich freuen.

klick hier -> http://gombolo.bplaced.net/Firestorm/
Zuletzt geändert von gombolo am 26.03.2017, 18:07, insgesamt 2-mal geändert.
Mein aktuelles Projekt -> FirstStrike PLAY THE DEMO

BOSSFIGHT -> schau dir das Video an

MAL SEHEN -> Rakete

WAS ICH SONST SO MACHEN -> Grafik und Design
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Projekt]First Strike - Firestorm (shot em up)

Beitrag von Krishty »

Die Demo stürzt bei mir sofort mit Error! Memory access violation ab … Call Stack:

  0211c7f0() Unknown
  [Frames below may be incorrect and/or missing]
  FirstStrike_DEMO.exe!10003f6d() Unknown
  FirstStrike_DEMO.exe!1000127e() Unknown
  FirstStrike_DEMO.exe!10001641() Unknown

  Exception thrown at 0x0211C7F0 in FirstStrike_DEMO.exe: 0xC0000005: Access violation executing location 0x0211C7F0.


Nachtrag: Hab’s: Es ist inkompatibel zu Data Execution Prevention. Deine User müssen für die EXE eine Ausnahme hinzufügen, damit sie zuverlässig läuft (höchstwahrscheinlich ist ein veralteter Thunking-Algorithmus schuld).

Aber der Text ist sehr schön. Von den Bildern her erinnert es mich sehr an RayStorm (das ich ab und zu noch immer gern spiele, vor allem mit meinem PlayStation-Controller).
gombolo hat geschrieben:Die Lösung war es aus diesen hunderten einzelner 3D Objekte eins zu machen. Jedes Geschoss besteht aus einem Quad (Vier Vertices die zu einem Rechteck zusammengefügt werden). Ihr müsst euch die vielen Quads, die im Spiel erstellt werden, als ein einziges Objekt vorstellen. Die Vertices müssen nicht miteinander zusammenhängen. Nur vier Vertices werden zu einem Quad zusammengefügt. Um die Rotation, die Skalierung und Transformation muss man sich selber kümmern.
Der Vorteil ist nun, dass alle Geschosse in einem Rutsch gerendert werden. Denn diese sind für die Grafikkarte nun ein einziges 3D Objekt.
Stehen unter D3D 7 Point Sprites zur Verfügung? Klingt wie geschaffen dafür.

Nachtrag: Okay; hab’s angespielt:
  1. das Fenster geht nicht in den Hintergrund, wenn ich zu einem anderen Programm wechsle – das ist störend, wenn ich zwischen den Etappen surfen oder chatten will
  2. Minimieren kann ich auch vergessen, weil dann der Cursor periodisch nach links oben zurückspringt und dadurch für Windows unbrauchbar wird – das stört sehr
  3. sobald ich einmal getroffen wurde, sinkt mein Shield langsam auf 0 und ich kann nichts dagegen tun, dass ich dann sterbe – Bug? So überlebe ich jedenfalls selten länger als eine Minute :(
  4. im High Score würde ich neben Buchstaben auch Zahlen zulassen :)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
gombolo
Establishment
Beiträge: 130
Registriert: 26.01.2011, 20:33

Re: [Projekt]First Strike - Firestorm (shot em up)

Beitrag von gombolo »

Upps, das mit dem Fenster war mein Fehler. Ich bin auch nicht der Freund von wiederspenstigen Fenstern :) Eigentlich sollte das nicht passieren. Ich habe eine andere Version hochgeladen. Jetzt müsste es besser sein.

Zur Steuerung. Du kannst auch dieses Spiel mit einem Joypad spielen. Oder auch mit der Maus. Für die Steuerung war die Tastatur vorgesehen, aber ich habe den Code für den Controller und die Maus drin gelassen.

So und nun zum schneller Energieverlust des Schildes. Kann ich Momentan nicht nachvollziehen. Habe es zwar nur an zwei PCs getestet, aber dort ohne Problemen. Bin ein wenig ratlos. Hast du mal auf die Demonstration gewartet? Läuft da alles wie es soll? Immer nach 15 Sekunden springt es zum nächsten Bild. Spielstart-Bildschirm (15 Sekunden warten)-> Highscore-Liste (15 Sekunden warten)-> Demonstration (PC spielt selber)

Die Highscore-Liste auch mit Zahlen. Ja, könnte ich machen, aber wenn du meine Projekte anschaust wirst du merken das ich ab und zu längere Pausen einlege. :)

Aktuelle möchte ich ein neues Projekt mit der UE4 starten (Die Betonung liegt auf "möchte")
Und was ich noch machen will. Ich habe beim Spiel FirstStrike eine Version wo die Kamera um 90Grad gedreht ist und der Monitor senkrecht aufgestellt werden muss. Sieht viel besser aus. Daraus wollte ich ein Arcade-Gerät bauen. Für mein "Arbeitszimmer"

Und danke für das Feedback. :)
Mein aktuelles Projekt -> FirstStrike PLAY THE DEMO

BOSSFIGHT -> schau dir das Video an

MAL SEHEN -> Rakete

WAS ICH SONST SO MACHEN -> Grafik und Design
Benutzeravatar
gombolo
Establishment
Beiträge: 130
Registriert: 26.01.2011, 20:33

Re: [Projekt]First Strike - Firestorm (shot em up)

Beitrag von gombolo »

Mein aktuelles Projekt -> FirstStrike PLAY THE DEMO

BOSSFIGHT -> schau dir das Video an

MAL SEHEN -> Rakete

WAS ICH SONST SO MACHEN -> Grafik und Design
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Projekt]First Strike - Firestorm (shot em up)

Beitrag von Krishty »

gombolo hat geschrieben:So und nun zum schneller Energieverlust des Schildes. Kann ich Momentan nicht nachvollziehen. Habe es zwar nur an zwei PCs getestet, aber dort ohne Problemen. Bin ein wenig ratlos. Hast du mal auf die Demonstration gewartet? Läuft da alles wie es soll? Immer nach 15 Sekunden springt es zum nächsten Bild. Spielstart-Bildschirm (15 Sekunden warten)-> Highscore-Liste (15 Sekunden warten)-> Demonstration (PC spielt selber)
Die Demo läuft nur ein paar Sekunden, dann bleibt das Raumschiff in der linken oberen Ecke. Sobald es getroffen ist, ist innerhalb einer Sekunde sein Schild verbraucht, und die Demo endet mit einem Punktestand von 15 … auch in der neuen Version.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
gombolo
Establishment
Beiträge: 130
Registriert: 26.01.2011, 20:33

Re: [Projekt]First Strike - Firestorm (shot em up)

Beitrag von gombolo »

Okay, das hört sich nicht gut an, aber danke mal für das Testen. Ich kann mir Momentan gar nicht vorstellen an was das liegen könnte.

Hängt bei dir am PC noch ein Joypad?

Naja, ich habe mal die Demo offline gestellt. Macht ja keinen Sinn wenn es nicht funktioniert ;)
Mein aktuelles Projekt -> FirstStrike PLAY THE DEMO

BOSSFIGHT -> schau dir das Video an

MAL SEHEN -> Rakete

WAS ICH SONST SO MACHEN -> Grafik und Design
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Projekt]First Strike - Firestorm (shot em up)

Beitrag von Krishty »

Im Gegenteil – je mehr Leute es testen, desto näher kommst du vielleicht dem Problem!

Gib bescheid, falls ich mal irgendwas spezielles ausprobieren soll oder so.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
marcgfx
Establishment
Beiträge: 2050
Registriert: 18.10.2010, 23:26

Re: [Projekt]First Strike - Firestorm (shot em up)

Beitrag von marcgfx »

absolut, lass die demo ruhig offen stehen. vielleicht ist es die regel oder eine extreme ausnahme, dass es nicht läuft.
Benutzeravatar
gombolo
Establishment
Beiträge: 130
Registriert: 26.01.2011, 20:33

Re: [Projekt]First Strike - Firestorm (shot em up)

Beitrag von gombolo »

ja, ich denke Ihr habt recht. :)
Mein aktuelles Projekt -> FirstStrike PLAY THE DEMO

BOSSFIGHT -> schau dir das Video an

MAL SEHEN -> Rakete

WAS ICH SONST SO MACHEN -> Grafik und Design
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Projekt]First Strike - Firestorm (shot em up)

Beitrag von Krishty »

P.S.: Ich habe einen Joystick und zwei PlayStation-Controller installiert, aber nichts davon war angeschlossen, als ich First Strike ausprobiert habe.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
marcgfx
Establishment
Beiträge: 2050
Registriert: 18.10.2010, 23:26

Re: [Projekt]First Strike - Firestorm (shot em up)

Beitrag von marcgfx »

Ich hab das Spiel eben mal gespielt und es hat problemlos funktioniert. Ich finde es ziemlich schwierig, die Maussteuerung ist für mich zu sensibel, gezielt Ausweichen war für mich unmöglich. Ich bin vielleicht eine Minute ins Spiel gekommen bis ich draufging. Fullscreen wäre schön und die Tastenbelegung war mir nicht klar, sofern es eine gibt.
Benutzeravatar
gombolo
Establishment
Beiträge: 130
Registriert: 26.01.2011, 20:33

Re: [Projekt]First Strike - Firestorm (shot em up)

Beitrag von gombolo »

Hallo,

beim Start erscheint ein kleines Fenster. Wenn man auf Enter drückt kommt man ins Menü für die Einstellungen. Dort kann man auch Fullscreen einschalten.

Die Steuerung sollte mit der Tastatur erfolgen. So war es gedacht. Den Maus- und Joystickcode habe ich drin gelassen, aber eigentlich war es so gedacht das man mit der Tastatur spielt.

Mit der X-Taste Feuer
Mit der A-Taste Raketen
Mit der Space-Tast Bombe

eine genaue Beschreibung gibt es hier als PDF -> http://gombolo.bplaced.net/Firestorm/Fi ... estorm.pdf

Hier zur Hompage -> http://gombolo.bplaced.net/Firestorm/

Und so schwer ist das SPiel nicht :) Schau dir das Video auf Youtube an. :) Wenn man es öfters spielt wird man besser. Ich denke das ist das Ziel bei so einem Spiel. Bei jedem Versuch besser werden :)

Ein kleiner Tipp. Wenn ein PowerUp erscheint, dann stell dich in die Mitte von diesem. Wenn du ein paar Sekunden darin verweilst erhälst du alle PowerUps. ;)

Danke für das Feedback. Gruß Gombolo
Mein aktuelles Projekt -> FirstStrike PLAY THE DEMO

BOSSFIGHT -> schau dir das Video an

MAL SEHEN -> Rakete

WAS ICH SONST SO MACHEN -> Grafik und Design
Benutzeravatar
marcgfx
Establishment
Beiträge: 2050
Registriert: 18.10.2010, 23:26

Re: [Projekt]First Strike - Firestorm (shot em up)

Beitrag von marcgfx »

Dann bin ich wohl einfach verdammt schlecht... oder:
Im Gegensatz zum YouTube-Video-Spieler weiss ich nicht auswändig wo jeder Gegner auftauchen wird. Bei mir sind viel mehr Schüsse auf dem Schirm und da alles verdammt schnell ist, habe ich keine Chance. Vor allem flieg ich oft in Gegner rein die plötzlich von der Seite reindüsen. Ich glaube es geht 0.2 Sekunden bis eine Reaktion auf etwas unerwartetes geschehen kann, ich zweifle dass ich so viel Zeit überhaupt habe.

Braucht wohl noch einen Anfängermodus mit halber Geschwindigkeit, sonst fass ich das nicht mehr an :P

- Ein richtiges Settings Menü wär schön
- Der Cursor zittert nach einem Continue immer in Bildmitte rum
- Das Spiel läuft im Hintergrund während ich hier schreibe einfach weiter, auch komisch

Das Spiel hat Potential, fühlt sich aber noch nicht fertig an.
Benutzeravatar
gombolo
Establishment
Beiträge: 130
Registriert: 26.01.2011, 20:33

Re: [Projekt]First Strike - Firestorm (shot em up)

Beitrag von gombolo »

Danke euch beiden für das Feedback. :)
marcgfx hat geschrieben:Braucht wohl noch einen Anfängermodus mit halber Geschwindigkeit, sonst fass ich das nicht mehr an :P
Shmups sind teilweise sehr schwer zu spielen. Man muss viel Konzentration aufbringen. Wenn man kein Fan von solchen Spielen ist kann das sehr schnell zu Frust führen. :geek:
Mein aktuelles Projekt -> FirstStrike PLAY THE DEMO

BOSSFIGHT -> schau dir das Video an

MAL SEHEN -> Rakete

WAS ICH SONST SO MACHEN -> Grafik und Design
Antworten