{"id":95,"date":"2006-06-20T10:55:30","date_gmt":"2006-06-20T08:55:30","guid":{"rendered":"http:\/\/www.tale-of-tales.com\/DramaPrincess\/wp\/?p=95"},"modified":"2006-06-20T10:56:18","modified_gmt":"2006-06-20T08:56:18","slug":"a-single-goal-out-of-all-opportunities","status":"publish","type":"post","link":"https:\/\/www.tale-of-tales.com\/DramaPrincess\/wp\/?p=95","title":{"rendered":"A single goal out of all opportunities"},"content":{"rendered":"<p><em>This is an updated and elaborated version of <a href=\"http:\/\/www.tale-of-tales.com\/DramaPrincess\/wp\/?p=77\">Decision filters<\/a>. 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&#8217;t want until a single opportunity remains.<\/em><\/p>\n<p><em>Notes about implimentation are in<\/em> <code>monotype<\/code>.<\/p>\n<p><strong>Objective list of opportunities<\/strong><br \/>\nEvery 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.<\/p>\n<blockquote><p><code>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.<\/code><\/p><\/blockquote>\n<p><strong>Personal list of opportunities<\/strong><br \/>\nEvery 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 <strong>fascination<\/strong> for each opportunity is stored.<\/p>\n<p><strong>Objective list of objects<\/strong><br \/>\nThere 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.<\/p>\n<blockquote><p><code>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 <strong>intimacy<\/strong> of the relationship with each actor and a column for each actor's <strong>attitude<\/strong> 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.<\/p>\n<p><em>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 <strong>all<\/strong> relationships move a bit towards indifference <strong>except<\/strong> the ones that are currently involved in an interaction.<\/em><\/code><\/p><\/blockquote>\n<p><strong>Selection filters<\/strong><br \/>\nOnce in a while, an actor goes through the whole list and removes the opportunities that don&#8217;t interest it. This happens through a series of filters. After each filter, the number of desirable opportunities is reduced.<\/p>\n<blockquote><p><code>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.<br \/>\nSelection 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.<br \/>\nWhere 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).<br \/>\nRunning the different filters can be spread out over several frames to optimize performance.<\/code><\/p><\/blockquote>\n<ol>\n<li><strong>Filter of Availability<\/strong><br \/>\nRemoves the opportunities of objects that are not available.<br \/>\n<em>E.g. because they are being used by another actor.<\/em><\/li>\n<li><strong>Filter of Distance<\/strong><br \/>\nRemoves the opportunities of objects that are too far away.<br \/>\nThis depends on their type: characters can be further away than objects.<br \/>\n<code>Type is deduced from the category property of an object.<\/code><\/li>\n<li><strong>Filter of Condition<\/strong><br \/>\nRemove the opportunities of which the condition cannot be satisified.<br \/>\n<em>E.g. passionate kissing if the actor is a young child and the object an adult.<\/em><\/li>\n<li><strong>Filter of Intimacy<\/strong><br \/>\nRemoves the opportunities that match the relationship the least.<br \/>\n<code>Based on the intimacy level of the opportunity modified by the actor's fascination for this opportunity.<\/code><\/li>\n<li><strong>Filter of Fondness<\/strong><br \/>\nRemoves the opportunities of objects that the actor likes least.<br \/>\n<code>Based on the intimacy level of the relationship modified by the actor's attitude.<\/code><\/li>\n<li><strong>Filter of Goal<\/strong><br \/>\nSelects a single opportunity and makes it the actor&#8217;s goal.<br \/>\n<code>Random selection out of the remaining opportunies.<\/code><\/li>\n<\/ol>\n<p>Every filter (except for the first and the third) uses a little bit of randomness to allow for unexpected choices.<\/p>\n<p><em>I&#8217;m unsure about the order of the filters of Intimacy and Fondness. Should the actor select objects first, or opportunities?<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>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&#8217;t want until a single opportunity remains. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-95","post","type-post","status-publish","format-standard","hentry","category-development"],"_links":{"self":[{"href":"https:\/\/www.tale-of-tales.com\/DramaPrincess\/wp\/index.php?rest_route=\/wp\/v2\/posts\/95","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tale-of-tales.com\/DramaPrincess\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tale-of-tales.com\/DramaPrincess\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tale-of-tales.com\/DramaPrincess\/wp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tale-of-tales.com\/DramaPrincess\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=95"}],"version-history":[{"count":0,"href":"https:\/\/www.tale-of-tales.com\/DramaPrincess\/wp\/index.php?rest_route=\/wp\/v2\/posts\/95\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tale-of-tales.com\/DramaPrincess\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=95"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tale-of-tales.com\/DramaPrincess\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=95"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tale-of-tales.com\/DramaPrincess\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=95"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}