Ich habe eine Spiele-Engine in C / C ++ und DirectX entwickelt.
Ich habe eine Kachel-Engine für die Karten, animierte Player / NPC-Sprites, die mit dem NPC, den Menüs und dem Levelwechsel sprechen, aber es gibt kein Spiel, es fühlt sich einfach leer an.
Ich habe mich umgesehen und höre immer wieder Schlagworte, aber ich möchte wissen, wie ich eine Geschichte in mein Spiel implementieren kann.
Einige Leute haben eine Sicherungsdatei genannt, die Flags enthält, die jede mögliche Aktion / jeden möglichen Status im Spiel regeln, aber das klingt lächerlich.
Es ist ein bisschen ehrgeizig, aber ich versuche, ein Spiel wie die älteren Pokemon / Final Fantasy-Spiele zu bekommen.
Weiß jemand, wie diese Spiele funktionieren oder welche Theorie verwendet wird?
Ich habe eine Weile gesucht und würde mich über jeden Input freuen, den die Leute haben.
Sie könnten eine Reihe möglicher Zustände verwenden, in denen sich Ihr Spiel befindet. Ihre NPCs und Ihre Welt würden diese Zustände kennen und entsprechend reagieren / anzeigen. Möglicherweise möchten Sie auch eine Reihe von Auslösern definieren, die durch bestimmte Aktionen / Ereignisse aktiviert werden.
Zum Beispiel würde das Schlagen eines bestimmten Gegners den Auslöser A aktivieren, der deiner Welt den Zustand S hinzufügt, und in dem Zustand S wird dein Charakter durch einen Stromschlag getötet, wenn er aus dem Versteck seines Gegners austritt. Oder es regnet draußen. Oder Sie finden eine seltene Süßigkeit. Du verstehst den Punkt.
Mit diesen zwei einfachen Ergänzungen zu Ihrem Spiel könnten Sie es viel "lebendiger" machen.
Stelle sicher, dass du auch einen reichen Hintergrund für deine Welt, Charaktere und Handlung erstellst und das Spiel mit diesem Hintergrund konsistent ist. Planen Sie zuerst Ihre Geschichte.
Versuchen Sie auch, Gamedev
quelle
Wie bereits erwähnt, ist dies eine perfekte Anwendung für eine Zustandsmaschine.
Im Wesentlichen haben Sie eine Art Baumstruktur. Jedes Blatt / jeder Knoten enthält Informationen zum aktuellen Status und Regeln für den Übergang zum nächsten Status. Jeder Knoten kann mehrere Ausgänge enthalten, je nachdem, wie komplex Ihr Plot / Play Flow sein soll.
Ein gutes, sehr loses Analogon dazu ist ein Choose Your Own Adventure- Buch. Jede Seite enthält einen Text, der einen Teil der Geschichte beschreibt und Entscheidungen, die der Spieler treffen kann. Jede Entscheidung führt zu einer anderen Seite. Einige Seiten verweisen möglicherweise auf zuvor besuchte Seiten usw.
Die alten textbasierten Abenteuerspiele wie Zork und Leather Goddesses of Phobos und die berüchtigten Sierra * Quest-Spiele ( SpaceQuest mit Roger Wilco, dem Raumpfleger, ist einer meiner Favoriten ) verwendeten eine sehr einfache Version dieses Systemtyps. Jeder Raum auf einer Karte war ein Staat, mit Ausgängen, die mit anderen Staaten oder Räumen verbunden waren. Das Erfassen eines Elements setzt ein Flag in einem globalen Statusobjekt. Jeder Raum prüfte diese Flags, um festzustellen, welche Charaktere oder Gegenstände in jedem Raum verfügbar waren.
Daher können Ihre Status als Klasse oder Struktur implementiert werden, die jeweils Eigenschaften für Folgendes aufweisen:
Asset-Liste - Liste der Zeiger auf Hintergrundgrafiken und alles andere, was Sie zur Anzeige des Raums / Status / Levels benötigen.
Teilnahmebedingungen - Erfolge, die bereits erreicht sein müssen, um ein Level zu betreten
Ausgänge - Links zu jedem möglichen "nächsten" Ausgang. Nord, Süd, Ost und West sind einige Beispiele dafür, aber Sie können auch Tür1, Teleport usw. einschließen. Wenn Sie versuchen, einen Raum zu verlassen oder feststellen, dass ein Ausgang / eine Tür "offen" ist, kann Ihr Spiel den nächsten Zustand überprüfen um zu sehen, ob die Einstiegsbedingungen erfüllt sind, und um die Art und Weise zu ändern, in der der Ausstieg auf dem Bildschirm angezeigt wird, oder um zu verhindern, dass sich der Spieler in diese Richtung bewegt.
Wenn Sie sich etwas einfallen lassen möchten, können Sie eine andere Version eines Staates mit unterschiedlichen Zugangsbedingungen einbinden, wodurch sich die Art und Weise ändert, in der der Raum dem Spieler präsentiert wird, oder die Aktionen, die in diesem Raum verfügbar sind.
Ihr Startbildschirm, Tod / Spiel über dem Bildschirm usw. können Zustände innerhalb des Systems sein, ähnlich wie Sie zwischen den Menübildschirmen navigieren können. In der Tat, wenn Sie ein solches Menüsystem haben, können Sie es dafür verwenden. Anstelle von Auf- / Abwärtspfeilen und "Enter" zum Navigieren in einem Menü würden Sie nach bestimmten Ereignissen im Spielbereich suchen, z.
Überlegen Sie aus Sicht des Administrators, ob Sie von der Erstellung eines Verwaltungstools profitieren können, mit dem Sie den Zustandsautomaten erstellen können. Fügen Sie Räume zu einer Karte hinzu, erstellen Sie Verknüpfungen zwischen ihnen, weisen Sie Assets wie Hintergrundbilder usw. zu. Dies ist wahrscheinlich zu viel für Ihren ersten Versuch. Es ist zu einfach, sich in die Erstellung von Admin-Tools zu vertiefen und das Spiel nie zu beenden. Denken Sie daran - Sie schreiben keine Middleware, sondern ein Spiel.
Hoffe das hilft.
quelle
Früher habe ich diese Spiel-Engine namens VERGE verwendet . Spielen Sie damit herum und sehen Sie, wie es mit Ereignissen umgeht. Ich mag es wirklich. Es ist Open Source zu, so können Sie sehen , wie sie es umsetzen, hier . Hier ist eine kurze Beschreibung.
Jede Karte verfügt über verschiedene Ebenen. Die grafischen Ebenen, von denen es mehrere geben kann. Die Hindernisschicht. Und dann ist da noch die Zonenschicht. Die Zonenebene ist hier wichtig. *
Jedes Plättchen hat eine Nummer, die angibt, zu welcher Zone es gehört. Jede Zone kann auf zwei grundlegende Arten aktiviert werden. Entweder wird die Zone aktiviert, wenn der Spieler sie betritt, oder sie verfügt über eine sogenannte benachbarte Aktivierung. Benachbarte Aktivierung bedeutet, dass die Zone aktiviert wird, wenn der Spieler neben einem der Zonenkärtchen steht und eine als Aktivierungsschlüssel angegebene Taste drückt.
Wenn eine Zone aktiviert wird, ruft sie eine Funktion aus einem Skript auf. Sie müssen also eine Art Skriptsprache einbetten. VERGE hat eine eigene Sprache namens VergeC und erlaubt auch lua. Ich selbst benutze lieber Python.
Sobald Sie diese Hürde überwunden haben, haben Sie jetzt eine enorme Leistung in Ihrem Event-Scripting. Sie haben eine vollwertige Programmiersprache, in der Sie Daten wie Spielerstatistiken, Story-Flags usw. speichern und bearbeiten können.
* Es gibt auch eine Entity-Ebene. Entitäten verhalten sich wie mobile benachbarte aktivierte Zonen.
quelle