DGL https://delphigl.com/forum/ |
|
Terrorcide - Nuclear Sword of Damocles https://delphigl.com/forum/viewtopic.php?f=13&t=2556 |
Seite 1 von 2 |
Autor: | Sascha Willems [ Do Feb 26, 2004 19:52 ] |
Betreff des Beitrags: | Terrorcide - Nuclear Sword of Damocles |
Kurze Einleitung : Vor knapp 1 1/2 Wochen habe ich angefangen ein neues Spiel zu proggen, nämlich einen Spaceshooter á la R-Type/Salamander, allerdings mit OpenGL und komplett in 3D. Für alle die R-Type bzw. Salamander nicht kennen (was gut möglich ist, stammen nämlich alle aus der 16/8-Bit Konsolenzeit), es handelt sich dabei im "Ballerspiele" im Weltraum die immernur in eine Richtung ablaufen, also keine 6DOF wie z.B. bei WingCommander oder Freelancer. Unterschied zu den von mir genannten Titeln ist bei Terrorcide - The Nuclear Sword of Damocles (Arbeitstitel) die Ansicht von hinten, so dass der 3D-Faktor besser rauskommt. Ausserdem möchte ich auch zumindest Ansatzweise sowas wie eine richtige Story einbauen, weshalb es bei jeder Mission sowohl ein Briefing als auch ein Debriefing geben wird. Der programmiertechnische Teil ist bereits so gut wie abgeschlossen (~2000 Zeilen, exklusive meiner Basecodeunits), momentan werkle ich daher am Content, also 3D-Modelle, Grafiken und Missionsskripts. Zuerst aber wie gewohnt ein paar Screenshots : ![]() ![]() ![]() ![]() Kurze Erklärung zu den "WIP"-Screenshots (v.l.n.r.) :
Zum Programmiertechnischen : Wie gesagt besteht der Quellcode des Spiels aus knapp 2000 Zeilen (darin enthalten sind meine Basecodeunits wie z.B. TexturenManager, ModelManager usw. nicht) und ist bisher (ein wenig Selbststolz kann nicht schaden ![]() Die Verwaltung aller Objekte in der Spielwelt übernimmt bei mir ein TEntityManager (der Begriff Entity sollte den meisten Lesern ein Begriff sein), der eine Liste von TBaseEntity-Objekten verwaltet. Objekte wie Raumschiffe (TActor), Geschosse (TBullet) und Explosionen (TExplosion) sind von dieser Klasse abgeleitet, die die wichtigsten abstrakten Funktionen und Prozeduren beinhaltet (Update, Render, IsObsolete). Verwaltet werden alle Objekte dann dynamisch über eine Pointerliste. Die Verwaltung aller Spielobjekte über einen solchen Entitätenmanager macht die Sache übrigens sehr einfach. Neue Entitäten werden auch über die (überladene) Funktion SpawnEntity erstellt, so dass andere Klassen (z.B. über Skripts) leicht neue Objekte in die Welt einfügen können. Und wenn wir grade beim Thema Skripte sind : Missionen sowie alle anderen extern benötigten Daten liegen in Form von XML-Dateien vor. Wer selbst das XML-Format nutzt, kennt seinen riesigen Vorteil, nämlich die leichte Erweiterbarkeit. Die Verwaltung des Missionskomplexes wikelt dabei die Klasse TMissionManager ab, die nicht nur neue Missionen aus der entsprechenden XML-Datei lädt, sondern sich auch drum kümmert das die in dieses Datei abgelegten Missionsereignisse an der korrekten Position getriggert werden (dazu gleich mehr). Alle anderen relevanten Daten verwaltet der TDataManager. Darunter fallen z.B. Formationen und Gizmoinformationen für die einzelnen 3D-Modelle. Das Rendering (bzw. der ganze 3D-Teil) ist wohl (momentan) weniger interessant. Aber wie schon NapalmBomber3D soll auch Terrorcide als Freeware-Titel eher den Casual-Gamer ansprechen und soll daher auch auf älterer Hardware laufen. Deshalb gehe ich sowohl bei der graphischen Komplexität als auch beim Detailgrad Kompromisse ein. Also nur 2^n*2^n-Texturen (nicht zu groß), recht geringer Polygoncount und vorerst keine Shader. Da ich meinen fertigen ModelManager verwende, werden die 3D-Modelle je nach Hardware entweder als Displaylisten oder als VBOs (letztere nach Material sortiert) gerendert. Der TexturenManager nutzt auf neueren Karten dann auch die automatische Mipmapgeneration, was sich zumindest beim Laden bemerkbar machen sollte. Einziges "interessantes" Merkmal des Rendervorganges ist daher die Z-Sortierung aller transparenten Objekte (Explosionen und Geschosse), da es sonst besonders bei heisser Action (viele Explosionen und Geschosse gleichzeitig sichtbar) zu hässlichen Effekten käme. Momentan sortiere ich noch mit dem langsamen (aber leicht zu implementierendem) BubbleSort-Algorithmus, der auch eigentlich ausreichen sollte. Andere Algorithmen wie z.B. QuickSort bringen nämlich erst wirklich bei einer großen Anzahl zu sortierender Elemente was. Kollision ist übrigens auch schon implementiert. Momentan aber nur über BoundingBoxen, was zwar für den Anfang ausreichend ist, aber auf jeden Fall noch verfeinert wird. Werde später also noch zusätzlich Kollision auf Dreiecksbasis einbauen, da pure BBs bei einigen (End)gegnertypen die mir vorschweben alles andere als brauchbar wären. Die Tools : So ziemlich jeder Spielentwickler hat begriffen das der wichtigste Teil bei der Entwicklung die passenden Tools sind. Eine tolle Engine nützt ohne Tools zur Contenterstellung nämlich nichts, weshalb ich für Terroricde bisher bereits 3 verschiedene Tools entwickelt habe. AfterModel (Screenshot) : Mit diesem Tool kann ich sog. Gizmos (den Begriff hab ich einfach so mal aus 3DSMax übernommen) an meinen Modellen platzieren, die ich dann im Spiel nach Gusto interpretieren kann. Normalerweise sind das die Waffenpositionen und Glows an den Schiffen. Exportiert werden diese Gizmos dann nach XML und vom DataManager den passenden Modellen zugeordnet. FormationBuilder (Screenshot) : Eigentlich wollte ich zuerst per Zufall irgendwelche feindlichen Schiffe im Level erstellen lassen, was sich allerdings ziemlich schnell als chaotisch und spielerisch kaum interessant herausgestellt hat. Ausserdem lässt sich dort auch schlecht der für spätere Missionen höhere Schwierigkeitsgrad realisieren. Da ich aber schon nen Entitätenmanager habe mit dem ich bequem neue Aktoren dynamisch erstellen kann, hab ich mir schnell noch ein Tool zusammengebaut mit dem man Formationen erstellen und nach XML exportieren kann. Diese Formationen kann man dann leicht mit dem Missionsskripter an festgelegten Levelpositionen spawnen lassen. So hat man dann 100%ige Kontrolle über das wo und wann innerhalb einer Mission. MissionsScripter (Screenshot) : Wie bereits gesagt soll das Spiel storygetrieben sein. Da kann ich natürlich nicht einfach hingehen und per Zufall irgendwo Feinde bzw. Objekte erstellen. Deshalb hab ich bereits am Anfang der Entwicklung einen kleinen Missionsskripter geschrieben, der eine Ereignisliste erstellen kann. Dort kann man dann z.B. angeben das an Levelposition X Objekt Y mit im Skripter eingestellten Eigenschaften erstellt wird. Ausserdem kann man hier noch Briefing/Debrieing, Missionstitel, Länge und Umgebung (u.a.) einer Mission festlegen. Das wars also erstmal zu meinem kleine Projekt. Habe den Zeitraum bis zur Fertigstellung mal auf 1-2 Monate festgelegt, und schätze das auch einhalten zu können. Das Spiel ist bereits lauffähig, aber ich wollte keine Version veröffentlichen in der es nur 1 1/2 fertige Missionen zu spielen gibt. Das wäre dann doch ein wenig langweilig, aber innerhalb der nächsten paar Wochen dürfte die erste spielbare Version mit 3-4 Missionen auf euch zukommen. Wie gesagt bastle ich momentan sowohl an der Story als auch (v.a., da sehr zeitraubend) an den 3D-Modellen. |
Autor: | Sascha Willems [ Di Mär 09, 2004 16:50 ] |
Betreff des Beitrags: | |
Eigentlich wollte ich die Demo schon fertig haben, aber ich hab mir die Tage Sacred zugelegt, das mich seit dem Wochende stark vom Programmieren abhält ![]() Besonders mein wichtigstes Tool, nämlich den MissionsScripter habe ich recht stark erweitert. So hat er jetzt nicht nur weitaus mehr Funktionen, sondern dient inzwischen auch als Zentrale Stelle bei der Contenterstellung. So können aus diesem Tool heraus alle anderen Programme (AfterModel, FormationBuilder) gestartet werden und auch einen Button um die aktuell in Bearbeitung befindliche Mission direkt im Spiel zu starten macht das Entwickeln der Spielinhalte zu ner sehr bequemen Sache. Einen neuen Screenshot gibts es hier. Ansonsten hab ich die meiste Zeit damit verbracht Content für die Demo zu machen. So gibts bereits ein kurzes Skript, in dem ich alle Missionen für die Demo inklusive Intro und Beschreibung niedergeschrieben habe, um diese dann nur noch im Missionsskripter umsetzen zu müssen. Die 3D-Modelle für die Levelziele sind auch bereits alle fertig und ausser ein oder zwei neuen Feinden muss ich für die Demo wohl kaum noch Modelle basteln. Da aber Bilder mehr als Worte sagen poste ich mal ein paar aktuelle Screenshots inklusive kurzer Beschreibung (wie immer öffnet ein Klick auf das Bild die größere Variante) : ![]() Die Rebellenbasis, die der Spieler in einer der Missionen erreichen muss. Hat mich ungefähr 2 Stunden gekostet diese zu modellieren, da ich ihre grundlegende Struktur bereits vor Augen hatte. Polycount liegt irgendwo zwischen 500 und 700. ![]() ![]() Hier sieht man schön den Alphafade-Effekt den ich vor kurzem im Quellcode implementiert habe. Statt die Objekte einfach an der Far-Clipping-Plane ins Bild poppen zu lassen (was sehr hässlich aussieht, heute aber tatsächlich immernoch bei einigen Spielen gemacht wird) werden diese jetzt weich über Alphablending in die Szenerie eingefaded. Wenn man das mal direkt vergleicht liegen da rein optisch und atmosphärisch Welten dazwischen. Das Objekt welches ihr da seht ist übrigens ein "herkömmliches" Sprungtor, das den Spieler wohl in einigen seiner Missionen begleiten wird. ![]() Und zu guter letzt noch ein Screenshot auf dem die neue Schiffsklasse vom letzten Update in Aktion zu sehen ist. Der schwere Bomber hält nicht nur recht viel aus, sondern kann mit vier Waffenslots auch gut austeilen. So viel also zum aktuellen Stand. Momentan sind 3 der 5 geplanten Mission fertig umgesetzt, und der Rest sollte auch schnell gemacht sein. Danach will ich noch ein wenig am Balancing arbeiten, denn es soll weder zu schwer noch zu einfach werden (verschiedene Schwierigkeitsgrade sind geplant, aber wohl nicht für die erste Demo). Ausserdem möchte ich Geschwindigkeitstechnisch auch noch ein wenig optimieren und die Demo auch noch auf nem anderen Rechner ausgiebig testen. |
Autor: | Sascha Willems [ So Mär 14, 2004 15:42 ] |
Betreff des Beitrags: | Erste Version ist fertig... |
Wie im letzten Post versprochen gibts nun endlich auch die erste Demo : Terrorcide - Version 0.1(4 Missionen, 6,56 MByte, ZIP-Archiv) Im Hauptmenü funktionieren im aktuellen Release nur die Punkte "Neues Spiel starten", "Spiel fortsetzen" (wenn man in der Kampagne ist) und "Verlassen". Optionen muss man momentan noch über die terrorcide.ini anpassen (das dürfte aber wohl kein Problem sein). Die Spieldauer der vier Missionen sollte bei knapp 20-25 Minuten liegen (sofern man nicht irgendwo kaputt) geht. Ich hab heute und auch gestern ziemlich viel Zeit mit dem Playtesting verbracht, in der Hoffnung das der Schwierigkeitsgrad so wie auch die Missionen an sich recht ausgewogen sind. Wer sich alle Missionen mal ansehen will, ohne jedoch alle durchspielen zu müssen, der kann über Umschalt+n in die nächste Mission springen, während sich mit d Debuginfos wie z.B. FpS anzeigen lassen. Getestet wurde die Demo wie erwähnt auf meiner Radeon9700 und einer GeForce4-Ti4400 und selbst auf dem schwächeren Rechner lief es recht flüssig, allerdings wäre ich über Feedback im Bezug auf Geschwindigkeit und Kompatibilität auf euren Systemen wie immer recht dankbar. Wann die nächste Version folgt kann ich nicht sagen (zumal am Donnerstag meine englische UT2k4-Version da sein sollte), allerdings hab ich schon einiges für die Zukunft geplant. Neben mehr Content (Missionen, Gegner, Umgebungen) sind auch andere Spielerschiffe inklusive Upgrades, sowie verschiedene Waffensysteme und andere Powerups geplant. |
Autor: | Sascha Willems [ Do Apr 01, 2004 17:14 ] |
Betreff des Beitrags: | |
Die letzten Tage habe ich größtenteils (wenn ich an Terrorcide gearbeitet habe) mit einigen Umstellungen/Optimierungen am Quellcode verbracht. So werden 3D-Modelle und deren Texturen nur noch bei Bedarf geladen, also wenn man einen Level startet in dem diese zu sehen sind, wodurch sich besonders die Startzeit der Anwendung drastisch reduziert hat, genauso wie der Speicherbedarf (sofern man sich nicht durch alle Mission durchprügelt). Denn besonders wenn man viele 3D-Objekte mit nochmal so vielen Texturen braucht, wirds ab nem gewissen Maß unerträglich wenn diese direkt beim Start des Spiels geladen werden und man so recht lange warten muss bis man loslegen kann. Programmiertechnisch hat das für mich eine Umstellung in meinem ModelManager sowie meiner PackageUnit bedeutet, und natürlich im MissionsManager. Wird über diesen jetzt eine neue Mission gestartet, so geht dieser erstmal alle in diesem Einsatz auftretenden Ereignisse (Aktoren- und Formationserstellung, etwaige Makros mit ihren Unterformationen) durch und schaut ob die dort verwendeten Modelle schon im Speicher (sprich im ModelManager) vorhanden sind. Ist dies nicht der Fall, so werden die Modelle zusammen mit ihren Texturen (sofern noch nicht im TexturenManager) nachgeladen. Eine weitere Änderung sind die Formationsmakros (siehe MissionSkripter Screenshot). Über den Missionsskripter kann ich jetzt ganz bequem Makros erstellen, die aus mehreren Formationen bestehen und in einer globalen Datenbank (natürlich XML) abgelegt werden. Siehe dazu erstmal folgenden Screenshot : ![]() Die mechanische Schlange besteht aus mehreren Formation, allerdings fein in ein Formationsmakro gekapselt. So muss ich nicht für jede Schlange meherer Formationen ins Missionsskript einfügen, sondern einfach nur sage das an Eventposition X das Makro Y, welches die Formationen für die Schlange beinhaltet, abgespult werden soll. Das wars grob zur Entwicklung der letzten Tage. Momentan mache ich mir Gedanken über die Art und Weise wie ich Waffenupgrades für das Spielerschiff integriere. Hab im Zuge dessen auch diverse alte Klassiker angespielt (auf SNES, MegaDrive und PC-Engine) und mir dort mal die verschiedenen Upgradesysteme angesehen. Bei R-Type und Salamander z.B. wird das über aufsammelbare PowerUps geregelt, was allerdings öfters dazu geführt hat das ich mal ein ungewolltes Waffensystem aufgenommen habe. Bei Parodius hingegen wurde es so gemacht das man für das Aufsammeln bestimmter Boni eine PowerUp-Leiste aufgeladen hat, und man dann, wenn die Leiste das gewünschte PowerUp erreicht hat, selbst wählen kann. Ein weiterer Ansatz wäre es auch, den Spieler am Ende des Levels in einen Shop zu bringen, wo er gegen Bares dann sein Schiff aufrüsten kann. Bei Thunderforce 4 (MegaDrive) ist dann wieder anders, denn dort kann man, sobald man ein Waffensystem aufgesammelt hat, über einen Knopfdruck beliebig wechseln. Momentan favorisiere ich letztere Variante, aber mal sehen was ich am Ende einbaue. Auch solche "Support-PODs" (die kleinen Dinger die z.B. in Salamander aufgesammelt werden und ums Schiff schwirren und mitballern) habe ich vor einzubauen, bin mir aber noch nicht ganz schlüssig in welcher Art und Weise. |
Autor: | Sascha Willems [ Sa Apr 03, 2004 19:13 ] |
Betreff des Beitrags: | |
Aktuellste Änderung sind jetzt verschiedene Waffensysteme (6 an der Zahl) für das Spielerschiff, die ich dann natürlich auch gleich mit in das HUD (das ich dabei auch etwas verändert habe) einbinden, das sieht jetzt nämlich so aus : ![]() Verfügbare Waffensysteme werden farbig dargestellt, und das momentan aktive mit einem grünen Glühen hinterlegt. Um mal kurz deutlich zu machen wie aufwendig so ein HUD ist : In obiger Grafik stecken so über den Daumen gepeilt bestimmt 5-6 Stunden Arbeit, also von der ersten Version bis zur aktuellen Iteration, wobei ja nicht nur das Erstellen des HUDs Zeit kostet, sondern auch Teile herausgepastet und mit Alphamasken belegt werden müssen, um z.B. verfügbare Waffen und Positionsbalken darzustellen. Dafür bin ich jetzt allerdings mit dem Aussehen des HUDs recht zufrieden und werde wohl nur noch minimale Änderungen dran vornehmen. Wie genau ich die zur Verfügungstellung der Waffensysteme mache weiß ich immernoch nicht. Aber momentan tendiere ich stark zu einem Shop in dem man sich nach einem Level (für das erfolgreiche Beenden einer Mission gibt es einen festen Betrag, plus etwaige Boni für z.B. hohe Trefferquote o.ä.) damit eindecken kann. Es über aufsammelbare Powerups zu machen ist mir dann doch zu zufällig und je nach Mission (Endgegner stellen ja immer eine eigene Mission dar) auch unfair für den Spieler. |
Seite 1 von 2 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |