Advertisement

Narrative interpolation

Started by January 17, 2002 04:14 PM
70 comments, last by Oluseyi 21 years, 2 months ago
quote:
Original post by Oluseyi
And now, I'll go set an example by deleting all my outbursts.
That really threw me off, I just read through the last nineteen posts and couldn't find half of the quotes people had of you. Your outbursts are quite plentiful

On a more related note, I have been doing extensive work on graph structures lately (in computer science), and I really think that the process of narative interpolation could be implemented quite smoothly using graphs. The trick lies in storing information in the Links .

To use a basic example, let us imagine a game world of four rooms. From every room, you can move to any other room in the world.

each room contains a StoryNode:
    // FlagSet struct is just a large binary stringstruct FlagSet{/*Implementation specific, but this should take the form of event scripts in binary, or referencesto files that contain them.*/};// StoryNode class defines a location and settings which are linked to it (flags and the like)class StoryNode{private:  StoryLink linkages[3]; // explained later  FlagSet NodeState;/* OTHER STUFF, implementation specific */};  

The room where the player character starts may contain some enemies or some NPCs of a friendly sort. Interactions cannot affect StoryNodes that are outside of the room (the NPC's influence space), but the NPCs can affect any connected StoryLink:
  // StoryLink class has a list of information to travel to the StoryNode it points toclass StoryLink{private:  StoryNode * Target;  FlagSet Contents;/* implementation specific */};    

So lets say the PC is in room one, there is a townsman in the room with him, in room 2 is a bard, in room 3 is a beast and in room 4 is the inn.

The PC speaks to the townsman and tells him that he is going to kill the beast. The townsman is impressed and gossips about it. the gossip takes the form of a change in the flagset in the StoryLinks to rooms 2, 3 and 4 (however, the beast is the only game entity in room 3, so it's effects there are minimal).

The PC then goes to room 3 and kills the beast, and subsequently goes to the tavern in room 4 to rest.

If the PC took long enough to fight the beast, the bard would travel to room 3 and see it, and then go to room 4 and embelish on the tale. Then the PC would get free housing and food, otherwise, the bard would get there late, and the PC would have to pay the normal amount.
This is a menial example, but what's important is the implication of events.

An Event would be described in the FlagSet for any particular StoryNode in the game, and it's repercussions would not affect other nodes directly, but rather any connections that exist. The completion of a connection must be conditional, in order for the bard to embelish on the PC's feat enough, he must have travelled to room 4 first, and also have been there for a certain amount of time. It might be wise for the PC to visit (hitherto unmentioned) room 5 which contains a blacksmith who will spend time repairing the PC's equipment. The blacksmith may have previously heard about the PC's intent, and will ask how the fight went.

If the PC never told anyone, and a passerby saw the whole thing, then maybe he would have a similar (but delayed) effect as the original townsman. Or perhaps, if the PC is already famous, people would actually come to watch.

This is all trivial however, the real reason this implementation is useful is that the game only checks through currently active StoryLinks (those connections which contain a non-empty FlagSet). This could be accomplished by having another object contain a list of all non-empty StoryLinks. I don't expect that the game would process this information for every iteration of the game loop, but it may well be done quite often.

George D. Filiotis
Are you in support of the ban of Dihydrogen Monoxide? You should be!

[Edit: Just made sure source doesn't extend wider that page.]

Edited by - Oluseyi on January 30, 2002 7:56:54 PM
Geordi
George D. Filiotis
quote:
Original post by Symphonic
Your outbursts are quite plentiful


*BG*

quote:
On a more related note, I have been doing extensive work on graph structures lately (in computer science), and I really think that the process of narative interpolation could be implemented quite smoothly using graphs. The trick lies in storing information in the Links .

Precisely! Just yesterday I was discussing methods of representing relationships between NPCs. My contemporary was saying that there would be very complex networks of interrelationships from NPC-to-NPC. I pointed out to him that if the relationships were stored externally, in either directed or undirected graphs, not only would less information need to be stored but fewer tests/searches/updates would need to be done. Currently, I see it as having each link contain data about the relationship as well as two identifiers specifying which "nodes" are at each of its ends.

I like your description of Events; it parallels my idea of how to represent relationships. In other words, be should be able to abstract such representations into a base case. As for processing only non-empty nodes, not only do I agree but I took it a step further to not even having empty nodes in memory (I''d like them to be asynchronously loaded/unloaded, with important changes being aggregated and then iteratively applied.

Good job. (I''ve got to go - Magic are playing Lakers in Orlando!)
Advertisement
This inspired me:
quote:
The difference between fighting someone in a boxing match and fighting someone who doesn''t expect or "deserve" it is that the second action is cruel. Boxing is violent; bullying is cruel.

Basically, I feel that the idea has to come across that when you''re killing or causing harm to something in a game, that it''s for a justifiable reason (i.e. the person/creature has done something to deserve it). This is how most people define the difference between a police officer or a soldier killing someone and a regular civilian doing the same thing.

Another aspect is the amount of force used. Example: killing someone who attacks you is justifiable; capturing them and torturing them is cruel. I think a lot of people would consider it inappropriate for the second to appear in a game.
With this thought:

[Entity] := [Person] | [Person][Entity]

[Person] := {member of a Sentient race}

Each entity in a world has a mapping of links to other entities. Each link carries relevant information: What do I think of this entity? I am more/less powerful than this entity.

A Society is a set of directorates, defining rules of engagement between entities which follow that Society.

An Entity which conforms to a certain Society will judge the actions of another Entity, by comparing the actions to the rules.

An Entity which conforms to a Society will try not to break the rules of that Society when making decisions about its actions. Unless pressed by more powerful internal forces, which can be mapped from the 36 basic storylines (jealousy, threat on one''s life, threat on a child).

QCS?

George D. Filiotis
Are you in support of the ban of Dihydrogen Monoxide? You should be!
Geordi
George D. Filiotis
Whoa, Greensboro, I live in Charlotte, would you know
if that class is taught here.

Pardon me, I haven''t read all the posts yet, so perhaps
someone has made the correction.
Waaaayyy back on the first page of this highly interesting
thread was an anonymous poster,

quote:
--------------------------------------------------------------------------------
Original post by Oluseyi
What is a plot? A sequence of occurences with some form of correlation, and preferrably some dramatic drive.
...
If we can create environments that supply the first, and the user supplies the second, then why can''t we develop coherent and powerful plots from that? That''s the objective here.

--------------------------------------------------------------------------------

I used to think this was the case. Apparently many logic oriented people think that is the correct definition (MIT computer dept, etc).

But this Xmas I changed my tune. I started reading some books by writers, and by those who teach writing, and they disagree. According to them, writing a story requires, *and is defined by* a meta-structure.

It''s not a series of events that happen to be related, it''s a larger picture where the events just flesh out the skeleton of the story. The events *necessarily* move towards an ending.


Here''s my problem, our dear and wonderful mod was talking
about plot. The ap was talking about story. They are different.
The mod is right about plot; the ap is right about story.
There most certainly is a structure to a story.
One of those elements is a plot. In support of my argument,
we call plot twists the unexpected events. Please notice I
say events.
Shrek is a good example. The story is one that we''ve seen
before. The plot twist(an event or you could say a condition)
was that the princess was cursed to look like a human. There''s
another problem, the curse was a condition but was revealed
in an event so to me it still fits my definition of plot twist.
Even if such a plot twist can only be defined as a condition
and has no chance to be defined in any way as an event it
would most likely then be called a premise, which is part of a
story and affects a plot. By a strange coincidence I actually
know what the two relationships are called-being a part and
affecting something, I''d have to look it up though. Find
WordNet, read the documentation and you''ll know what I mean.

Also, I think that MMORPGs seem to be very much like the
''millieu'' stories the ap also mentioned.

I believe I actually have a pertinent question though, what
would be easier to implement in a game, the original idea of the
post or something close to it as has been suggested, or
something akin to a massive a-life exercise. I suppose the
posted idea would be good for RPG''s and the second for
MMORPG''s or perhaps simulated MMORPG''s(where the characters
are all NPC''s instead of avatars and you don''t go online).
You make an important point there. Plot or Story...
Geordi
George D. Filiotis
Sorry I haven''t responded to this in a while; I''m up to my eyelids in work. I just want y''all to know that I''m paying close attention (good distinction between "story" and "plot"), and have some updates to share as soon as I can find a few spare hours to marshall my thoughts. For example, we had a guy from some film school last Friday at the Ashy Dialogues and we discussed a lot of interesting thematic elements - some pertinent, some irrelevant, all interesting.

Hopefully, I''ll be able to provide details soon (maybe this weekend).

[ GDNet Start Here | GDNet Search Tool | GDNet FAQ | MS RTFM [MSDN] | SGI STL Docs | Google! ]
Thanks to Kylotan for the idea!

Advertisement
Time to ressurect this thread.

To summarise:
  1. The grand objective is to create a theoretically sound and complete system whereby plot elements and choices can be coherently presented to the player/user so as to form a consistent and entertaining narrative. Other than the overarching use of directing the user''s experience in the virtual world, this could find application in spreading the user''s fame within the world, in conveying information (with appropriate hyperbole, exaggeration and inaccuracies) from one part of the virtual world to another, or from one character/group of characters to another.


  2. There are the two approaches of "aggressive" and "passive" furtherance of the user narrative. The aggressive school of thought contends that the story should be "brought to" the user if the user does not seek out the story. In the context of games this is highly logical because story-driven games usually have some form of definite objective. The passive camp holds the alternative opinion that the users should be free to simply explore vast vistas and the environmental interactivity, and ignore the "quest" if they so desired. Both approaches are valid, and I borrow from both in constructing my viewpoint.


At this point it becomes necessary to introduce at least one example scenario to concretize discussion.
Assuming the oh-too-familiar medieval setting, our hero is a rustic woodsman. There is a broad threat of impending doom, hereinafter referred to as the Menace. By some "twist of fate" (aka designer technique to draw user into quest), the user is given motivation to pursue a course of events that will lead, eventually, to the Menace, with the obvious objective being to destroy said Menace. A nice, familiar example is the brutal butchering of the hero''s family and a desire to see justice done (not revenge!)

At this point the narrative splits into the aggressive path of seeking out the perpetrators of said ghastly act, and the passive path of retreating into the countryside, healing emotional wounds, remarrying and building a new family. Since we desire flexibility and non-linearity, we also encompass the option of remaining in the same location and taking on any job for sustenace as part of the passive path.

Proponents of the aggressive approach will then encourage that the Menace be brought close to home - say, pillaging a nearby village or having a straggled visitor appear with news of sighting the murderers nearby. The villagers would then rally and encourage the user to seek them out: "Sven, you hafta do what''s right by Myrna" (Myrna being murdered wife). However, the user would still have the option to ignore the threat, though it would gradually increase until the user''s very village was occupied.

Eventually, in the aggressive approach, the user will be forced to take action (and reluctant heroes make for such compelling characters because they are so much more like the rest of us).

The passive approach would allow the user to simply remain as-is and experience the virtual world. While this approach has its merits, it doesn''t provide much "game" and therefore will not be pursued in this discussion on this forum.

Obviously, in order to motivate the player towards the designer-intended path (without resorting to "force") there needs to be a method of notification - receiving news from other places. For consistency, NPCs and locations also need to be able to react to events, and maintain a sense of history. Since actually modelling the chronological memory of every object is ridiculous (and redundant for areas never visited), I proposed the notion of an event node.

  1. Event nodes signify what happened, when, where and who was involved. The reasoning was that, and I quote
    A level is a geographical location, and is unimportant in and of itself; it is what transpires at that location that creates story/drama/tension/etc. Locations could (should!) be dynamic, responding to events. By this I mean, the installment of a despotic tyrant would probably lead to widespread poverty, so buildings would begin to fall into disrepair and people would look more gaunt, etc. See Black & White''s implementation of responsive environment wrt how you rule/reign/govern your world.


The introduction of this concept spawned a bit of discussion on the necessity of there being a "story" to drive the user back towards the goal, and the instrinsic necessity of the goal. While I at the time advocated the position that the "ultimate objective" could potentially be dispensed with, subsequent discussion led me to realize the decline in entertainment value were such to happen. Thus the modified principles of the aggressive path articulated above.

The advent of events and the concept of notification/communication then led, in other discussions, to the realization of the necessity of a means of representing relationships. Information does not randomly disperse. Elimintation means of public information such as newspapers, television and radio, information is passed person-to-person between friends, colleagues, acquaintances and the chance person next to you at the bus stop, for example.

  1. Relationships between two entities are defined as a pair of "links" where each link has properties that represent level of friendliness, respect, trust and other such qualities. Note that the values are not bi-directional! Peter liking Jane does not mean Jane doesn''t think Peter is a slut! Placing these paired links as edges in a directed graph (in which the entities are the nodes) allows secondary knowledge (Jane will talk to Billy because he is Peter''s friend, but since she doesn''t trust Peter she is also careful with Billy). A further emergent property is that the lowest-cost edge is the determinant of behavior (such that even though we would assume Jane wouldn''t like John because he''s friends with Peter and Billy, he and Jane know each other directly and independently of Peter and Billy, and as such have a great relationship). This would allow for the modeling of complex relationships and behaviors at no additional overhead. An example behavior would be hearing bad things about a close friend, and taking them with doubt since the relationship link between the primary and friend is stronger than the primary and the news source. If, however, the news turned out to be true, the loss of trust would be more severe...


These are the four core elements identified so far. Please feel free to critique this list, as always. This is an organic "document" and a product of the genius of the individuals who frequent this forum and have contributed to this discussion.

In class we will start discussing AI methods of planning and organization this coming week. As usual, I''ll keep this thread updated. A fellow participant and I are planning to write a paper based on research, analysis and discussion carried out for this class, and to attempt implementation. I''ll keep you posted.

I wanna work for Microsoft!
[ GDNet Start Here | GDNet Search Tool | GDNet FAQ | MS RTFM [MSDN] | SGI STL Docs | Google! ]
Thanks to Kylotan for the idea!
This is Symphonic''s fault; he linked to this thread from another one and I jus read through all four pages. Here''s a major update:

The course was an effective disaster. Tons of potential, completely squandered by the conceptual myopia and intellectual laziness of the professor. She would invite speakers about whom she knew nothing other than a blurb that they were involved in "interactive art" - the last lady had us sitting through a mind-numbing, parallax-scrolling Quicktime presentation of some sort that had me asleep within five minutes (and drooling on myself too!)

Then we studied the various works of her friends (the overemphasis on the works of others rather than on investigation of unique definitions and technologies is very infuriating) as well as ancillary, non-critical material such as dance, film techniques and so forth. The lady is graphics-obsessed (I fought my way out of using Alice, but I can tell she''s not pleased) and never sees "narrative" in contextually rich material presented in non-3D form (she, however, sees narrative in badly modeled and animated multicolor snowmen dancing in a circle on a red stage...)

After this week I''ll be largely free, and will start writing up my thoughts on the matter. I''ll also be implementing some of them over the summer.

[ GDNet Start Here | GDNet Search Tool | GDNet FAQ ]
[ MS RTFM [MSDN] | SGI STL Docs | Boost ]
[ Google! | Asking Smart Questions | Jargon File ]
Thanks to Kylotan for the idea!
quote:
Original post by Anonymous Poster
But this Xmas I changed my tune. I started reading some books by writers, and by those who teach writing, and they disagree. According to them, writing a story requires, *and is defined by* a meta-structure.




Those who teach writing are the damned.


/* what matters most is
how well you
walk through the
fire. */
/* what matters most ishow well you walk through thefire. */
This post courtesy of the 18 months ago gnomes.

ld
No Excuses

This topic is closed to new replies.

Advertisement