This is an updated and elaborated version of Decision filters. It deals with the way in which the global list of opportunities advertised by all objects is reduced to a single goal by an actor. This time, rather than ordering the list, we simply remove the items we don’t want until a single opportunity remains.
Notes about implimentation are in monotype
.
Objective list of opportunities
Every object has a list of opportunities with corresponding intimacy values. All opportunities of all objects in a scene are collected in an global, objective list. All actors in the scene consult this list.
The opportunities list is an array with a row for every opportunity and columns for object ID, intimacy, condition, etc. This list can be created at runtime, or saved with the scene. This list is static and only changes if the scene changes.
Personal list of opportunities
Every actor makes a list of the same size and order where it can keep its personal notes about the opportunities. This is where the dynamic fascination for each opportunity is stored.
Objective list of objects
There is a global list of all objects in the scene. This includes environments, inanimate items and actors. This is where all data about each object is stored. This list can be consulted by every actor when they need to know something about an object.
The global list of objects is an aray with a row for each object and a column for category, state, position, etc, a column for the the level of intimacy of the relationship with each actor and a column for each actor's attitude about this relationship. The latter are personal to an actor but shared by both members of the relationship, which is why the are stored in an objective list. To simplify the array, intimacy and attitude could be stored in a single (vector) column.
The "state" column keeps track of an object's availability. This includes whether or not another actor is interacting with it. The latter serves as a parameter every time relationships are evaluated due to seperation: once in a while all relationships move a bit towards indifference except the ones that are currently involved in an interaction.
Selection filters
Once in a while, an actor goes through the whole list and removes the opportunities that don’t interest it. This happens through a series of filters. After each filter, the number of desirable opportunities is reduced.
Basically, the actor keeps a list of numbers: row numbers of the opportunities list. With each filter it removes the numbers of rows that it doesn't want to choose.
Selection parameters are relative to the available opportunities. If they would be absolute, there would be a chance that no goal remains after the filtering process.
Where possible the filters are ordered for optimal performance: filters that are processor-intensive should be executed as late in the chain as possible (i.e. with as small a number of opportunities as possible).
Running the different filters can be spread out over several frames to optimize performance.
- Filter of Availability
Removes the opportunities of objects that are not available.
E.g. because they are being used by another actor. - Filter of Distance
Removes the opportunities of objects that are too far away.
This depends on their type: characters can be further away than objects.
Type is deduced from the category property of an object.
- Filter of Condition
Remove the opportunities of which the condition cannot be satisified.
E.g. passionate kissing if the actor is a young child and the object an adult. - Filter of Intimacy
Removes the opportunities that match the relationship the least.
Based on the intimacy level of the opportunity modified by the actor's fascination for this opportunity.
- Filter of Fondness
Removes the opportunities of objects that the actor likes least.
Based on the intimacy level of the relationship modified by the actor's attitude.
- Filter of Goal
Selects a single opportunity and makes it the actor’s goal.
Random selection out of the remaining opportunies.
Every filter (except for the first and the third) uses a little bit of randomness to allow for unexpected choices.
I’m unsure about the order of the filters of Intimacy and Fondness. Should the actor select objects first, or opportunities?
Posted on July 3, 2006 at 11:22 pm
Enthusiasm seems to be missing from the selection filters!
Posted on July 23, 2006 at 12:08 am
[…] Since tasks are not connected to anything in the game world, they need to be “injected” into the opportunities list artificially. Since they are very important but they should be interruptable by very loved objects, we can add them to the opportunities list in between the filters of Intimacy and Fondness. […]
Posted on July 24, 2006 at 12:04 am
[…] For this reason, the distance factor should weigh heavier on the selection process if the distance is extremely small. This probably applies to both autonomous actors as player-controlled actors. It’s a good idea to remove obects that are too far away early in the selection process. But we should add conditions that make sure that objects that are very close by get VIP treatment. When doing the distance check, we could flag objects that are very close to ensure that at least one opportunity offered by this object makes it to the final list. Except when this objects offers no suitable opportunities. Or in Drama Princess speak, the Filter of Condition should not care about this VIP treatment. The Filter of Intimacy should pick the opportunities from this object that match the relationship best. And the Filter of Fondness could be skipped for the VIP object. […]