Dialog in RPG

Status
Nicht offen für weitere Antworten.

leibimatZe

Mitglied
Hallo ihr alle :)

ich stöber schon lange hier im Forum herum und les mir den einen oder anderen Beitrag durch und endlich habe ich es geschafft mich anzumelden :)

Ich sitze zur Zeit an einem kleinen RPG Versuch in 2D. Habe bereits einiges in 2D gemacht und auch Viergewinnt im 3D übers Netzwerk programmiert.

Mir fehlen jetzt jedoch die Grundideen wie ich an die Dialoge zwischen Charakter und NPC rangehe.

Codetechnisch liegt bei mir nochnichts vor, was ich präsentieren kann, da ich viel mit Theoriearbeit und Zettel und Stift beschäftigt bin.

Ich dachte mir dass ich die Dialoge in der NPC Klasse speicher, da es Dialoge sind die speziell an bestimmte vordefinierte Charaktere im Spiel angepasst sind.

Also..

Charakter kommt zu NPC, per Klick wird die Interaktion gestartet und ein Thread beim NPC kommt zu Gange.
Ist es dann sinvoll in dem Thread den Dialog komplett abzuarbeiten mit painten auf die GUI.
Ob ich es so gestalte dass der Charakter Antwortmöglichkeiten zur Verfügung hat oder es als Monolog gedacht ist weis ich nochnet. Evtl einfach nur mit kleiner Einleitung und Questbeschreibung z.B.


Bitte gebt doch mal kurz sinvolle Statements dazu ab ob ich das so weiter bearbeiten sollte :)

Danke, Grüße matze
 

Noctarius

Top Contributor
Hallo,

grundsätzlich erstmal: Hallo *gg*

Wie stellst du dir denn den internen Aufbau der Dialoge vor? Sollen diese fest definiert sein oder können Konstellationen auftreten wo sich das Ergebnis eines Satzes mit einem Anderem überschneidet oder das selbe Ergebnis ervorbringen.
 

leibimatZe

Mitglied
Ich dachte eigtl an fest definierte Dialoge, bin grad bei nem anderen Projekt für die DHBW bereits auf XML gestoßen, allerdings arbeiten wir dort mit wpf+c#.

Vorerst dachte ich sind die Dialoge + evtl Antwortmöglichkeiten FEST in der NPC Klasse gespeichert.
Es sollte erstmal wirklcih ein kleines RPG werden :)
2-3 NPCs mit vlt 5 quests und ein paar tierchen, also einfach nur um die grundidee rpg mal umzusetzen dann auszubaun.
Für größere rpgs ist XML denke ich sinvoll aber erstmal für mic die in der NPC Klasse speichern ist denke ICH sinvoller.


Bevorzugt erstmal Monologe, heist ich quatsch einen NPC an, der sagt dann seine 2-3 Sätze, dann erhält man ne Quest oder kommt zum shop.

Ausbaufähig wären dann Fragen, die man auswählen kann auf die der npc dann speziell antwortet, da hätte ich dann auch nen festen dialog ablauf bzw fest definierte antworten des NPCs also nichts was den verlauf beeinflussen kann. übertreiben will ichs nun auch nochnicht^^

ich schreibe grad vlt ein bisschen wirr, hoffe es kommt verständlich rüber :)

danke
 

Noctarius

Top Contributor
Ja ok verstanden :D

GUI-Technisch kann ich dir leider auch nicht weiterhelfen ^^ Bei Fragen zu sowas kannst aber ruhig ankommen *gg*
 

leibimatZe

Mitglied
mir ging es vorerst auch nochnicht um die GUI, da steht eigtl nur das erste Grundgerüst aus Tilemaps ohne kollision und objekte :)

Ich beschäftige mich grad mehr mit dem Klassenaufbau und den Zusammenhängen und da ging es mir darum ob es da was einfacheres bzw sinvolleres gibt als den vorgefertigten Dialog in der NPC Klasse zu speichern und wie ich das den am besten angehe, will eigtl keine Codes, nur Ideen :)
 

Noctarius

Top Contributor
Ich würde ein ganz simples Schema in Richtung sowas hier machen:

Java:
public class Dialog {
	/** DialogEntry to start with on show */
	private DialogEntry startDialogEntry;
}

private class DialogEntry {
	/** text to display */
	private String text;
	/** 
	 * instance of DialogEntry to move forward to, 
	 * if null use questions, if no questions -> dialog ends
	 */
	private DialogEntry transition;
	/** questions to be shown */
	private List<DialogQuestion> questions;
}

private class DialogQuestion {
	/** text to display */
	String text;
	/** instance of DialogEntry to move forward to, if null dialog ends */
	private DialogEntry transition;
}

Lässt sich selbstverständlich später beliebig aufblähen, z.B. um Conditions die mit Quests gesetzt werden und erfordern, dass Dialog anhand dessen aus einer Liste von DialogEntries und Conditions den richtigen Startwert raussucht usw... :D
 

leibimatZe

Mitglied
Ja gut in der Hinsicht. Aber ich brauch ja eigtl keine Question Klasse da ich nur mit Aussagen arbeite.

-> dialog start
"Hallo bei meinem tollen RPG. Hier deine Startquest"
-> dialog ende

so sehn eigtl alle aus dachte is soo das simpelste überhaupt :)

Wenn ich nun nen Objekt (NPC) erstellt habe weise ich ihm über nen setter den Dialogtext zu (dumm gedacht????)
Die Dialogtexte könnte ich in ner xml speichern oder in ner extra klasse... wobei ok :D damit wäre ich quasi bei deiner methode gelandet...

Ach alles iwie kacke RPG is echt heftig :p
Aber hab mittlerweile ne kleine Klassenstruktur entworfen.

grüße..

weiter meinungen? xD
 

Noctarius

Top Contributor
Auch reine Dialoge kannst du doch mit dem Modell oben abhandeln indem du einfach immer als transition einen weiteren DialogEntry setzt. Wäre der gleiche Weg wie bei einem XML:

[xml]<dialog>
<entry> <!-- startDialogEntry -->
<text>some text</text> <!-- text -->
<entry> <!-- transition -->
<text>some more text</text>
<entry>
<!-- no text -->
<questions>
<entry>
<text>some more text</text>
<answers>
<entry>
...
</entry>
</answers>
</entry>
</questions>
</entry>
</entry>
</entry>
</dialog>[/xml]
 
Zuletzt bearbeitet:

Noctarius

Top Contributor
Wenn jeder NPC nur einen Dialog kann, dann ja... ansonsten eben eine Liste von Dialogen wobei dann das Beispiel mit den Conditions entscheiden würde welcher aufgerufen wird.

hab oben noch ein wenig mehr xml reineditiert :D
 

leibimatZe

Mitglied
Ja habs grad gesehen, danke.. werd das erstmal ohne XML versuchen.
Ich will einfach jedem erstmal EINEN dialog geben, bzw ok... eigtl sollte einer schon merh können :)

also ich komm quasi zu einem hin dann tritt die condition "first time" (name soll nur aussagekräftig sein xD) in kraft, dann palabert der seinen text runter, dann bekomm i ne quest, die erledig ich dann geh ich wieder hin dann tritt die condition "quest done" in kraft, aber ich seh bei dir jetzt nirgends wie ich da dann bedingungsabhängig nen anderen dialogteil nutze x/

EDIT:

grad hab ich mich verlesen, ich muss in der liste quasi bedingungen mitspeichern über die ich dann dialoge abfrage?
 

leibimatZe

Mitglied
ob Map oder liste :)
Wie würdest du so ne Condition am ehesten abspeichern? aah bin da grad totally auf neuland :D

thx!!

.... API schaun xD i know^^
 

Noctarius

Top Contributor
Nein egal ist es nicht.

Bei einer Map hast du immer eine Verknüpfung zwischen aktueller Condition (die erfüllt ist) und dem Dialog, bei einer Liste kannst du nur eins speichern. Hier gäbe es dann die Möglichkeit den Dialog fest in die Condition-Instanz zu speichern.

Ich würde bei der Map bleiben und die Condition folgendermaßen aufbauen (immer mit dem Hintergrund, alles nur Vorschläge und nicht die Aussage, dass es der einzige oder beste Weg ist):

Java:
public interface Condition {
	public boolean isPassed(Player player, String questname);
}

public class SimpleFirstTalkCondition implements Condition {

	public boolean isPassed(Player player, String questname) {
		return player.getQuestState(questname) == QuestState.Firsttalk;
	}
}

public class Player {
	private Map<String, QuestState> queststates = ...;
	
	public QuestState getQuestState(String questname) {
		if (queststates.contains(questname))
			return queststates.get(questname);
		
		return QuestState.Firsttalk;
	}
}

public class NonPlayerCharacter {
	Map<Condition, Dialog> conditionalDialogs = ...;
	
	public Dialog onTalk(Player player) {
		for (Condition condition : conditionalDialogs.keySet()) {
			if (condition.isPassed(player, "myquest"))
				return conditionalDialogs.get(condition);
		}
	}
}
 

leibimatZe

Mitglied
Okaay danke erstmal.. sitze noch beim Arbeiten aber werd das wenn ich heute Aben noch Zeit finde mal versuchen ein wenig zu implementieren getestet wird eh nochnet , bin ja grad noch absolut nicht so weit :)
aber jetzt kann ich die klassenerstellung weiterführen udn weis ungefähr wie ich den dialog einbauen könnte.

Ich glaube es gibt NIE eine perfekte lösung. Immer nur verschieden funktionierende :)

danke!
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben