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

1

03.12.2008, 11:01

Dialogsystem für NPCs

Hallo mal wieder,

Wollte mal nachfragen, was ein gutes/optimales system für dialogtexte bei NPCs ist.

Den text in den quellcode zu schreiben fällt aus, da man sonst das programm beim ausbessern von rechtschreibfehlern etc. immer wieder neue compilieren müsste.

also bleibt nur noch das auslagern der texte in dateien und da wollte ich fragen, was dafür eine gute lösung wäre.


ein textfile,das ca. so aussieht

HauptNPC1-"text1" // text1 des hauptnpcs
HauptNPC2-"text2" // text2 des hauptnpcs
City1Villager1-"text1" // text1 des dorfbewohners in der stadt1
.
.
.



nur ist das ständige öffnen/schließen von der file und das dortige suchen doch sicherlich nicht eine gute lösung?

bräuchte da mal so denkanstöße, was eine gute lösung für so etwas wäre, oder wie das professionellere spieleentwickler handhaben.

mfg
Simon

edit:

ich trottel ;(

bitte ins C++ forum verschieben(?) (hat jedenfalls nichts mit nem projekt zu tun)

2

03.12.2008, 11:23

Es gibt verschiedene Möglichkeiten. Age of Empires 3 hat für die Lokalisierung XML benutzt. Ansonsten eignen sich auch die schönen ini-Dateien dafür oder du entwickelst dein eigenes Dateiformat.

hanse

Alter Hase

Beiträge: 472

Wohnort: Wien

  • Private Nachricht senden

3

03.12.2008, 11:31

Naja ein einfacher NPC ist meist eine Statemaschine. Das heißt du hast irgendwelche States und Bedingungen bei denen in einen anderen State gewechselt wird (das währen z.B. die Menüpunkte die ausgewählt werden). Solch eine Satemaschine kann man auch z.B. in XML beschreiben, das könnte dann so aussehen:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
<npc name="Frank" firststate="Hallo">
 <state name="Hallo">
   <text>Hallo wie geht es dir?</text>
   <choice newstate="Gut">Mir geht es gut. Danke!</choice>
   <choice newstate="Schlecht">Leider geht es mir heute nicht so gut.</choice>
 </state>
 <state name="Gut">
   <text>Das ist aber toll! Ich hoffe du hast noch einen schönen Tag.</text>
 </state>
 <state name="Schlecht">
   <text>Oh, das tut mir leid. Hoffentlich geht es dir bald besser.</text>
 </state>
</npc>


Es gibt fertige Bibliotheken um XML auszulesen, such einfach mal nach XML und deiner Programmiersprache bei Google. Ich würde das File nur einmal beim Spielstart in das RAM einlesen. Bzw. bei einem größerem Spiel einmal pro Map

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

03.12.2008, 11:33

Re: Dialogsystem für NPCs

Zitat von »"Draculark"«

nur ist das ständige öffnen/schließen von der file und das dortige suchen doch sicherlich nicht eine gute lösung?


Im Normalfall werden die Dialoge einmal geladen und dann direkt aus dem Arbeitsspeicher raus verwendet. In vielen Fällen müssen nichtmal alle Dialoge komplett geladen werden, sondern z.B. nur diejenigen die für eine bestimmte Sequenz, oder in einem bestimmten Level, notwendig sind.
@D13_Dreinig

5

03.12.2008, 11:50

Re: Dialogsystem für NPCs

Zitat von »"David_pb"«

Zitat von »"Draculark"«

nur ist das ständige öffnen/schließen von der file und das dortige suchen doch sicherlich nicht eine gute lösung?


Im Normalfall werden die Dialoge einmal geladen und dann direkt aus dem Arbeitsspeicher raus verwendet. In vielen Fällen müssen nichtmal alle Dialoge komplett geladen werden, sondern z.B. nur diejenigen die für eine bestimmte Sequenz, oder in einem bestimmten Level, notwendig sind.


würde mal sagen,dass wenn ich eben viele npcs habe (ist zwar schwachsinn, werde ja kein riesiges spiel alleine programmieren, aber mal angenommen:D) ist es ja ungünstig 100.000 Zeilen Text einzulesen und abzuspeichern, wenn ich eben nur zur laufzeit vl 10-15 zeilen brauche.


xml sagt mir relativ wenig (habs mal bei java an der uni gebraucht für ne datenbankverwaltung, aber das war mehr copy&paste als eigenerarbeitung), aber werde mal schauen.

aber ist es also eine gute methode , einen npc "mit einem skript zu behaften"(?). damit kenn ich mich zwar auch noch nicht viel aus (lediglich jass in warcraft3:P , aber glaub dieses kapitel wird in nem buch von mir behandelt (programming role playing games von adam brown oder sowas).

werd ich mir in den winterferien dann mal zu gemüte führen.

danke :)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

03.12.2008, 12:24

Re: Dialogsystem für NPCs

Zitat von »"Draculark"«


würde mal sagen,dass wenn ich eben viele npcs habe (ist zwar schwachsinn, werde ja kein riesiges spiel alleine programmieren, aber mal angenommen:D) ist es ja ungünstig 100.000 Zeilen Text einzulesen und abzuspeichern, wenn ich eben nur zur laufzeit vl 10-15 zeilen brauche.


Wenn du vorher schon weißt was du brauchst kannst du ja genau das laden. Ansonsten sollte es auch kein Problem sein alle 100.000 Zeilen zu laden.
@D13_Dreinig

hanse

Alter Hase

Beiträge: 472

Wohnort: Wien

  • Private Nachricht senden

7

03.12.2008, 12:28

Re: Dialogsystem für NPCs

[query]aber ist es also eine gute methode , einen npc "mit einem skript zu behaften"(?). damit kenn ich mich zwar auch noch nicht viel aus (lediglich jass in warcraft3:P , aber glaub dieses kapitel wird in nem buch von mir behandelt (programming role playing games von adam brown oder sowas).[/query]
Ich weiß jetzt nicht genau was du mit "mit einem skript zu behaften" meinst, aber es hängt vor allem von der Komplexität deines Spieles ab und wie du unterschiedliche Level/Gebiete im allgemeinen handhabst.

8

03.12.2008, 13:34

Du solltest dir ersteinmal in Ruhe Gedanken machen, wie Gespräche funktionieren sollen. Ob du so komplexe haben willst, wie meinetwegen in Gothic, oder sehr simple wie in Diablo 2, oder eine Mischform und so weiter.
Wenn du das genau weißt, überlegst du dir, wie du es am besten Implementieren könntest, und wenn das feststeht, wie das entsprechende Dateiformat aussehen sollte.
Lieber dumm fragen, als dumm bleiben!

DasBlub

Alter Hase

Beiträge: 802

Wohnort: Schweiz

Beruf: Programmierer

  • Private Nachricht senden

9

03.12.2008, 14:56

ich kann dir anraten, mal die implementierung von npc's bei mangos (nachprogrammierung des wow servers) azusehen. dort werden die texte in der datenbank gespeichert und danach per id angesteurt.

wenn man den mangos server startet läd er erst mal alle daten (dauert ca. 1min, sind ein paar millionen records ;)), danach hat er die im ram und kann sie dann dem user schicken sobald es nötig ist.

hier noch der link zu mangos: http://www.getmangos.com/

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

10

03.12.2008, 17:07

Re: Dialogsystem für NPCs

Zitat von »"Draculark"«

xml sagt mir relativ wenig (habs mal bei java an der uni gebraucht für ne datenbankverwaltung, aber das war mehr copy&paste als eigenerarbeitung), aber werde mal schauen.

Das ist eigentlich recht simplel. Die Syntax erinnert an HTML. Du erstellt lauter Tags. Die Namen der Tags kannst du selbst festlegen und dann auslesen. Du musst also keinen wirklich großen Lernaufwand betreiben, weil du dir die XML-Files an dein Spiel anpasst und nicht andersrum.

Werbeanzeige