TazMan on 25/9/2001 at 20:00
Well... the conversion would probably have to be manually entered in the Morrowind Editor.
Since Morrowind isn't out yet, I don't have access to the Morrowind Editor.
But the conversation system works similar to Underworld's... A NPC has "known" info and you have a "set of questions" to choose from in the Dialog window.
The text file you linked to helps some... but I'm looking for pretty much a flow chart of conversation to each NPC.
Like... when you talk to the king of the Green Goblins on Level 1... you have a multiple choice of things to say to him... he responds... you have a new multiple choice of things to say... he responds.... etc etc. there is a a flow that sometimes loops back to something said eailier too.
That's about the only way I can think of describing it. <IMG SRC="erm.gif" border="0">
Taz
jim the hairy on 27/9/2001 at 14:02
Yeah, it'd pretty much have to be done by hand. Underworld's conversation engine is a complete programming language - is Morrowind going to be up to it? Conversation outcomes can depend on pretty much anything in the game: whether you've spoken to the character before, the character's attitude towards you (which in turn depends on what you say), your strength and experience, what you give the character etc. Strings in the conversation block can refer back to global (@GSxx / @GIxx) and local (@SSxx / @SIxx) variables within the code. It's very flexible and sophisticated, and very complicated.
TazMan on 27/9/2001 at 17:28
Yes, the Morrowind Conversation system has "faction / reputation" considerations, and "attitude" considerations (Like saying things "respectfully, arrogantly, etc. etc."). It actually can be more complicated than Underworld's... but I don't plan to use EVERY aspect of Morrowind's conversation system.
It's suffice to say, I can mimic Underworld's conversation system fairly well.
If you ever played Daggerfall, the conversation system is much like that, but with several enhancements (According to what the Morrowind Devs have said).
What I'd like to do... is get a basic flow of conversation for each npc working, then "tweak it" according to faction, attitude, whatever.
For instance.... a snip from your text file:
---------------------
Block 120 at 000372D7, 8 strings
Block 120, 8 strings
0
1 Human! We no see one like you here very much, and when we do, is not for long. Heh heh.
2 I do not like the tone of thy voice.
3 It is a pleasure to meet thee.
4 I must be on my way.
5 Ho, ho! Well, you not need to listen to it for long.
6 Pleasure to meet, yes, but more pleasure to eat!
7 Yes, on way to my stomach!
---------------------
That looks like a piece of conversation from the Golem on level 6 (I'm not sure... at this point it doesn't really matter what NPC it is).
Line 1 is obviously the NPC.
Line 2 could be either the NPC or the Player, But I'm pretty sure it's the Player, given the pattern.
Line 3 is probably the Player, given the pattern.
Line 4 is obviously the Player.
Line 5 is obviously the NPC.
Line 6 is obviously the NPC.
Line 7 is obviously the NPC.
Ok... let's break this down...
Line 1 is the NPC's initial talk.
Lines 2 and 5 look like they go together.
Lines 3 and 6 look like they go together.
Lines 4 and 7 look like they go together.
Ok... that's a simple example that can be manually deciphered. A more complicated conversation would be difficult to manually decipher, as far as what lines go with what lines. I haven't really studied your text file yet, but given the example... if the pattern is near the same for all conversation... there might be a way to organize your output file via some programming, that shows basic flow and matches lines to corresponding conversation. Which would make manual entry to Morrowinds conversation, fairly straight forward.
What do you think?
Taz
Al_B on 28/9/2001 at 04:37
Quote:
Originally posted by TazMan:
<STRONG>Ok... that's a simple example that can be manually deciphered. A more complicated conversation would be difficult to manually decipher, as far as what lines go with what lines.</STRONG>
Yes, but the problem is that the strings give you no indication of how the branching and loops in the conversation occur. A more serious problem is that there are a number of global variables that control conversation flow which can be set by talking to other characters or performing actions and you start to need to study the conversation VM code.
There are other issues such as inventory checks and trading that I don't know if you will be able to do in Morrowind.
Alistair
Le Magot d'Oz on 28/9/2001 at 09:35
Quote:
Originally posted by jim the hairy:
<STRONG>Conversation outcomes can depend on pretty much anything in the game: (...) your strength and experience.</STRONG>
!!! :eek: :confused: really ? in UW1 ???? are you sure ? that means the dialog would change whether you talk to someone at first at the begining or at the end of the game...
Morrowind will introduce something very interesting : for the very first time your apperance will influence a conversation : you'll really have to check what clothes you're wearing (it's no the same to talk to the king in rags or in usual clothes or ... :D )
[ September 28, 2001: Message edited by: Le Magot d'Oz ]
TazMan on 28/9/2001 at 15:51
Quote:
Originally posted by Al_B:
<STRONG>Yes, but the problem is that the strings give you no indication of how the branching and loops in the conversation occur. A more serious problem is that there are a number of global variables that control conversation flow which can be set by talking to other characters or performing actions and you start to need to study the conversation VM code.
There are other issues such as inventory checks and trading that I don't know if you will be able to do in Morrowind.
Alistair</STRONG>
That's why I'm asking you UW hackers if ya can figure something out that has the output a little "more orderly" than that text file. It wouldn't have to consider global variables... just give base conversation for each npc. Then I could data enter it in Morrowind... THEN tweak it for conditions such as the global variables whould have. ;)
Regards,
Taz
Shadowcat on 29/9/2001 at 09:24
Right; who wants to write the Underworld conversation flow-chart generator? :)
Hey, does Morrowind allow plug-ins that introduce their own state and executable code? A cool solution would be to include a UU conversation VM interpreter within the mod, and then use the VM code directly :)
(That's perhaps not a sensible approach, though. It is an aesthetically appealing one, however :) And perhaps Jim is doing something similar anyhow?)
TazMan on 29/9/2001 at 16:00
Quote:
Originally posted by Shadowcat:
<STRONG>Hey, does Morrowind allow plug-ins that introduce their own state and executable code? A cool solution would be to include a UU conversation VM interpreter within the mod, and then use the VM code directly :)
</STRONG>
No, I don't think so. I'm pretty sure you can't do any type of "Hardcoding". Only scripting language for the "game itself". The scripting language gives you a lot of power, but you can't change the main MW gaming rules. I'll ask Bethesda if they can include a script command that would access an external DLL or something, though. I kind of doubt they'll do it, but hey... it doesn't hurt to ask!
Regards,
Taz
jim the hairy on 1/10/2001 at 15:39
Al is correct; there is a lot of global state for the Underworld conversation engine. (I believe the defaults live in data/babglobs.dat in the Underworld directory, by the way). I'm going to implement it in the way I think the original did; most of the work is done by emulating the (imaginary) machine and running the code directly, with some helper functions the conversation can call (which are hardwired into the game; this may or may not be a problem for Morrowind).
A `strings' run on the executable is instructive : (
http://madeira.physiol.ucl.ac.uk/tsshp/u1strings.txt) http://madeira.physiol.ucl.ac.uk/tsshp/u1strings.txt . OPADD about a quarter of the way down is the start of the opcodes list. OPNEG is the end. Then come the globals files, initial and saved. From babl_menu to play_name are built-in helper functions. You start to see what we're up against.
Decompiling object code is hard. Decompiling made-up object code into a made-up language which is different from the made-up language it was originally written in ... well, I'm not saying it's impossible. I'll have a hack at a conversation disassembler soon. Though you might just have to code them up by hand.
edit: You're welcome to drop by the hackers' forum on (
http://sourceforge.net/forum/forum.php?forum_id=85711) http://sourceforge.net/forum/forum.php?forum_id=85711 - on the other hand, we could only be said to be monopolising this one because nobody else uses it ;)
[ October 01, 2001: Message edited by: jim the hairy ]
jim the hairy on 2/10/2001 at 14:33
Right. I had a bit of a hack last night and came up with a rough draft of a decompiler to turn the object code for conversation scripts into something somewhat resembling C. It's not very good with flow control at the moment, so if/else/while constructions tend to come out garbled. Here is the <a href="http://madeira.physiol.ucl.ac.uk/tsshp/lakshi.txt">conversation with Lakshi Longtooth</a>, which looks to be one of its better attempts. I did add the strings in the comments manually, to show the player's available responses.
`s...' variables are stack variables. `g...' are globals, as are named variables from the imports table. `p...' are function parameters from the stack. Globals are private to the NPC in question. For each NPC, the file babglobs.dat gives the conversation number and the number of globals. bglobals.dat for the save games has the same but with the globals themselves filled in. Characters can retrieve various information about the player through the imports. For example, Lakshi checks the player's knight status through get_quest() (quest 32); if this is more than 1 the player is a Knight of the Crux and is treated accordingly.
The last function is quite interesting. If you say "Ha! Try it!" in response to a challenge Lakshi will size you up. If you're more than 5 levels above him, or 4 with a drawn weapon, he'll run away. If you're more than a level below him, or 2 with a drawn weapon, he'll attack you. Otherwise he won't fight.
Think you can make anything of this?