Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Sacaldur

Community-Fossil

  • »Sacaldur« ist der Autor dieses Themas

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

1

10.10.2012, 01:30

[Vorstellung] Action Adventure [WiP]

Begrüßung
Hallo liebe Forenmitglieder,

Vorgeplänkel des Vorgeplänkels (kann ausgelassen werden)
Bevor es mit der eigentlichen Vorstellung meines Projekts losgeht, hier erstmal eine kleine Vorgeschichte:
Wie jeder Programmierer hatte natürlich auch ich genug Projekte, die eigentlich viel zu hoch angesetzt waren oder aus anderen Gründen irgendwann keine größere Beachtung meinerseits erhielten. Eins war ein Rollenspiel im Stile der guten alten (SNES-)Rollenspiele, damals noch mit Blitz Basic. Zusätzlich dazu, dass es an und für sich viel zu hoch gegriffen war, hatte ich nicht einen einzigen Fetzen Story/Handlung oder besondere Gameplay-Elemente, die ich umgesetzt wissen wollte, nur dass es eben das Beste aus allem enthalten soll. Lediglich ein paar technische Besonderheiten hatte ich mir bereits ins Auge gefasst: die Kollisionsprüfung soll über eine weitere Ebene mit eigenem Tileset durchgeführt werden und die Prüfung an sich somit Pixelgenau werden - mit dem "Schatten" der Spielfigur, nicht mit der eigentlichen Grafik selbst.
Die Dinge, die ich dabei bereits realisieren konnte, waren das Darstellen der Map und des Spielers, Bewegung, Kollisionsprüfung mit der Map und die Teleportation auf eine andere Map.

Vorgeplänkel
Lernresistent wie immer habe ich, ein paar Jahre nachdem ich dieses Projekt nicht mehr angeschaut hatte, mal wieder mit einem Rollenspiel in Python angefangen. Wann genau das war, kann ich nicht mehr sagen, der älteste automatisch generierte Kommentar weist auf den 01.09.2009. Zu beachten ist dabei, dass Pausen über Monate keine Seltenheit waren. Selbstverständlich hatte ich auch für dieses Spiel keine besonderen Ideen. Zumindest aus der bis dahin gesammelten Erfahrung immer nur von "etwas, was irgendwann mal sowas wie ein Rollenspiel werden soll" gesprochen/geschrieben.
Bis letztes Jahr habe ich auch noch mit dem Ziel, ein Rollenspiel zu entwickeln, an dem Projekt weitergearbeitet, bis ich mir im Groben folgende Überlegung gemacht habe: Man beginnt auf einem bestimmten Level und kommt mit den Gegnern relativ einfach klar. Im Laufe des Spiels werden die Gegner stärker, weshalb man selbst gezwungenermaßen stärker werden muss. Wenn man also die Gegner auf dem gleichen Niveau (leicht bis schwer) hält, ohne dass für den Spieler die Notwendigkeit des Levelns besteht, dann wäre das Spiel einfacher in der Implementierung, im Balancing, im Gameplay und schon schwenkte ich von einem Rollenspiel auf ein Action Adventure um.

Allgemeines
Der Großteil der Ideen, die ich für das Projekt bereits habe, bezieht sich auf die technische Umsetzung. Diese sollen später das Skripten vereinfachen, wie genau wird an den entsprechenden Stellen weiter ausgeführt.
Ich habe bisher noch relativ wenig Vorstellungen für das Gameplay und die Handlung, allerdings orientiere ich mich teilweise auch an Programmen wie dem RPG Maker. Sollte ich in ferner Zukunft der Ansicht sein, dass das Grundgerüst soweit steht, einen Editor aber dafür keinen Plan für das Gameplay haben, könnte ich den Editor immernoch anderen zur Verfügung stellen. Sollte ich es jedoch schaffen, ein Spiel zusammenzubasteln, würde ich dennoch das von mir erstellte Programm auf die Mennschheit loslassen! muahahahahahahahahaaa...
Aufgrund des Entwicklungsstandes (und mangels hübscher Grafiken), kann ich abgesehen von dem beschreibenden Text nichts vorzeigen.


Game Design

Aesthetics (siehe MDA)
Im Wesentlichen sollen für dieses Spiel Exploration und Challenging im Vordergrund stehen.
  • Exploration/Discovery
    • die Umgebung und die sich darin aufhaltenden NPCs
    • der weiterführende Weg (sobald man einen neuen Gegenstand gefunden hat)
    • diverse Geheimnisse
  • Challenging
    • zu lösende Rätsel
    • Hindernisse
    • Bosskämpfe
User Interface
Das HUD, also das Interface, welches der Spieler im normalen Spielverlauf und nicht in einem separaten Menü sieht, enthält die Anzeige der Lebensenergie in Form einer abzählbaren Stückzahl (vgl. Herzen in Zelda), die Menge an Geld sowie den ausgerüsteten Gegenstand mit der zugehörigen Stückzahl, sofern notwendig (Bomben, Pfeile, ...). Das HUD soll somit nur einen sehr geringen Teil des Bildschirms einnehmen.
Dialoge werden durch einen einfachen Hintergrund und Rahmen vom Spielgeschehen abgehoben. Der Text kann einfache Formatierungen, wie Hervorhebungen von wichtigen Begriffen oder abweichende Einblendungsgeschwindigkeiten, und Grafiken enthalten. Dialoge unterbrechen den normalen Spielverlauf, Blenden dieses und somit auch das HUD aber nicht aus.
Im Ingame-Menü kann der Spieler seine Gegenstände sehen und ausrüsten und Informationen über den groben Fortschritt im Spiel erhalten.


Technische Umsetzung

Gebiete und Maps
Das Spiel besteht aus einer Vielzahl von Gebieten, die hierarchisch angeordnet sind. Sollten entsprechende Informationen vorhanden sein (Breite, Höhe, Tileset, Mapdaten, ... - eine Map im klassischen Sinne), kann ein Gebiet auch betreten werden (eine Map). Die Besonderheit im Gegensatz zu Maps in anderen Spielen ist, dass die hierarchische Anordnung nicht nur der Übersicht beim Erstellen dient, sondern auch zur Laufzeit eine Relevanz besitzt. Genaueres dazu unter "Variablen" und unter "Skripte". Der Name einer Map leitet sich von seiner Position in der Hierarchie ab: Das oberste Gebiet wird im Spiel über " angesprochen, ein darunter liegendes Gebiet könnte mit /test und ein darunter liegendes mit /test/hello_world angesprochen werden.
Variablen
Jedem Gebiet können Variablen zugewiesen werden. Diese Variablen sind dann in diesem Gebiet und in allen darunter liegenden Gebieten erreichbar. Wenn eins der unterliegenden Gebiete eine Variable mit dem gleichen Namen definiert, überschreibt es die übergeordnete Variable. Änderungen werden somit nicht an der übergeordneten Variable durchgeführt, sondern an der untergeordneten. Wenn man das Gebiet wieder verlässt, ist wieder die unveränderte übergeordnete Variable erreichbar. Dieser Mechanismus lässt sich ggf. durch das Verwenden des vollqualifizierten Namens umgehen. Dieser setzt sich aus dem Mapnamen, einem Punkt und dem Variablennamen zusammen (Beispiel: /test.enemie_count).
Vordefinierte Variablen
Es wird Namen für Variablen geben, welche eine besondere Bedeutung haben werden. Für Gebiete bzw. Maps sind bisher keine vordefinierten Variablen vorhanden.
Skripte
Einerseits sollen Skripte sich möglichst performant ausführen lassen, andererseits sollen sie sich auch von nicht-Programmierern einfach erstellen lassen. Einfach Code einer beliebigen Programmiersprache zu nehmen würde bei der Erstellung problematischer sein und eine eigene "Skriptsprache" bzw. Bytecode würde bei der Umsetzung Probleme bereiten. Der derzeitige Stand ist, dass ich zur Laufzeit normalen Python-Code ausführe, beim Bearbeiten aber einen grafischen Editor anbieten werde. So generierte Skripte müssten vor der Ausführung nur noch in Python-Code umgewandelt werden.
Die Hierarchie der Maps soll sich auch auf die Skripte auswirken: Je nach Position in der Hierarchie überschreiben sie sich und können ggf. per vollqualifiziertem Namen angesprochen werden.
Events
Folgenden Events einer Map können Skripte zugeordnet werden:
  • load - beim Laden der Map (synchrone Ausführung) (nicht implementiert)
  • enter - beim Betreten der Map (nicht implementiert)
  • leave - beim Verlassen der Map (nicht implementiert)
  • unload - beim Entladen der Map (synchrone Ausführung) (nicht implementiert)
Hintergrundmusik
Bisher ist noch nichts in Richtung Musik oder Sound implementiert.
Die Hintergrundmusik soll ebenfalls von dem Konzept der Gebiete profitieren. Wenn für ein Gebiet eine Hintergrundmusik definiert wurde, soll diese automatisch mit den angegebenen Parametern abgespielt werden. Betritt man ein Gebiet, welches eine eigene Definition für die Hintergrundmusik besitzt, soll die vorherige automatisch ausgeblendet und die neue eingeblendet werden. Geht man in ein unter- oder übergeordnetes Gebiet mit der gleichen Definition, soll die Hintergrundmusik weiterlaufen.

Tilesets
Bisher bestehen Tilesets aus einem beliebig großem Bild, welches den nicht-animierten Tiles und weiteren Bildern, die die animierten Tiles beinhalten. Zwischenzeitlich kamen mir Gedanken, in wie weit Tilesets noch notwendig sind, wenn der großteil über Mapobjekte geregelt werden sollte. Deshalb werde ich auf diese vorerst nicht weiter eingehen.

Mapobjekte
Mapobjekte sind alle Objekte, abgesehen von der statischen Umgebung, die sich auf einer Map befinden können. Dazu gehören Gegenstände, Charaktere, Monster und Trigger. Die Objekte zeichnen sich durch einen eindeutigen Namen, Variablen und Skripte aus. Für jede mögliche Aktion eines Charakters kann ein Skript definiert werden, welches Skript ausgeführt werden soll.
Vererbung
Vergleichbar mit den Gebieten, jedoch unabhängig von diesen, gibt es auch für die Mapobjekte eine Vererbungs-Hierarchie. Es werden jedoch keine Vorlagen definiert, von denen dann Instanzen erzeugt werden können (siehe klassenbasierte OOP, wie in C#, Java, Python, ...), sondern die so definierten Mapobjekte selbst sind bereits verwendbar (siehe prototypbasierte OOP wie in JavaScript).
Variablen
Die Variablen sind vergleichbar mit den Variablen der Gebiete, nur setzt sich der Name aus dem Namen des Objekts und dem Variablennamen zusammen (#hero.health) und Jedes Mapobjekt besitzt seine eigenen Variablen, auch wenn sie geerbt wurden.
Vordefinierte Variablen
Für Mapobjekte gibt es bereits einige Variablen, die eine besondere Bedeutung haben. Nachfolgend eine Übersicht über entsprechende Namen:
  • width - Breite eines Mapobjekts
  • height - Höhe eines Mapobjekts
  • passable - Bestimmt, ob der Spieler über dieses Objekt laufen kann
  • charset - das Charset eines Mapobjekts
  • faceDir - die Richtung, in die der das Mapobjekt schaut
  • name - der Name, der in einem Chat angezeigt wird (später die ID des Namens um Übersetzungen zu ermöglichen)
  • visible - Bestimmt, ob das Mapobjekt sichtbar ist
  • movementSpeed - Bestimmt die Bewegungsgeschwindigkeit in Tiles je Sekunde
  • pushable - Bestimmt, ob das Mapobjekt von anderen verschoben werden kann
  • pushDelay - Bestimmt die Dauer in Sekunden, die das Mapobjekt gedrückt werden muss, bevor es sich verschiebt (wenn nicht angegeben, wird die Gebietsvariable verwendet)
  • tileBasedPush - Bestimmt, ob das Verschieben tilebasiert erfolgen soll
  • pushDirections - wenn angegeben werden damit die Richtungen eingeschränkt, in die ein Block geschoben werden kann
  • pushOnce - bestimmt, ob nur ein einmaliges Verschieben möglich ist oder ob es für die Anzahl keine Einschränkung gibt
  • liftable - bestimmt, ob das Objekt angehoben werden kann
  • rotateOnActivate - bestimmt, ob der Gegenstand sich zum ansprechenden Mapobjekt drehen soll, wenn es "angesprochen" wird
Skripte
Einem Mapobjekt können unter bestimmten Namen Skripte zugewiesen werden, welche aus anderen Skripten heraus oder vom Spiel unter bestimmten Umständen (Events) aufgerufen werden können. Ein so hinzugefügtes Skript wird erst im Verzeichnis der Objektdefinitionen gesucht, vom entsprechenden Mapobjekt aufwärts, und sollte es nicht gefunden werden, wird es zur Laufzeit im aktuellen Gebiet und den darüber liegenden gesucht.
Folgende Events werden automatisch unter bestimmten Umständen ausgeführt:
  • activate - wenn passable gesetzt ist, wird es ausgeführt, sobald der Spieler das Mapobjekt betritt (Trigger), ansonsten wenn er es aktiviert (z. B. einen NPC ansprechen).
  • pushFinished - wird aufgerufen, wenn das Verschieben des Mapobjekts beendet wurde
Lokale Mapobjekte
Zusätzlich zu den so definierten Mapobjekten können von diesen Instanzen (lokale Mapobjekte) angelegt werden, wobei zwischen benannten und anonymen unterschieden wird. Instanzen sind benannt, wenn sie einen eindeutigen Namen besitzen. Änderungen an den Werten der Variablen werden dauerhaft gespeichert, während die Werte von anonymen Instanzen beim Verlassen der Map verworfen werden. Den Instanzen können mit Hilfe definierbarer Parameter abweichende Werte zugewiesen werden. Die Parameter werden nicht vererbt und müssen ggf. erneut definiert werden. Wenn ein Parameter nicht angegeben wird, wird der Wert der Variable nicht angepasst, d. h., dass die Parameter immer optional sind. Wenn einem Parameternamen ein Bindestrich vorangestellt ist, wird der Name als Skriptname interpretiert. So können den events abweichende Skripte zugeordnet werden.

Charsets
Ein Charset beinhaltet alle Grafiken, die für die Darstellung eines Mapobjekts erforderlich sind. Die Animationen werden in Bildern gespeichert, die für jede Bewegungsrichtung alle Frames beinhaltet. Die Anzahl der Bewegungsrichtungen, der Frames und der Animationsgeschwindigkeit kann für jede Animation unterschiedlich eingestellt werden. für die Bewegungsrichtungen sind die Zahlen 1 (nur runter), 4 und 8 zulässig.

Speichern und Laden
Angedacht ist, dass beim Speichern eines Spielstands alle verwalteten Variablen gespeichert und beim Laden ausgelesen werden. Eine einfache (De-)Serialisierung ist nicht angedacht, da auf diese Art mehr Informationen gespeichert werden würden, als eigentlich notwendig und das Format der gespeicherten Daten wäre zu stark an die Implementierung gebunden.

Implementierte und ausstehende Funktionalität
Nicht ganz alles von den Ideen, die ich bisher beschrieben habe, sind auch bereits so im Spiel vorhanden. Auch die bereits Implementierten Features sind teilweise noch nicht vollständig.
Implementiert:
  • Darstellung (Map, Mapobjekte)
  • Bewegung (durch Benutzereingaben, durch Skripte)
  • Kollisionserkennung (mit Umgebung und Mapobjekten)
  • Skriptausführung
  • Teleportation zu anderen Maps
  • Dialoge (Blockierung von Spielerbewegungen)
  • Variablen (Laden, lesend und schreibend aus Skripten daraufzugreifen)
Ausstehend:
  • Fading
  • Inventar und Items
  • Kampfsystem
  • weitere GUI-Elemente
  • diverse Menüs
  • Konfiguration
  • Gegner
  • unregelmäßige Bewegungen (beispielsweise hüpfende Bewegungen)
  • zusammengesetzte Monster (die nicht nur aus einem Bild bestehen)
  • Laden und Speichern von Spielständen
  • ...
Das nächste Implementierungsziel ist das Inventar und die dafür erforderlichen Items.

Abschließende Worte
Viele der genannten Dinge sind noch in Entwicklung und Änderungen sind i. d. R. noch möglich. Mich würde interessieren, ob offensichtliche Fehler in meinen bisherigen Gedanken erkennbar sind.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Dieser Beitrag wurde bereits 12 mal editiert, zuletzt von »Sacaldur« (30.03.2013, 15:25) aus folgendem Grund: Umformulierung, Ausbesserung kleinerer Fehler Abschnitt Game Design hinzugefügt


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

10.10.2012, 21:10

Hört sich gut an. Ich glaube so ein Projekt hat fast jeder von uns. Bei mir handelt es sich auch um ein Rollenspiel. Das war anfangs immer mein Traum. Mittlerweile ist er es eher weniger, wobei die Lust dazu immer mal wieder kommt;) Habe die erste Version davon auch mit BlitzBasic begonnen.
Fehler oder von mir aus auch fehlerhafte Ideen und Vorgänge sind schwierig zu finden. So wie du es schreibst hört es sich alles plausibel an. Vom lesen deines Textes bin ich aber noch kein Profi deines Systems und daher kann ich da wenig zu sagen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Sacaldur

Community-Fossil

  • »Sacaldur« ist der Autor dieses Themas

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

3

11.10.2012, 02:09

Ich glaube so ein Projekt hat fast jeder von uns.

Ich wage sogar zu behaupten, dass das so sein sollte (auch wenn sich nicht jeder an die Umsetzung wagt oder diese vorstellt)
Aber da ich fest an die Fertigstellung meines Projekts glaube, werde ich auch garantiert fertig! ;D (wie so ziemlich jeder andere auch...)

Fehler oder von mir aus auch fehlerhafte Ideen und Vorgänge sind schwierig zu finden.

Ja, da scheint leider etwas Wahres dran zu sein und ich werde die größten Probleme wohl erst bei der Implementierung oder der tatsächlichen Verwendung selbst feststellen =/
Es hätte ja auch sein können, dass sich bereits jemand ähnliche Gedanken gemacht hatte...

Was mir gerade auffällt: ich hatte nicht mal explizit geschrieben, dass es ein 2D Spiel werden soll und dass ich derzeit die 2D Zelda Teile als Vorbild nehme (sowie in gewissem Maße auch SNES Rollenspiele)


Nochetwas bezüglich meines weiteren Vorgehens: ich habe mir diverse größeren Features notiert, die ich nach und nach angehen will.
Passend dazu habe ich auch "Minispiele" vorgemerkt, die diese neuen Features benötigen, die ich im Anschluss daran realisieren will.
Das erste war eine primitive Aufgabe für den Spieler:
Er muss mit verschiedenen Charakteren sprechen, um so an die, von einem der Charaktere gewünschte, "Parole" zu kommen.
Dies sollte lediglich dem Test der Variablen dienen.

Der Sinn hinter diesen Spielchen ist, dass ich gewisse Meilensteine definiert habe, deren erreichen ich klar und deutlich sehen (und spielen) kann.
Bei Interesse kann ich diese dann auch hier zur Verfügung stellen, allerdings ist es gerade bei dem ersten so, dass man eigentlich fast gar nichts machen kann und es aus spielerischer Sicht keinen Sinn macht, sich dies anzuschauen.
(Die noch folgenden könnten dann schon etwas mehr zu bieten haben.)


Und abschließend noch eine Anmerkung zur aktuellen Entwicklung:
Ich mache mir im Moment noch die letzten Überlegungen zu den Charakterdefinitionen, bevor ich die Implementierung dieser abschließe.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

4

11.10.2012, 10:40

Ich weiß nicht warum, aber das mit 2D hatte ich irgendwie so verstanden. Stand wirklich nicht in deinem Text. Mein Traumprojekt war immer ein Mix aus alten Zelda und alten Final Fantasy Teilen. Vielleicht bringt mich dein Projekt ja mal wieder dazu, sowas zu basteln;)
Wenn du was spielbares hast, dann immer her damit. Auch wenn nicht viel passiert oder zu sehen ist, so kann man vor allem schon am Anfang Unstimmigkeiten beseitigen. Steuerung, Kollisionsverhalten und Interaktionsmöglichkeiten sind ja an sich Sachen die meist zu Anfang umgesetzt werden. Und vor allen Dingen müssen diese Punkte wirklich Rund laufen damit der Spielfluss nicht gestört wird. Bei deinem Meilenstein wäre ja Zusätzlich noch ein Dialogsystem sowie möglicherweise sogar ein Questsystem dabei. Dass mit den Quests ging aus deinem Post nicht genau hervor, aber es hörte sich für mich so an. Ist vielleicht sinnvoll wenn du dazu Rückmeldungen bekommst und vielleicht direkt zu beginn Verbesserungen vornehmen kannst, falls nötig.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Sacaldur

Community-Fossil

  • »Sacaldur« ist der Autor dieses Themas

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

5

11.10.2012, 13:11

Es wurde wohl durch den Bezug auf die SNES-Rollenspiele impliziert, aber ich wollte nochmal verdeutlichen, dass es immernoch der Fall ist. ;)

Mich würde an deinem Mix interessieren, welche Teile du aus Final Fantasy übernehmen wolltest.
Wenn ich mir überlege, was ich brauchen könnte oder wie etwas umgesetzt werden könnte, suche ich mir diverse Situationen anderer Spiele und überlege, wie es dort umgesetzt worden ist bzw. ob mein Ansatz dies mit abdeckt.

Ich denke, ich werde den "Variablentest" demnächst zur Verfügung stellen, vorher will ich die bisherigen Testgrafiken aufwerten/austauschen.
Allerdings muss ich dazu sagen, dass ein paar Dinge noch nicht voll ausgereift sind (die Dialoge werden nicht ganz angezeigt, wenn sie zu lang sind) und andere zwar vorhanden, aber völlig ungenutzt sind.
Vorweg will ich schonmal darauf hinweisen, dass man Python 3.x benötigt, damit das Spiel auch fehlerfrei läuft.
Mit Python 2.x dürfte es ebenfalls laufen, es gibt aber diverse Bugs. (Man hat unten und rechts teilweise einen schwarzen Streifen und nicht die Map, die Kollisionsprüfung dürfte, wenn ich es richtig in Erinnerung habe, ein paar Probleme haben.)

Bezüglich "wirklich rund laufen":
Bei der Kollisionsprüfung hatte ich bereits ein paar Probleme im Zusammenhang mit dem Scrollen des sichtbaren Ausschnitts der Map (bei Bewegungen nach links oder oben "zitterte" das Bild ein wenig).
Allerdings dürfte dies schon längst erledigt sein und in dem Fall aufgrund der Größe der Map nicht auftreten können.
Dann gibt es noch ein kleines Problemchen mit der Drehung der Charaktere, wenn man sie anspricht, denn sie drehen sich nicht richtig zum Spieler.

Ein Questsystem soll es so, wie es in den meisten modernen Spielen zu finden ist, nicht geben.
Ich finde Systeme, bei denen man seine aktuelle Mission, die Erfolgsbedingung ("Töte 10 Schleime") und die Belohnung ("10 Gold und 5 Erfahrungspunkte") einerseits nicht gut, andererseits finde ich nicht, dass diese wirklich notwendig sind.
Sie bieten zwar den Vorteil, dass der Spieler immer sehen kann, was er als nächstes zu tun hat, das ließe sich aber auch anders lösen. (In "Zelda: A Link to the Past" hatte man dafür meines Wissens die Hellseherin, in "Ocarina of Time" konnte man meines Wissens seine Fee fragen.)
Wie schon angedeutet gibt es bereits grundlagen für die Dialoge.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

6

11.10.2012, 16:00

Ich wollte das Kampfsystem der Final Fantasy Spiele übernehmen. Im Prinzip sollte es rundenbasiert laufen und es sollten auch mehrere Leute in einem Kampf spielbar sein. Zusätzlich hatte ich mir mal überlegt die Kämpfer in bestimmte Kategorien einzuteilen. So sollte zwischen Fern- und Nahkämpfer unterschieden werden. Das Kampffeld sollte nun aus mehreren Reihen bestehen. Man kann pro Zug ein Feld vor oder zurück gehen, oder aber auch eine Fähigkeit (Angriff) ausführen. Je nach Position und Reichweite zum Gegner sollte dann der Schaden errechnet werden. Von Zelda wollte ich die Rätsel übernehmen. Anfänglich wollte ich auch mal das Kampfsystem übernehmen, habe mich dann aber für ein rundenbasiertes entschieden. Naja ist dann ja nie wirklich viel raus geworden;)
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Sacaldur

Community-Fossil

  • »Sacaldur« ist der Autor dieses Themas

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

7

12.10.2012, 00:06

und heute wird mal wieder ein Tag, an dem ich viel zu lange wach bleiben werde - ich habe einen neuen Akku für meinen Laptop, den ich erstmal richtig leer bekommen will, bevor ich ihn dann über die Nacht wieder voll auflade - aber das nur so am Rande


Im Anhang befindet sich dann der Variablentest, wie bereits erwähnt sollte man Python 3.x verwenden
für die Charaktere wird immernoch die Testgrafik verwendet... =/
bei mir läuft die Version ohne Probleme (wenn die "launcher.py" aufgerufen wird), allerdings verlangt Murphys Gesetz ja geradezu, dass es bei anderen nicht funktioniert! ^^
(es ist schon ein wenig doof, wenn man eigentlich darauf brennt, ein wenig am Projekt weiter zu machen, aber aufgrund diverser anderer Aktivitäten in seiner Freizeit nicht die Gelegenheit dazu findet... x.x)


das von dir beschriebene klingt schon ganz nett, aber es gibt auch schon die einen oder anderen Spiele, die ansatzweise das gleiche (Position im Kampf ist relevant) bieten, wenn auch nicht genau so
allerdings denke ich nicht, dass man sowas sehr gut mit den Rätseln aus den Zelda-Teilen kombinieren kann, da dort die Rätsel teilweise mit dem Kampfsystem "verknüpft" sind (man muss beispielsweise mit einer seiner Waffen Schalter betätigen)

rundenbasierte Kampfsysteme haben in der Regel die Eigenschaft an sich, dass man strategischer vorgehen kann oder soll
meines Erachtens nach passt ein solches Kampfsystem eher weniger zu einem (Action) Adventure, als zu einem Rollenspiel
wobei ein Rollenspiel in dem Fall quasi ein Adventure mit ein paar mehr Elementen (denen, die das Rollenspiel ausmachen) ist


am aktuellen Stand der Entwicklung hat sich bisher nichts verändert
»Sacaldur« hat folgende Datei angehängt:
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

8

12.10.2012, 09:15

Es geht ja auch nicht immer darum das Rad neu zu erfinden. Ich hatte mir da ein paar Ideen ausgedacht und alles mal aufgeschrieben/aufgemalt und weiter ausgearbeitet. Das war eben ja auch nur eine kurze Zusammenfassung. Die Rätsel sollte eher an Zelda angelehnt sein, als direkt übernommen. Das Prinzip der Schalter wäre so zum Beispiel nicht vorgekommen. Und ich stimme dir zu, dass Action Adventure und rundenbasierte Rollenspiele sich nicht unbedingt vereinen lassen, aber ganz am Anfang war noch ein Spiel wie Zelda geplant, was sich dann mit der Zeit immer mehr zu einer Art Final Fantasy mit Rätselfaktor entwickelt hat. Aber viele Sachen davon waren noch Konzept und gar nicht umgesetzt.
Aber an sich geht es ja hier auch nicht um meine Ideen die ich mal hatte sondern um dein Spiel:) Werde es mir gleich mal laden und anspielen. Gibt es einen Grund warum du Python Dateien hochlädst? Ich selbst habe zwar eine Python Installation, aber es gibt sicherlich einige User hier, welche diese nicht haben. Wenn ich erst Python installieren müsste um ein Spiel zu testen würde mich das abschrecken. Vielleicht kennst du ja PyToExe. Das wäre unter Umständen eine Möglichkeit das Spiel einer breiteren Masse vorzustellen. Wäre vor allem für spätere Versionen wichtig, wenn es wirklich einiges zu testen gibt. Nur als Vorschlag. So ich spiel dann erst mal;)
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Sacaldur

Community-Fossil

  • »Sacaldur« ist der Autor dieses Themas

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

9

12.10.2012, 09:43

es gibt ja noch die einen oder anderen Dinge, die in Kombination mit der Position im Kampfgeschehen noch geklärt werden müssen:
gibt es 2 statische "Kampfseiten" (Spieler und Feind), mit einer festen (oder ggf. nur nach hinten begrenzten) breite oder ist der Übergang zwischen den Spielerpositionen fließend?
wie viele Felder kann man sich auf einmal bewegen?
kann man gleichzeitig noch angreifen?
kann man auf die Art evtl. auch fliehen?
gibt es verschiedene Geschwindigkeiten?

ich denke, bei solchen Dingen ist vor Allem die Implementierung entscheidend darüber, ob es sich gut spielen lässt oder nicht


Aber an sich geht es ja hier auch nicht um meine Ideen die ich mal hatte sondern um dein Spiel

nicht wenn ich deine Idee klaue! ;D
warum Python-Dateien:
weil es einerseits einfacher ist (und weil dann die Ausrede "von der Beschreibung alleine her kann ich noch keine Designschwächen finden" nicht mehr gültig ist, natürlich! ;) )
Py2Exe:
davon habe ich schon gehört/gelesen, grundsätzlich hätte ich nichts dagegen, etwas derartiges einzusetzen, allerdings war mein letzter Stand, dass es sowas noch nicht für Python 3.x gibt (was eigentlich auch wieder veraltet sein könnte)
es war in gewisser Weise also einfach nur Faulheit, weshalb ich das nicht verwendet habe... :rolleyes:
aber du hast schon Recht damit, dass so eher Leute das dann auch starten werden
ich werde demnächst auch danach nochmal schauen
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

10

12.10.2012, 10:02

Ich hatte es im groben so geplant, dass das Feld wie ein Schachfeld aufgebaut ist. Ich bin mir nicht mehr 100% sicher, aber ich glaube es waren 5 Positionen (Reihen) geplant. Kann auch sein dass es nur 3 waren. Man hat pro Runde eine gewisse Anzahl an Zugpunkten. Du kannst nun selbst entscheiden ob du diese Punkte in eine Bewegung, einen Angriff/Zauber, oder aber in ein Item steckst und dich zum Beispiel heilst. Je nach Charakter und Fortschritt im Spiel sollte die Anzahl der "Zugpunkte" variieren. Die Zugpunkte an sich waren erst mal nur ein Begriff für mich. Im Spiel sollte das so direkt nicht vorkommen sondern eher mit Zugzeit umschrieben werden. Eine Aktion benötigt ein gewisses maß an Zeit und man hat pro Zug halt nur eine bestimmte Zeit die man verbrauchen kann. Das ganze war hinterher soweit, dass ich es mit Active Time Battle umsetzen wollte, wobei jede Aktion dann wirkliche Zeit verbraucht. Das fande ich schöner, da mir ATB einerseits gut gefällt und man so von diesem "verbrauche Zugpunkte" weg kommt. Versetzen der Charaktere sollte Sinn machen, da ein Nahkämpfer zum Beispiel nur angreifen kann, wenn ein Gegner unmittelbar vor ihm steht. Fernkämpfer haben da eine größere Reichweite, wobei die Trefferwahrscheinlichkeit und Stärke des Angriffs von der Reichweite und dem Abstand zum Gegner abhängt.
Außer Nah und Fernkampf war auch ein Mittelding geplant. Eine Art Speerkämpfer, welcher auf mittlerer Distanz kämpft. Die Charaktere sollten auch nicht unbedingt fest in Ihrer Rolle stecken, sindern je nach Ausrüstung in der Rolle agieren. Dabei war geplant, dass man die einzelnen Waffen aufskillt. Jemand der viel mit Schwert kämpft, macht macht mehr Schaden mit dem Schwert. Jemand der viel mit dem Bogen kämpft macht mehr Schaden mit dem Bogen. So ist es ja mittlerweile auch in den meisten Rollenspielen umgesetzt.
Im Spiel selbst spielt man nur einen Charakter, wobei sich einem zwischendurch Söldner oder andere Charaktere anschließen. Diese kämpfen dann mit einem zusammen. Man sollte hierfür eine Kampfaufstellung festlegen können. Das heißt, man sieht das Schlachtfeld und kann seine Figuren für einen Kampf platzieren. Kommt man in einen Kampf wird mit diesen Positionen begonnen. Zusätzlich kann man in einen Hinterhalt geraten (wie bei den FF Spielen eigentlich auch), wobei man sich dann nicht in der Kampfaufstellung befindet, sondern beliebig verteilt ist. So hat man also einen wirklichen Nachteil.
Eine sehr frühe Version des Kampfsystems habe ich mal auf Papier mit einem Freund simuliert. Ist halt alles schon eine gute Zeit her und es war noch eine sehr frühe Version. vom Prinzip hat es mir gefallen, wobei man natürlich gucken muss wie es sich in das Spiel integriert. Wenn du dir davon was abgucken kannst/willst würds mich freuen meine Ideen hinterher doch noch in einem Spiel zu sehen;)

Zu Python. Hab gesehen, dass ich aktuell Python 2.7 drauf habe. Hatte das aus Kompabilitätsgründen installiert. Python 3 wurde noch nicht von den Modulen unterstützt die ich nutzen wollte. Hab zwar grad Python 3.3 geladen und installiert, jedoch fehlt mir hierfür PyGame. Da geht der Spaß wieder los. Jetzt fällt mir auch wieder ein, warum ich aufgehört habe Pyton zu benutzen. Der Stress mit den Versionen ist echt übel;)
Hast recht, Py2Exe gabs mal nur für 2.x. Wie das aktuell aussieht weiß ich grad auch nicht. Werd gleich mal PyGame für 3.x laden und dann testen. Aber da sieht man dass es Sinnvoll wäre sowas wie Py2Exe zu verwenden;)
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige