HomeUser Control Panel (unavailable in archive)ForumsTutorialsArt GalleryResourcesMaps

Non-linear Conversation System (CG Convo)

09-29-2007, 11:03 PM#1
Captain Griffen
Anyway, here's a system that's going to be used extensively in Project Pathetic. Basically, it lets you easily and quickly have up to 4 different decisions you can make, slickly integrated seamlessly into WC3. Really simple to use, both for the user and for the triggerer (GUI or JASS).

Too much to be believed? I've just knocked together this quick test level to display it (two convos, and quite interesting content, though somewhat linear overall due to time constraints - it IS a test map). Note that it ends after two conversations, but doesn't exit.

Basically, I'm looking for feedback on both the system specifically, and on multilinear conversations (and plots).

Discuss.
Attached Files
File type: w3xCGConvo.w3x (27.7 KB)
09-30-2007, 02:08 AM#2
Here-b-Trollz
You, sir, are amazing.


As to non-linear plots, I'm not quite sure what you want to be discussed, but I do think that you hit the nail pretty much square on the head here - arrow keys are the way to go for this system. The only thing I might do is add an event for ESC, so that we can set up stuff like:

"What did you want to talk about?"

Up: "You, of course..."
Left: "The war, it's not going so well..."
Right: "What do you think of me?"
Down: "I need to vent, and you're here..."
ESC: "Err... nothing, sorry..."


On ESC:

"Okay, suit yourself."

And end conversation, or, if you pressed UP:

"Well, what do you want to know about me?"

Up: "How did you come to Azeroth?"
Left: "Let's talk about how we met..."
Right: "Nothing, I just want to look at you..."
Down: "How old did you say you were?"
ESC: "Actually, I changed my mind..."


On ESC:

"Oh, okay. So what did you REALLY want to talk about?"

Up: "You, of course..."
Left: "The war, it's not going so well..."
Right: "What do you think of me?"
Down: "I need to vent, and you're here..."
ESC: "Err... nothing, sorry..."


etc.
09-30-2007, 02:15 AM#3
PenguinEmperor
That was pretty freaking amazing.

Now polish it to look awesomely badass too.

I want Project Pathetic now.
09-30-2007, 09:26 AM#4
Captain Griffen
By the way, actual credit to the idea should probably go to those gods over at BioWare working on Mass Effect.

Hmm...escape key. Yea, I should probably add that in. Not much extra work.

Thanks for the feedback.
09-30-2007, 10:54 AM#5
Merlin
Code:
↑   ...What?
←   Uh...Sure.
↓   I'm sorry, I don't spea--DIE!!!
→   为什么是, 我爱饼

Can you use these arrow characters in the editor? I think they're cleaner than "Up Arrow, Down Arrow", etc.

There's also,

Code:
▲   ...What?
◄   Uh...Sure.
▼   I'm sorry, I don't spea--DIE!!!
►   为什么是, 我爱饼
09-30-2007, 12:20 PM#6
Captain Griffen
Nope, afraid not.

Anyway, added support for escape key. Also changed all references to Arrows to Keys in the system, and all references to Keys to Indexes, so as to make it clearer. This has of course killed backward compatability (which affects nothing).

On top of that, having a key of "" passed for a decision adds it to the first one that's free (which can then be accessed by checking for the returned Index string). Anyway, this means that you can dynamically put in up to 5 decisions drawn from a pool of any size (limited only by your coding patience).
09-30-2007, 02:40 PM#7
Captain Griffen
Update: Well, I've fixed a few bugs, and also updated things. Here's a version that works with normal WE (note that the version don't have identicle syntaxes).

Anyway, this is mainly for that foo' Rao.
Attached Files
File type: w3xCGConvo Normal.w3x (25.3 KB)
09-30-2007, 02:40 PM#8
Here-b-Trollz
You know, it would be really awesome if convo.AddDecision() took a function as an argument, and called it when that decision was pressed. This would kill GUIers, but Jassing this would become much easier.

Collapse JASS:
function A1 takes nothing returns nothing
//do stuff
endfunction

function Start takes nothing returns nothing
    call CONVO.ClearDecisionAll()
    call CONVO.AddDecision("up","[Ugh]","A1",function A1)
endfunction

So that you don't have to do CONVO.WaitForOutput(true), then see which was pressed, and then do stuff. (Of course, I don't know what the new version looks like EDIT: ooooh! Now I can!)

A final thing I would do, which nobody I talk to seems to agree with me on, is add a delay to the system (between Key Press and function call). Something as short as .3 seconds makes a big difference. Weaaddar's Bag had this, and felt very much like a book, because of the tiny delay. Vexorian's InvX did NOT have this, and everything felt a bit too... jerky. InvX is still nice, it just didn't seem as natural as Weaaddar's system.
09-30-2007, 02:45 PM#9
Captain Griffen
Quote:
Originally Posted by Here-b-Trollz
You know, it would be really awesome if convo.AddDecision() took a function as an argument, and called it when that decision was pressed. This would kill GUIers, but Jassing this would become much easier.

I've already considered that, and will ad some point add it as a seperate function (say, AddDecisionCode or something). Not right yet, though, since it isn't a priority since I don't code in JASS for conversations and stuff.

Quote:
So that you don't have to do CONVO.WaitForOutput(true), then see which was pressed, and then do stuff. (Of course, I don't know what the new version looks like EDIT: ooooh! Now I can!)

The new version is basically identicle externally, but is a lot sleeker internally, despite not requiring vJASS (the old code was overly messy).

Quote:
A final thing I would do, which nobody I talk to seems to agree with me on, is add a delay to the system (between Key Press and function call). Something as short as .3 seconds makes a big difference. Weaaddar's Bag had this, and felt very much like a book, because of the tiny delay. Vexorian's InvX did NOT have this, and everything felt a bit too... jerky. InvX is still nice, it just didn't seem as natural as Weaaddar's system.

Hmm...an interesting idea...I'll consider it.
09-30-2007, 03:15 PM#10
Here-b-Trollz
Hmmm.... I can't say I agree with you - I think the old code was nicer externally - but that's probably just my love of '.syntax'.

I don't really understand what the idea of index ("a") is for, and why you need to specify it in AddDecision(), but I think that the Key ("up","down",etc.) could be improved if it used integers. You could, of course, add in some globals:

Collapse JASS:
globals
    constant integer KEY_UP=1
    constant integer KEY_DOWN=2
    constant integer KEY_LEFT=3
    constant integer KEY_RIGHT=4
    constant integer KEY_ESC=5
endglobals

Assuming the user is using the globals, they will not have issues with typing "dwon" instead of "down", as Syntax Checker will see KEY_DWON, and report an error (undefined variable).

Ideally, I would say that a user interface somewhere close to:

Trigger:
Custom Script: call CONVO.AddDecision(KEY_UP,"Where am I...?")
Custom Script: call CONVO.WaitForOutput(true)
Collapse If CONVO_UPPRESSED Then Do:
Custom Script: Some Crap (not in custom script)
Else Do:

for GUIers and:

Collapse JASS:
function WhereAmI takes nothing returns nothing
endfunction

function Start takes nothing returns nothing
    call CONVO.AddDecisionCode(KEY_UP,"Where am I...?", function WhereAmI)
endfunction

For Jass would be nice.


I'm sorry to keep throwing my thoughts at you, but have you considered a sort of 'confirmation' of key press, like:

Up Arrow: Where am I...?
Down Arrow: [Ugh]

Then, when up is pressed, Down is grayed, and you see:

Up Arrow: Where am I...?
Down Arrow: [Ugh]

After a color switch has happened, the next AddDecision() would clear all of the messages (Eliminating the need for ClearDecisionAll()).


This is, of course, looking far into the future.
09-30-2007, 03:32 PM#11
Captain Griffen
Quote:
Originally Posted by Here-b-Trollz
Hmmm.... I can't say I agree with you - I think the old code was nicer externally - but that's probably just my love of '.syntax'.

However, that makes it require vJASS, which I wish to avoid.

Quote:
I don't really understand what the idea of index ("a") is for, and why you need to specify it in AddDecision(), but I think that the Key ("up","down",etc.) could be improved if it used integers. You could, of course, add in some globals:

The system has already gradually been moving towards that, and when I go through and actually make the code sensible I'll probably do that.

Quote:
Assuming the user is using the globals, they will not have issues with typing "dwon" instead of "down", as Syntax Checker will see KEY_DWON, and report an error (undefined variable).

Hmm...perhaps. It could do with being more robust.

Quote:
Ideally, I would say that a user interface somewhere close to:

Trigger:
Custom Script: call CONVO.AddDecision(KEY_UP,"Where am I...?")
Custom Script: call CONVO.WaitForOutput(true)
Collapse If CONVO_UPPRESSED Then Do:
Custom Script: Some Crap (not in custom script)
Else Do:

for GUIers and:

That already pretty much happens, just it uses a string instead of a boolean.

Quote:
Collapse JASS:
function WhereAmI takes nothing returns nothing
endfunction

function Start takes nothing returns nothing
    call CONVO.AddDecisionCode(KEY_UP,"Where am I...?", function WhereAmI)
endfunction

For Jass would be nice.

That's coming, and has been for a while.


Quote:
I'm sorry to keep throwing my thoughts at you, but have you considered a sort of 'confirmation' of key press, like:

Confirmation would break the immersion more, and I can't accept that (the whole purpose is to keep the immersion).



Thanks for the comments, keep 'em coming!
09-30-2007, 03:45 PM#12
cohadar
Nice one.

One question, why isn't this in the resource submission thread?
09-30-2007, 03:46 PM#13
Here-b-Trollz
I'm sorry if perhaps I was unclear, but it wouldn't be like: Are You Sure? It would just show you what you chose. Either way, I guess it's unneeded.

Why are you avoiding vJass...?



PS: Booleans are easier than strings


EDIT:
Quote:
Originally Posted by cohadar
One question, why isn't this in the resource submission thread?

Maybe because he wants it discussed, not approved?
09-30-2007, 03:54 PM#14
cohadar
Quote:
Originally Posted by Here-b-Trollz
Maybe because he wants it discussed, not approved?

true, true.
09-30-2007, 06:35 PM#15
PitzerMike
Quote:
Originally Posted by Here-b-Trollz
Why are you avoiding vJass...?

I blame Rao :D