Hallo liebe Gamemaker-Domäne,
in dieser Diskussion soll es um mein Projekt gehen. Bevor ich euch aber einen ineffizienten Blocktext zumute, hier die relevanten Informationen in gut bekömmlicher Kurzform .
WAS ist mein Projekt: TAOTS (AT), ein rundenbasiertes RPG, inspiriert durch Spiele wie die Final Fantasy-Reihe bishin zu Teil X, 2D, Einflüsse aus diversen RPGs unterschiedlichster Art, vorerst eine spielbare Demo mit den Kern-Features.
WER bin ich und was ist mein Hintergrund: Vorstellungsthread
WIE sieht mein Game-Design aus: Hier folgt in Kürze ein Link zu meinem Konzept.
Diskussionsthematik:
Die Diskussion in diesem Thread soll mir durch eure hochgeschätzten Erfahrungswerte helfen, die geignete weitere Vorgehensweise meines Projektes zu definieren. Vor Allem in Bezug auf Code-Organisation meiner Engine und das effiziente Anlegen der Datengrundlagen des Spiels. RPGs dieser Art sind in Hinblick auf die reine Code-Basis wahre Datenbanken Ungetüme. Um darüber zu diskutieren, wie der Code am besten organisiert werden sollte, müsst ihr natürlich wissen was die Engine können soll und was ich bereits gemacht habe. Da dies hier nicht der oben erwähnte Konzeptthread ist, werde ich logischerweise genre-bezogen fragen, nicht aber auf mein Projekt bezogen. Denn hier soll es nicht um die Features gehen, sondern um das Anlegen von Datenbanken, aus denen die für die späteren Features relevanten Variablen effizient, also ausschließlich bei Bedarf abgerufen werden können. Das reicht für die aus, die das Genre kennen und bewahrt uns davor den Rahmen zu sprengen.
Was soll die Engine können? bzw. Was soll die Engine jetzt als Nächstes können?
Die Engine soll überall, wo es möglich ist, erst dann Informationen (Variablen, Scripte) in den Speicher laden, wenn sie gebraucht werden und diese sofort wieder aus dem Speicher befördern, wenn sie erstmal nichtmehr gebraucht erden. Dies soll die nötige Rechenleistung auf ein machbares Minimum reduzieren und so eine gute Performance gewährleisten. Ein persönlich favorisierter Nebeneffekt davon ist für mich, dass durch die dafür notwendige Code-Organisation einen angenehm organisierten Resource-Tree zur Folge hat. Soweit die Theorie. Ein geignetes Beispiel liefere ich im Abschnitt "Was ich bereits gemacht habe", direkt hierunter. Anfängerproblematik hier: Meine Kenntniss von Variablen (vornehmlich Arrays) wurde zwar durch den unschätzbar talentierten und hilfsbereiten Husi schon vertieft. Ich hätte jetzt aber noch keine praktische Vorstellung davon, wie bzw. wo ich Variablen optimalerweise platzieren sollte um sie, in Bezug auf die oben angepeilte Rechenleistungs-Effizienz, sowohl nur bei Bedarf in den Speicher laden lassen zu müssen und es gleichzeitig zu ermöglichen bestimmte Variablen dieser Datenbanken dauerhaft zu verändern. Ein Beispiel wäre hier ein Script (Script nur weil ich mir das gerade so vorstelle), dass als Speicher für die aktuellen Werte eines Kämpfers funktioniert, welche im einfachsten Fall beim aufleveln des Kämpfers eine dauerhafte Erhöhung des Values der betreffenden Variable (bspw. Stärke) zur Folge hat. Es müsste also das Script mit den Kämpferwerten gecalled werden, dann die Änderungen vorgenommen werden, das "geupdatete" Script gespeichert werden und dann wieder bis zum nächsten Gebrauch aus dem Speicher entfernt werden. Ich weiß ehrlich gesagt noch nichtmal, ob das geht. Ich könnte mir auch vorstellen, dass die Variablen im Script zwar jedes Mal wie gewollt verändert werden, aber beim nächsten callen des Scripts nur die Ausgangspunkt-Version des Scripts gerufen wird, wodurch die gewünschte Funktion ausbleiben würde.
Was ich bereits gemacht habe: Das Spiel hat momentan drei Räume, jeder Raum ist ein Platzhalter für einen Aspekt des Spiels(Ein Hauptmenü, eine lokale Map, eine Battlemap). So kann ich in voneinander getrennten Departments arbeiten und testen, was echt angenehm ist. Im Ressource-Tree habe ich bereits für jeden Raumtyp (Händlermenü, Spielermenü, Hauptmenü, Lokale Map, Weltkarte, usw.) einen Raum angelegt. Ein persistentes Objekt, meine Engine, wird zu Beginn des Spiels kreiert und kontrolliert und verwaltet allen Code. So ist es zum Beispiel möglich mit F1 bis F3 direkt zu den entsprechenden Räumen zu springen um den neuesten Code zu testen. Das persistente Objekt beinhaltet ein Script indem durch eine Kombination aus Array und Enumerator (Finite-State-Machine) der aktuelle Raum erkannt und dem diesem Raum zugeordneten Steuerungstyp (Menu, Map) entsprechend entweder das Script zur Bewegung der Spielfigur oder die Menüsteuerung geladen wird. Das funktioniert soweit und stellt das im vorigen Beispiel angekündigte Beispiel meiner Vorstellung von effizienter Code-Organisation dar. Im dritten Raum, der Battlemap, möchte ich nun beginnen, das grundlegende, genretypische Kamfsystem zu entwickeln. Anfängrproblematik hier: Bis jetzt werden die sechs Kampfteilnehmer-Objekte einfach durch die Raumoptionen kreiert. Im fertigen Zustand muss das Spiel aber zu Kampfbeginn sowohl aus den aktuellen Einstellungen des Gruppenmenüs des Spielers die richtigen Kämpferobjekte kreiieren und platzieren, als auch zufallsbasiert einen der diesem Raum/ dieser Map zugeteilten Gegnertrupps kreieren und platzieren. Meine ganz konkrete Frage hierzu: Sollte ich zuerst die Datenbank bzw. die Datenbanken entwickeln, die es dem Battlecontrol-Objekt ermöglichen selbstständig die richtigen Kämpfer-Objekte zu platzieren, oder das erstmal ruhen lassen und daran arbeiten, dass die Geschwindigkeitsvariablen der existierenden Kämpferobjekte vom Battlecontrol-Objekt erkannt, verglichen und daraus eine Zugreihenfolge erstellt wird, nach welcher die Kämpfer ihren Zug bekommen?
Ich hoffe meine Diskussionserläuterung war für ihre Länge ganz angenehm, vielleicht sogar interessant zu lesen und freue mich auf den Austausch mit euch. Mehr zu meinen Features und Mechanics gibts wie angedeutet im Konzeptthread, den ich noch erstellen werde.
Lieben Gruß,
Ben
EDIT: Ich hoffe das meine Erläuterungen jetzt nicht zu sehr ins technische für dieses Forum gehen. Nochmal: Es geht um darum, was sinnvoll wäre als nächstes zu tun. Nicht wie ich das machen soll!
Nochmals lieben Gruß,
Ben
in dieser Diskussion soll es um mein Projekt gehen. Bevor ich euch aber einen ineffizienten Blocktext zumute, hier die relevanten Informationen in gut bekömmlicher Kurzform .
WAS ist mein Projekt: TAOTS (AT), ein rundenbasiertes RPG, inspiriert durch Spiele wie die Final Fantasy-Reihe bishin zu Teil X, 2D, Einflüsse aus diversen RPGs unterschiedlichster Art, vorerst eine spielbare Demo mit den Kern-Features.
WER bin ich und was ist mein Hintergrund: Vorstellungsthread
WIE sieht mein Game-Design aus: Hier folgt in Kürze ein Link zu meinem Konzept.
Diskussionsthematik:
Die Diskussion in diesem Thread soll mir durch eure hochgeschätzten Erfahrungswerte helfen, die geignete weitere Vorgehensweise meines Projektes zu definieren. Vor Allem in Bezug auf Code-Organisation meiner Engine und das effiziente Anlegen der Datengrundlagen des Spiels. RPGs dieser Art sind in Hinblick auf die reine Code-Basis wahre Datenbanken Ungetüme. Um darüber zu diskutieren, wie der Code am besten organisiert werden sollte, müsst ihr natürlich wissen was die Engine können soll und was ich bereits gemacht habe. Da dies hier nicht der oben erwähnte Konzeptthread ist, werde ich logischerweise genre-bezogen fragen, nicht aber auf mein Projekt bezogen. Denn hier soll es nicht um die Features gehen, sondern um das Anlegen von Datenbanken, aus denen die für die späteren Features relevanten Variablen effizient, also ausschließlich bei Bedarf abgerufen werden können. Das reicht für die aus, die das Genre kennen und bewahrt uns davor den Rahmen zu sprengen.
Was soll die Engine können? bzw. Was soll die Engine jetzt als Nächstes können?
Die Engine soll überall, wo es möglich ist, erst dann Informationen (Variablen, Scripte) in den Speicher laden, wenn sie gebraucht werden und diese sofort wieder aus dem Speicher befördern, wenn sie erstmal nichtmehr gebraucht erden. Dies soll die nötige Rechenleistung auf ein machbares Minimum reduzieren und so eine gute Performance gewährleisten. Ein persönlich favorisierter Nebeneffekt davon ist für mich, dass durch die dafür notwendige Code-Organisation einen angenehm organisierten Resource-Tree zur Folge hat. Soweit die Theorie. Ein geignetes Beispiel liefere ich im Abschnitt "Was ich bereits gemacht habe", direkt hierunter. Anfängerproblematik hier: Meine Kenntniss von Variablen (vornehmlich Arrays) wurde zwar durch den unschätzbar talentierten und hilfsbereiten Husi schon vertieft. Ich hätte jetzt aber noch keine praktische Vorstellung davon, wie bzw. wo ich Variablen optimalerweise platzieren sollte um sie, in Bezug auf die oben angepeilte Rechenleistungs-Effizienz, sowohl nur bei Bedarf in den Speicher laden lassen zu müssen und es gleichzeitig zu ermöglichen bestimmte Variablen dieser Datenbanken dauerhaft zu verändern. Ein Beispiel wäre hier ein Script (Script nur weil ich mir das gerade so vorstelle), dass als Speicher für die aktuellen Werte eines Kämpfers funktioniert, welche im einfachsten Fall beim aufleveln des Kämpfers eine dauerhafte Erhöhung des Values der betreffenden Variable (bspw. Stärke) zur Folge hat. Es müsste also das Script mit den Kämpferwerten gecalled werden, dann die Änderungen vorgenommen werden, das "geupdatete" Script gespeichert werden und dann wieder bis zum nächsten Gebrauch aus dem Speicher entfernt werden. Ich weiß ehrlich gesagt noch nichtmal, ob das geht. Ich könnte mir auch vorstellen, dass die Variablen im Script zwar jedes Mal wie gewollt verändert werden, aber beim nächsten callen des Scripts nur die Ausgangspunkt-Version des Scripts gerufen wird, wodurch die gewünschte Funktion ausbleiben würde.
Was ich bereits gemacht habe: Das Spiel hat momentan drei Räume, jeder Raum ist ein Platzhalter für einen Aspekt des Spiels(Ein Hauptmenü, eine lokale Map, eine Battlemap). So kann ich in voneinander getrennten Departments arbeiten und testen, was echt angenehm ist. Im Ressource-Tree habe ich bereits für jeden Raumtyp (Händlermenü, Spielermenü, Hauptmenü, Lokale Map, Weltkarte, usw.) einen Raum angelegt. Ein persistentes Objekt, meine Engine, wird zu Beginn des Spiels kreiert und kontrolliert und verwaltet allen Code. So ist es zum Beispiel möglich mit F1 bis F3 direkt zu den entsprechenden Räumen zu springen um den neuesten Code zu testen. Das persistente Objekt beinhaltet ein Script indem durch eine Kombination aus Array und Enumerator (Finite-State-Machine) der aktuelle Raum erkannt und dem diesem Raum zugeordneten Steuerungstyp (Menu, Map) entsprechend entweder das Script zur Bewegung der Spielfigur oder die Menüsteuerung geladen wird. Das funktioniert soweit und stellt das im vorigen Beispiel angekündigte Beispiel meiner Vorstellung von effizienter Code-Organisation dar. Im dritten Raum, der Battlemap, möchte ich nun beginnen, das grundlegende, genretypische Kamfsystem zu entwickeln. Anfängrproblematik hier: Bis jetzt werden die sechs Kampfteilnehmer-Objekte einfach durch die Raumoptionen kreiert. Im fertigen Zustand muss das Spiel aber zu Kampfbeginn sowohl aus den aktuellen Einstellungen des Gruppenmenüs des Spielers die richtigen Kämpferobjekte kreiieren und platzieren, als auch zufallsbasiert einen der diesem Raum/ dieser Map zugeteilten Gegnertrupps kreieren und platzieren. Meine ganz konkrete Frage hierzu: Sollte ich zuerst die Datenbank bzw. die Datenbanken entwickeln, die es dem Battlecontrol-Objekt ermöglichen selbstständig die richtigen Kämpfer-Objekte zu platzieren, oder das erstmal ruhen lassen und daran arbeiten, dass die Geschwindigkeitsvariablen der existierenden Kämpferobjekte vom Battlecontrol-Objekt erkannt, verglichen und daraus eine Zugreihenfolge erstellt wird, nach welcher die Kämpfer ihren Zug bekommen?
Ich hoffe meine Diskussionserläuterung war für ihre Länge ganz angenehm, vielleicht sogar interessant zu lesen und freue mich auf den Austausch mit euch. Mehr zu meinen Features und Mechanics gibts wie angedeutet im Konzeptthread, den ich noch erstellen werde.
Lieben Gruß,
Ben
EDIT: Ich hoffe das meine Erläuterungen jetzt nicht zu sehr ins technische für dieses Forum gehen. Nochmal: Es geht um darum, was sinnvoll wäre als nächstes zu tun. Nicht wie ich das machen soll!
Nochmals lieben Gruß,
Ben
TAOTS: The Art of the Sword (AT) aka The Dream
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Riku_no_Sogen ()