Spielziel im Level-Editor festlegen

Einstiegsfragen, Mathematik, Physik, künstliche Intelligenz, Engine Design
Antworten
Dummie
Beiträge: 97
Registriert: 09.02.2004, 20:45

Spielziel im Level-Editor festlegen

Beitrag von Dummie »

Hey Leute,

ich hatte euch ja schon mal mein Projekt vorgestellt: http://zfx.info/viewtopic.php?f=10&t=4035

Jetzt ist es ja so, dass ich auch einen Level-Editor habe der auch sehr gut funktioniert. Es gibt mittlerweile sogar etwas komplexere Dinge wie Trigger, um das Spawnen von Gegnern auszulösen usw. Das eigentliche Problem ist aber jetzt, dass jedes dieser Level kein echtes Spielziel hat. Die Frage ist nun wie ich sowas gut einbauen könnte ohne das es zu kompliziert wird und ohne das die Leute zu eingeschränkt werden. Hat da jemand Ideen oder Vorschläge?

Ich hatte überlegt, dass ein Spielziel ebenfalls durch ein Objekt das platziert werden kann dargestellt wird. Jetzt könnte ich vorgegebene Ziele haben wie "Alle KI besiegen", "Trigger mit Name ___ auslösen" usw. aber irgendwie fühle ich mich da eingeschränkt. Stattdessen hatte ich die ganz wahnsinnige Idee, dass ich einige Logik Elemente erstelle, die man im Level platzieren kann. Dann könnte man eine Variable platzieren und ihr einen Namen und Wert geben. Dann könnte man eine Funktion platzieren, die eine vorgegebene interne Funktion aufruft und dies wiederum in eine platzierte Variabel speichert usw... Im Endeffekt würden dann viele Objekte einen Parameter bekommen um diese Dinge anzusteuern. Also z.B. würde ein Trigger dann einen Parameter On_Trigger_Activated bekommen und man schreibt z.B. rein "Func_1". Die Func_1 hat wiederum einen Textparameter der die interne Funktion bezeichnet, also z.B. "increment". Als Ziel wird ihr dann eine Variable angegeben und die wird dann eben erhöht. Als Gewinnbedingung könnte man dann ein Condition Element nehmen, was eben prüft ob die Variable einen gewissen Wert hat.

So hätte ich eine kleine "Programmiersprache" in das Spiel eingebaut. Allerdings glaube ich, dass ich vermutlich besser fahre, wenn ich für sowas eine Skriptsprache anbieten würde und einfach auf die vorgegebenen Ziele zurückfalle?

Ich bin echt ratlos, denn ich bin glaube dabei es zu kompliziert zu machen und das möchte ich nicht, weil es soll ja in erster Linie von den Spielern später benutzt werden. Andererseits will ich auch nicht hören, dass man damit kaum was anfangen kann... Echt schwierig.....
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4252
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Spielziel im Level-Editor festlegen

Beitrag von Chromanoid »

Ist der Leveleditor im Spiel? Vielleicht könntest Du so Logik-Blöcke einbauen, die man verkabeln muss. Z.B. ein konfigurierbarer Gegnerzähler, der bei einer bestimmten Anzahl ein Signal ausgibt. Das Signal kann man dann in eine &-Komponente weiterleiten, in die dann weitere Komponenten fließen können. Im Spiel wären die Blöcke unsichtbar, nur im Editiermodus sieht man sie. Damit kann man dann auch ganz schön so Sachen abbilden wie Spawner für Gegner. Man stellt die unsichtbare Spawnmaschine da hin wo die Gegner spawnen sollen. Damit ein Gegner spawnt, muss ein Signal in den Spawner. Das könnte dann zum Beispiel von einem Gegnerdetektor kommen, der ein Signal gibt, wenn die Anzahl aller Gegner eine Zahl unterschreitet. Ist natürlich heftig umzusetzen, macht aber vielleicht beim Editieren dann alles mehr Spaß. Ich finde die Vorstellung insgesamt sehr unterhaltsam, dass in den ganzen Themepark-MMORPGs unter der Erde eine riesige Maschinerie arbeitet, die für die "Spielmechanik" sorgt...

Code: Alles auswählen

  [Dispense 'EnemyX'↕ in range of '10m'↕]<======================<[Signal when 'Enemy'↕ count '<'↕ '10'↕] 


 [Signal when killed 'Monster'↕ count '>'↕ '10'↕]>==========>[ & ]>======>[Game 'won!'↕]
 [Signal when collected 'Coin'↕ count '>'↕ '10'↕]>==========>[ & ]
 [Signal when 'Player'↕ in range of '10m'↕]>================>[ & ]
Wenn die Blöcke dann auch noch wie coole Daniel-Düsentrieb-mäßige Maschinen aussehen, dann macht das Level editieren sicher viel Spaß. Man kann mit Bedingungen und Verknüpfungen ja ziemlich heftige Sachen bauen. Theoretisch könnte man das ganze auch noch ausbauen, indem man z.B. unzerstörbare NPCs einbaut (z.B. Hühner), die als Zähler oder Zufallsgenerator für den Spielverlauf dienen (Signal wenn umherirrendes Huhn in 1m Nähe [in einem 5x5m großen Stall], dann löse Explosionsmaschine an Position XY aus...). Als Leveldesigner muss man dann halt irgendwo einen Hühnerstall verstecken :). So ähnliche Konzepte gibts' ja auch in Minecraft oder so. Ich fänd's jedenfalls cool, wenn die Logik hinter den Levels fast Rube-Goldberg-Maschinen-artige Züge annehmen kann.

Ich weiß gar nicht wie man in Little Big Planet Levels bauen kann, aber das muss auch recht gut gelungen sein. Da kann man ja viel machen und ich glaube ganz ohne schriftliches Programmieren.
Dummie
Beiträge: 97
Registriert: 09.02.2004, 20:45

Re: Spielziel im Level-Editor festlegen

Beitrag von Dummie »

Ja, der Level-Editor ist im Spiel :) Tatsächlich gibt es ein paar Dinge die du erwähnst schon, aber es ist alles nicht ganz so intuitiv. So hat der Spawner einfach ein Textattribut und auch ein paar andere Optionen wie z.B. eine Option "active". Dann gibt es ein Trigger der ausgelöst wird, wernn der Spieler in die Nähe kommt und hier kann man dann einfach ein Objekt (name) und die Key:Value angeben. Damit könnte man dann einen Spawner aktivieren oder deaktivieren. Tatsächlich kann man damit schon interessante Sachen machen, aber ohne Spielziel ist es alles etwas öde. Ich hatte auch schon gedacht, ob ich die Spielziele des Levels nicht einfach auch als Objekte darstelle und diese dann durch "Callbacks" gesetzt werden. Dann würde ein Trigger einfach eine option on_trigger_activated bekommen und ich könnte damit ein Spielziel-Objekt angeben was dann eben auf done gesetzt wird. Der AI Spawner könnte dann sowas für on_all_killed oder on_spawning_done haben.

Mit dem Verkabeln wäre es natürlich perfekt, aber das in VR umzusetzen ist gleich doppelt schwierig, weil ich mir wieder große Gedanken machen muss, wie ich das Interface dafür wieder baue. Vermutlich ist es aber besser mehr Zeit zu investieren und es vernünftig zu machen oder denkst du, dass eine Lösung mit Callbacks ausreichend ist? Im Endeffekt ließe sich ja auch hier nach und nach mehr machen indem man nicht direkt das Levelziel setzt sondern einen Zähler erhöht der das Levelziel erst dann setz wenn eine vorgegebene Zahl erfüllt ist usw.... Es ist vielleicht etwas umständlicher aber vielleicht gar nicht so unflexibel und wäre bereits jetzt gut umsetzbar.
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4252
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Spielziel im Level-Editor festlegen

Beitrag von Chromanoid »

Ich hab keine Ahnung, ob das wirklich funktioniert. So gegenständlich wie möglich, hört sich für mich jedenfalls gut an. Das kann man leicht verstehen und reproduzieren. Vielleicht hilft es der Übersichtlichkeit, wenn die Blöcke in einem Raster angeordnet sein müssen. Aber ich habe kein VR-Brille und kann deshalb nur schwer abschätzen, ob man bei Kabeln nicht den Überblick verliert.

Ansonsten finde ich Kommando/Bedingungs-Texte mit Platzhaltern eigentlich ziemlich intuitiv. Das gibt's ja zum Beispiel beim Warcraft 3 Editor, beim Game Maker und bei Programmen wie Outlook für Email-Regeln. Ich glaube je mehr man mit Variablen und abstrakten Platzhaltern arbeiten muss, desto schwieriger wird's für Nicht-Programmierer...
Dummie
Beiträge: 97
Registriert: 09.02.2004, 20:45

Re: Spielziel im Level-Editor festlegen

Beitrag von Dummie »

Also es gibt sogar ein Spiel, was sowas ähnliches bereits in VR macht: https://www.youtube.com/watch?v=4FRTXpn_kVo

Vielleicht ist es auch doch gar nicht so schwierig. Im Endeffekt könnte ich es ja so machen, dass man ein Objekt auswählt und dann gibt es eine Menü-Option "Wiring". Die wählt man aus und man gelangt in ein neues Menü. Hier gibt es dann:
Input [Button]
Input Function [Button] [Button]

Output [Button]
Output Function [Button] [Button]

So könnte man dann auf Input drücken und einfach das Objekt "aufheben", was man als Input haben will. Dann mit den zwei Buttons durch die Funktionen navigieren und das gleiche für das andere Objekt. Fertig.

Visualisieren könnte ich das dann tatsächlich noch mit einer kleinen Verbindungslinie. Damit hab ich vermutlich das beste aus beiden Welten. Das muss ich wohl mal probieren. Ich muss mir dann nur noch überlegen wie ich die Verbindungen speicher, aber vielleicht generiere ich für jedes erstellte Objekt einfach interne eindeutige Namen die dafür genutzt werden. :)
Antworten