Love/Hate. Copyright Pixel Crushers. All rights reserved.

Size: px
Start display at page:

Download "Love/Hate. Copyright Pixel Crushers. All rights reserved."

Transcription

1 User Guide v1.9.3

2 Love/Hate Copyright Pixel Crushers. All rights reserved.

3 Table of Contents Welcome to Love/Hate... 4 How to Get Help...4 Installation... 5 Unity and 2D Physics...5 Example Scene... 6 How Love/Hate Works... 7 Setup Overview... 8 Faction Database... 8 Traits... 9 Presets...9 Factions...10 Faction Members and Faction Manager...13 Factions vs. Faction Members...13 Faction Manager...14 Faction Member...15 Stabilize PAD...19 Emotion Model...20 Faction Member Debugger...22 Traits on Other Objects LOD Manager Deeds Deed Template Library...25 Deed Reporter...27 Tying Deeds to Gameplay...27 Deed Evaluation...28 Automatic Character Interaction Deed Reaction Events...29 Greeting Trigger...29 Gossip Trigger...30 Aura Trigger...30 Saving and Loading Scripting API Reference...33 Namespace...33 LoveHate...33 FactionManager...33 FactionMember...33 DeedReporter...35 Event Handlers...36 Emotional State...40 Accessing Traits...40 Time Modes...40 Adventure Creator Support Bolt Support Dialogue System Support Emerald AI Support ICE Creature Control Support Makinom Support ORK Framework Support PlayMaker Support plygame Support TradeSys Support UFPS Support Behavior Designer Support Quest Machine Support Node Canvas Support Zone Controller Support Faction Database Templates...66 Simple Template...66 RPG Template...66 OCEAN Template...66 MegaOCEAN Template...67 Emotion Model Templates Deed Evaluation Function... 68

4 WELCOME TO LOVE/HATE Love/Hate is a relationship and personality simulator for Unity. It models characters' feelings about each other using emotional states and value-based judgment of deeds. With Love/Hate, your characters will have personalities and emotional states. Love/Hate uses powerful, customizable personality and emotional state models. maintain relationships. Love/Hate tracks how different characters and groups (factions) feel about each other, allowing you to define a dynamic web of social ties among your characters. judge and remember deeds. Characters witness deeds committed by others, judge them according to their own personality and relationships, and remember them. gossip with other characters. Characters share memories realistically, allowing news of actions to spread organically. Love/Hate doesn t replace reason-based AI such as finite state machines and behavior trees, but instead works alongside them to provide interesting, character-based motivation. Love/Hate is the product of several years of development in realtime simulation of emotions and value-based appraisal, incorporating the latest academic and industry research. Despite its sophistication, Love/Hate is very lightweight and CPU efficient at runtime. It includes complete, fully documented source code. Love/Hate also provides integration with many third party assets, such as Hutong Games' PlayMaker, Opsive's Behavior Designer and UFPS, Icebox Studio's Adventure Creator, Squared 55 s ICE Creature Control, Gaming Is Love's ORK Framework, UtopiaWorx's Zone Controller, and Pixel Crushers Dialogue System for Unity. (These products must be purchased separately.) How to Get Help We re here to help! If you get stuck, have questions, or want to request a feature, please us: support@pixelcrushers.com 4

5 INSTALLATION Love/Hate imports into this folder structure: Assets / Plugins / Pixel Crushers: Common: Shared assets used by Pixel Crushers products. LoveHate: Example: Examples of Love/Hate's features; you can safely delete this. Scripts: Complete source code. Templates: Starter templates for faction databases and deed templates. Third Party Support: Packages to help integrate with third-party products. You can find the package version in Pixel Crushers/_README.txt and version release notes in Pixel Crushers/_RELEASE_NOTES.txt. Third party support packages import into Assets / Pixel Crushers. Unity and 2D Physics Love/Hate supports 2D physics as well as 3D physics. In Unity 2018+, the 2D physics package (Physics2D) can be enabled or disabled, so Love/Hate s code for Unity doesn t assume that Physics2D is available in your project. To tell Love/Hate that Physics2D is available if you re using Unity 2018+, select menu item Tools > Pixel Crushers > Common > Misc > Enable Physics2D Support. If you re using Unity 2017 or older, you won t see this menu item. If you want to manually enable Physic2D support instead, select Edit > Project Settings > Player, and add the scripting symbol USE_PHYSICS2D as shown below: If you re using Unity 2017 or older, you can skip this step. Love/Hate s example scene is in 2D. If you re using Unity 2018+, you will need to enable the Physics2D package and add enable Love/Hate support for it. 5

6 EXAMPLE SCENE Love/Hate s example scene is in 2D, but Love/Hate supports 3D as well. If you re using Unity 2018+, please see Unity and 2D Physics before playing the scene. The example scene demonstrates how the player's actions affect NPCs based on their personalities and their relationships to the target of the action. You play a visitor to a tiny kingdom with a bandit problem. The scene contains four NPCs that you can interact with. When you bump into an NPC, you can see her current faction information and click buttons to perform actions such as Flatter and Insult. As you perform actions, watch the faction information window and the NPCs' animations, which are driven by Love/Hate. The subtle halo around each NPC is her greeting range. When other characters enter it, she will greet them according to how she feels about them. If she likes the characters, she'll tell them about any of your actions that she's witnessed. This may change how those characters feel about you. The third party support packages come with their own example scenes. You can read more about these examples in their respective sections of the manual. 6

7 HOW LOVE/HATE WORKS Characters in Love/Hate are defined by three aspects: relationships, personality, and emotional state. They all use the range -100 to +100 and are affected at runtime by deeds. Relationships measure the degree to which a character feels something for another character. It s possible to have multiple types of feelings (called relationship traits) between characters, such as respect, lust, and duty. By default, there is one relationship trait called affinity in which -100 is absolute hatred and +100 is absolute love. In Shakespeare s Romeo and Juliet, Juliet might have +100 affinity to Romeo. But Tybalt, who hates Romeo s family, might have -100 affinity to Romeo. Personality is defined by a number of personality traits that you can specify. In a simple model, you can define a single personality trait for example, virtue. In Arthurian legend, the angelic Galahad might have +100 virtue, whereas the evil usurper Mordred might have -90 virtue. As with relationship traits, Love/Hate lets you define personality traits for your project. It includes several preconfigured templates such as OCEAN, a more sophisticated model composed of five traits. Personality is usually fairly static. For example, a ruthless, cool-headed spy typically exhibits the same personality throughout the game. However, it s possible to configure Love/Hate to automatically or manually adjust personality trait values during play. Love/Hate also uses personality traits to describe deeds. This comes into play when characters witness deeds performed by others. Mordred s murder of King Arthur might be -100 virtue. The wicked Morgan le Fay, whose personality aligns with the deed s, would be especially pleased to witness it. Galahad, on the other hand, would be especially displeased by the unvirtuous deed. Emotional State is defined by three values: Pleasure, Arousal, and Dominance (PAD) in the ranges -100 to A character's emotional state can change moment-to-moment. For example, when a character witnesses a deed that it agrees with, its Pleasure value increases. Emotion models allow you to summarize the three PAD values into categories. By default, Love/Hate uses a model which categorizes PAD values into eight different single-word descriptions called temperaments. For example, a character who is currently at Pleasure +100, Arousal +100, and Dominance +100 feels "Exuberant." A character who is currently at Pleasure -100, Arousal +100, and Dominance -100 feels "Anxious." You can use these single-word descriptions to drive your characters' behavior for example, playing a nervous animation when the character feels "Anxious", or speaking different dialogue options based on temperament. If you want finer detail than the Temperament model's eight categories, you can use other emotion models such as the OCC model, which categories the three PAD values into 22 different categories. Deeds are information about actions that occur at runtime. You'll usually define personality traits at design time and let Love/Hate update relationships and emotional state automatically at runtime in response to gameplay actions. To report deeds to Love/Hate, you'll tell Love/Hate that a character committed a deed to another character. Witnesses will then update their relationships and emotional states based on how they judge the deed. Friendly characters can also share memories of deeds (called rumors) as they run into each other. You can also manually adjust personality values, relationship values, and PAD values in your own scripts or visual scripting systems. 7

8 SETUP OVERVIEW To set up Love/Hate, you'll follow these steps: 1. Create a faction database. 2. Configure faction members (characters). 3. Inform Love/Hate when deeds (game actions) occur. The sections below describe these steps in detail. FACTION DATABASE A faction database is an asset that contains the following user-definable information: Personality Traits are values used to define personalities Relationship Traits are values used to define relationships Presets are predefined values, useful as shortcuts A faction is a set of personality traits and relationships assigned to a character or group 8

9 To create your faction database, you can copy a template or create a new, empty faction database. Using a Template Faction Database The Templates folder contains starter databases that use various psychological models such as the OCEAN five-factor model commonly used in behavioral psychology. To use a template, select it in the Projects view and press Ctrl-D ( -D) to duplicate it. Using an Empty Faction Database To create a new, empty faction database, select menu item Assets > Create > Pixel Crushers > Love/Hate > Faction Database. Traits A trait is a value in the range [-100,+100], where +100 means strongly agrees and -100 means strongly disagrees. Traits apply to personalities and deeds. Love/Hate lets you define the traits you want to use in your project. You can make them as streamlined or complex as you want. The Templates folder contains several starter databases with predefined traits for psychological models such as the OCEAN five-factor model commonly used in behavioral psychology. Example: In the example scene, the faction database defines a trait named Lawfulness. The Princess, a ruler devoted to upholding the law, has a high Lawfulness value. Horn Girl, a Robin Hood-style bandit, has a negative Lawfulness value. Traits are what characters value, not necessarily what they do themselves. A character might not be confident herself, but she might be attracted to confidence in others. To define a new trait, click the + button in the lower right of the Traits list. Presets A preset is a predefined set of traits, useful as a shortcut. You can use presets to assign default values to factions. Example: In the example scene, the Bandit preset defines trait values for a typical bandit. This preset was applied to Horn Girl and Pink Girl. Then they were customized further to make each character unique. Later in the manual, you'll see that traits will also apply to deeds and other entities such as locations. You can define and apply presets to these, too. To define a new preset, click the + button in the lower right of the Presets list. Enter a name and optional description. Then click the horizontal bars to the left of the preset name to edit its values. If you want to organize presets in groups, you can use forward slash characters in the preset name. Example: Say you have several presets for monsters. You can name them Monsters/Orc, Monsters/Goblin, Monsters/Kobold, and so on. In faction menus, they will all be grouped in a submenu Monsters. Note: If you change a preset s values, characters or deeds to which you ve previously applied the preset will not be automatically updated with the new preset values. 9

10 Factions A faction is a social circle. It defines a set of personality traits and relationships. Usually a character will have its own personal faction, although interchangeable generic NPCs, such as generic goblins, might share a common faction instead. A character who belongs to a faction is called a faction member. To define a new faction, click the + button to the lower right of the Factions list. Enter a name, optional description, and color for this faction's gizmo in the Scene view. Then click the horizontal bars to the left of the faction's name to edit it. If you want to organize factions in groups, you can use forward slashes in their names, such as Titans/Cronos and Titans/Themis. Note: Each unique character will usually have its own faction! 10

11 Parents A faction can belong to any number of parent factions. To add a parent, click the + button in the lower right of the Parents list. You only need to specify direct parents, as those parent factions may have their own parents (this faction's grandparents) and so on. Above, Pink Girl has Bandits as a parent. She inherits any relationships that Bandits have toward other factions. Personality Traits Use the sliders or input fields to set the faction's personality trait values. To apply a preset, click the + button in the lower right of the Personality Traits list. If you select (Average from parents), it will average the current values of any assigned parents. If you select (Sum from parents), it will add the parents' values. (Factions don't inherit these values from their parents by default.) In the screenshot on the previous page, Pink Girl's Lawfulness is -40, indicating that she has disregard for the law. Her Kindness is 40, indicating that she values kindness. The Trait Inheritance Type dropdown lets you select Average or Sum. This specifies how personality traits are inherited from parents when calling FactionDatabase.InheritPersonalityTraits() in your scripts at runtime, or using equivalent visual scripting methods. Relationships Factions have relationships to other factions. Each relationship specifies a set of relationship traits in the range [-100, +100]. There will always be an Affinity trait, where +100 indicates absolute love and -100 indicates absolute hatred. In the screenshot on the previous page, Pink Girl has a strong +80 affinity to her idol, Horn Girl, and a moderately strong +50 affinity to her sister, the Princess. You can choose to add more relationship traits, such as Rivalry or Obligation. You might use Obligation in an honor-based environment such as a traditional samurai tale. Rivalry makes a good counterpoint to Affinity in romance stories. Example: In a sci-fi RPG, Drake, the xeno-archaeologist player character, is forced to travel with Ariana, a tough artifact smuggler. Ariana starts with low Affinity to Drake and high Rivalry she wants to steal the artifacts; Drake wants to preserve them. As they travel the galaxy, Ariana begins to appreciate Drake's views and abilities. Her Affinity increases and her Rivalry decreases until, at some point, romance can bloom. If her Rivalry remains too high, however, it might override her growing affection and prevent romantic options. Note that relationships are one-way. Example: A third character has a secret crush on Drake. She has a high Affinity to him, but Drake doesn't even know that she exists, so he has no Affinity to her. To add a relationship, click the + button in the lower right of the Relationships list. Relationships can be inheritable (the default) or non-inheritable. To mark a relationship noninheritable, untick the checkbox next to the subject's name. To view relationships that are inherited from parents and ancestors, expand the Inherited Relationships foldout. This will display a new section containing all inherited relationships and which ancestors they're inherited from (but not all children of targets of inherited relationships since this could be an extremely big list). 11

12 The Relationship Inheritance Type dropdown lets you select Average or Sum. This specifies how relationships are inherited from parents. The % Judge Parents value, if non-zero, specifies how much to affect relationships to the subject's parents when updating a relationship to a subject at runtime. 12

13 FACTION MEMBERS AND FACTION MANAGER Factions vs. Faction Members Love/Hate characters are faction members. It's important to understand the distinction between factions and faction members. A faction is defined in a faction database. Its properties are relatively abstract. More than one faction member can belong to a faction. A faction member exists on a GameObject in a scene. Its properties deal with the specific experiences of the GameObject what it sees (witnessing deeds) and how it feels (temperament). The hive mind is a classic sci-fi trope, epitomized by the Borg in Star Trek and the Zerg in StarCraft. You could think of a faction as the hive mind. Each faction member is an individual unit with its own eyes, ears, and mouth. For unique characters, there will be a one-to-one relationship between a faction member and her unique faction. For generic characters, multiple faction members may share the same faction. Faction Faction Member Abstract (Faction Database) Instanced (GameObject) Values, Parents, Relationships Emotions (PAD), Memories Faction Member Emotions (PAD) Memories Faction Member Emotions (PAD) Memories Faction Member Emotions (PAD) Memories Faction: Princess Values Parents Relationships Faction: Goblin Values Parents Relationships Another way to look at it, from a technical standpoint, is that factions contain data you can define at design time, while faction members contain data such as memories and emotional states that can only be generated at runtime based on deeds. 13

14 Faction Manager The faction manager helps faction members talk with each other in the scene. If your scene has any faction members, it should also have a faction manager. To set it up a faction manager: 1. Select menu item GameObject > Love/Hate > Faction Manager. (Or just add a Faction Member component to a new, empty GameObject in your scene.) 2. Assign your faction database. 3. You can increase Witnesses Per Update to increase the amount of deed processing done per frame. 4. To allow faction members to witness and evaluate deeds that they themselves create, tick Can Witness Self. 5. If you want to log Love/Hate activity to the console, tick Debug. At runtime, the Faction Manager s inspector view will also show the current state of the faction database s runtime instance: 14

15 Faction Member A faction member is an NPC (a GameObject in your scene) that belongs to a faction. To configure an NPC as a faction member, select it, and then select menu item Component > Pixel Crushers > Love/Hate > Faction Member. If your scene already has a faction manager, the Faction Member script will find its faction database. Otherwise assign your faction database so you can select the faction from the dropdown menu. Faction members share these values with all members of the faction: 15

16 Shared Faction Values Parents Values Relationships In addition, each faction member stores its own data in the fields shown in the image above. Those fields are described below. PAD (Pleasure-Arousal-Dominance) PAD is an implementation of the Pleasure-Arousal-Dominance emotional model. (See for more information about this model). The values are in the range [-100,+100]. PAD Values Pleasure (P): How happy or sad the character currently is. Arousal (A): How worked up and excited the character currently is. Dominance (D): How dominant or submissive the character currently feels. Happiness: The sum total of all pleasure values (positive and negative) over the character's lifetime. Excitability Threshold: The threshold above which the PAD values affect temperament. Temperament is an emotional state, such as Disdainful or Exuberant, based on the character's PAD values. A high excitability threshold means the character is less easily moved into an emotional state. Temperament P A D Exuberant Bored - - Dependent Disdainful Relaxed Anxious Docile + - Hostile Neutral If you want a character's PAD values to gradually return to target values over time, add an Equalize PAD component, which is described later in the manual. If you want to define a more complex emotional model than Temperament, you can create an Emotion Model and add an Emotional State component to your faction member. This is described in its own section further down. 16

17 Vision Eyes Some deeds can only be witnessed if the NPC can see them being committed. To determine visibility, the NPC runs a raycast from the Eyes transform to the actor s origin. If Eyes is unassigned, it will use the NPC's transform, which is usually at its feet. Sight Layer Mask The sight layer mask specifies which layers to check when running the visibility raycast. For a more sophisticated vision model, add a Can See Advanced component (documented at the end of this chapter). Impressionability Impressionability specifies how easily the faction member changes its faction s personality traits when it witnesses friends commit deeds. A faction member with high impressionability will align its personality traits more quickly with the deeds traits. Example: Say a street urchin befriends a thief. As the urchin witnesses the thief commit deeds such as burglary that have negative Lawfulness personality trait values, the urchin s own Lawfulness personality trait will gradually become more negative. Memory Actor Witness Target Characters remember rumors, which are subjective memories of deeds that they've witnessed or heard about. Short term memory affects the character's PAD state. Long term memory is used to gossip with other characters. Example: If you steal from the Princess, she'll remember a negative rumor about you. Her affinity to you will decrease. It will decrease her Pleasure and increase her Arousal. If you're more powerful than she is, her Dominance will decrease. When she encounters a friend, she'll share this rumor. The friend will remember her own rumor about your deed. If the bandit Horn Girl sees you steal from the Princess, or hears about it from a friend, she'll also remember a rumor about you. But, since she doesn't like the Princess, this rumor will improve her affinity to you and increase her Pleasure. The values described below influence how the character subjectively evaluates the impact of a deed. They define how much importance the character places on different aspects of deeds. 17

18 Trait Alignment Importance This value affects how much trait alignment affects the impact of a deed. When a deed's trait values exactly match the character's trait values, alignment is 100%. When the deed's trait values are in complete opposition with the character's trait values, alignment is -100%. If you set Trait Alignment Importance to 100, this will fully double the impact of deeds that completely match or oppose the character's traits. If you set it to 0, trait alignment will not affect the impact at all. Deed Impact Threshold All witnessed deeds will affect the character's PAD, but only important deeds are worth remembering. The character will only remember rumors whose perceived impact is higher than this threshold. The perceived impact of a deed is determined by how well the deed aligns with the character's values and the character's affinity to the target. Acclimatization Curve When characters witness repeated deeds on the same target, such as repeated flattery, the deed's impact will diminish. The acclimatization curve specifies how quickly the impact falls off. With the default value, the character will stop caring any further about the deed after 20 repetitions. However, once the deeds fall out of memory the curve is reset. Power Difference Curve This curve influences how the character's dominance value is affected. When a character learns about a deed that helps a friend (include the character itself), it gains dominance. When a character learns about a deed that injures a friend, it loses dominance. The Power Difference Curve helps negate dominance loss and increases dominance gain. The curve values are on a scale of 0 to 1, where 1 means an additional 100% of the dominance change is gained. Example: The actor casts a Fear spell, which normally decreases dominance by 10. The character is power level 6. The actor is power level 1. The power difference is 6 1 = 5. The character's Power Difference Curve at 5 is 0.8 (80%). 80% of 10 is 8. Since the character is more powerful, instead of taking a -10 hit to dominance, it only takes a hit of = -2 to dominance. Max Memories To conserve memory, characters limit the number of things they'll remember. When memory is full, old rumors will be forgotten to make room for new. If you tick Sort Memories, lower-impact rumors will be forgotten first. Short Term Memory Duration This is the maximum amount of time that a rumor will stay in short term memory. The actual duration of each rumor will be scaled down based on the faction member's perceived importance of the rumor, which is equivalent to how much it affects the faction member's affinity to the actor. If it increases the affinity by +50 (half of the maximum +100), the rumor will stay in memory for only half the duration specified by this field. While a rumor is in short term memory, it affects the character's PAD value. 18

19 Long Term Memory Duration This is the maximum amount of time that a rumor will stay in long term memory, which is scaled down based on the faction member's perceived importance of the rumor. While a rumor is in long term memory, the character can share it with friends it encounters. Memory Cleanup Frequency The character will check for expired memories on the frequency (in seconds) specified by this field. Sort Memories If ticked, memories will be sorted in increasing impact. This makes it easier for your scripts to find the most important rumor in a character's memory. There is a slight extra overhead required to insert the memory in sorted order, but in all but the most extreme cases the overhead is negligible. Debug Eval Func If ticked, the faction member will log its thought process to the console when it evaluates a rumor. You may find this information useful to help tweak your faction database settings. Stabilize PAD To make a faction member's PAD values gradually return to target values over time, add a Stabilize PAD component by selecting menu item Component > Pixel Crushers > Love/Hate > Stabilize PAD. Tick the values you want to affect, and then enter the target value and rate of change per second. In the screenshot above, arousal will stabilize toward zero at the rate of 1 per second. In the screenshot above, the Stabilize PAD component will gradually bring the faction member's Arousal to 0 at a rate of 1 unit per second. 19

20 Emotion Model If you want to define a more complex emotion model than the PAD's Temperament, you can create an Emotion Model and add an Emotional State component to your faction member(s). To create an emotion model, select menu item Assets > Create > Pixel Crushers > Love/Hate > Emotion Model. You can define any number of emotions. In the screenshot above, if a faction member's Pleasure is in the range [22,76], Arousal is [-61,23], and Dominance is [-45,55], the faction member's emotion will be Admiration. The Templates folder contains an emotion model that maps the 22 OCC emotions defined by behavioral psychologists. To apply an emotion model to a faction member, add an Emotional State component and assign the emotion model to the Template field. You can customize the model for each faction member. For example, if a faction member is particularly fearful, you can increase the ranges for the Fear emotion. At runtime, the inspector will show the faction member's current emotional state. 20

21 Can See Advanced To witness deeds that require a perception check, by default a faction member runs a raycast from its Eyes transform to the actor s origin. For a more sophisticated check, add a Can See Advanced component: This component lets you set any number of field-of-view arcs and specify additional raycast heights to check since the default height may only check the actor s feet. The scene view gizmos show the fields of view and the result of the last perception check (green means seen, red means not seen): 21

22 Faction Member Debugger You can add a Faction Member Debugger component to a faction member to get an in-game display of its state. You must assign a Faction Member Debug Canvas, which can be a GameObject or a prefab. A basic prefab is in the Templates folder. You can also assign a key to toggle the display on and off. 22

23 TRAITS ON OTHER OBJECTS You can add a Traits component to other non-faction member GameObjects to associate traits with them. To add a traits component, select the GameObject, and then select menu item Component > Pixel Crushers > Love/Hate > Traits. Love/Hate doesn't do anything itself with GameObjects that have Traits components. Instead, your own scripts or PlayMaker actions can examine the GameObject's traits to help make decisions. You could add traits to locations, items, even other creatures that aren't faction members. Example: In folklore, vampires can't enter churches or cross streams. A vampire game's faction database defines a personality trait named Purity. In the scene, the church and stream GameObjects have Traits components with high Purity values. When the vampire AI script decides where to go, it can try to avoid GameObjects with a high Purity value. You can use Traits in conjunction with an Aura Trigger (described further down in the manual) to affect characters that enter a trigger collider. The effect is based on how the character's traits align with the Aura Trigger's traits. 23

24 LOD MANAGER The Pixel Crushers common scripts include LODManager, which is a basic level-of-detail manager. To use LODManager, add the script to your character and define the level-of-detail distances. Set Monitor Frequency to the frequency (in seconds) at which the LODManager should check distance from the player to update the current level of detail. You can use LODManager to automatically adjust a faction member's memory cleanup frequency based on the character's distance from the player. When the player is close, the character will clean up memory according to the value of Memory Cleanup Frequency. When the player is far, it will reduce the frequency to conserve CPU. To use level-of-detail in your own scripts, simply implement the OnLOD(int level) method: public void OnLOD(int level) { // Change behavior based on the value of level, // where level 0 is the closest to the player. } 24

25 DEEDS A deed is a gameplay action that NPCs can witness. It consists of: Deed Tag: An identifying string such as Attack or Flatter used to categorize deeds Actor: The character performing the deed, usually the player Target: The character the deed is performed on Impact: A value in the range [-100,+100] indicating how harmful or beneficial the deed is Aggression: A value [-100,+100] indicating how aggressive or submissive the deed is Traits: Trait values that define the nature of the deed The most direct way to report a deed is to call FactionManager.CommitDeed() in a script. This is described in detail in the Scripting section of the manual. An easier way to report deeds is to use a Deed Template Library and a Deed Reporter. Deed Template Library A deed template is an abstract definition of a deed. It defines general attributes without specifying an actor or target. Deed templates are contained in a deed template library. To create a deed template library, select menu item Assets > Create > Pixel Crushers > Love/Hate > Deed Template Library. 25

26 To add a deed template, click the + button in the lower right of the Deed Templates list. Enter the deed template's tag and optional description. Then click the double bars to the left of the deed's tag to edit its attributes. Requires Sight Some deeds can only be witnessed if the character can see them being committed. Tick this if characters should perform a visibility check to witness the deed. Radius This is the reporting radius of the deed. If you want all characters to be able to witness the deed, set Radius to 0. Impact Use the slider or edit field to set the deed's impact, where -100 is the worst possible thing that could happen to the target and +100 is the absolute best. In the example above, flattery is a minor deed, so its impact is only +5. Aggression Use the slider or edit the field to set the deed's aggression, where -100 is the most submissive and +100 is the most aggressive. Aggression affects characters' dominance. For example, witnessing aggressive deeds against friends will make characters feel submissive. Traits 26

27 The remaining fields in the template are the trait values. Characters will compare the deed's trait values to their own trait values. The degree of alignment will modify the impact the deed has on them. Example: The Flatter deed has a Kindness value of 70. If a character has a negative Kindness value, indicating that she disdains kindness, the deed will not align with her values, and the deed will have less impact on her. Deed Reporter A deed reporter uses deed templates to report deeds committed by an actor to a target. The DeedReporter script goes on the character (usually the player) that will commit deeds. To add a deed reporter, select the character, and then select menu item Component > Pixel Crushers > Love/Hate > Deed Reporter. Then assign a deed template library. Deed reporters work in 3D and 2D scenes. Specify the type of scene in the Dimension dropdown. Tying Deeds to Gameplay When the character commits a deed, call the ReportDeed() method. Provide the deed template tag and the target: GetComponent<DeedReporter>().ReportDeed("Flatter", pinkgirl); You can also use equivalent PlayMaker actions, Dialogue System functions, etc., to implicitly call ReportDeed(). These are described in their own sections later in the manual. For a more detailed example, say your player has a Combat script, and you want to report whenever the player attacks another character in the Attack() method. Add these lines to your script: void Attack(GameObject target) { animator.settrigger( Attack ); target.sendmessage( TakeDamage, weapondamage); var targetfactionmember = target.getcomponent<factionmember>(); if (targetfactionmember!= null) { GetComponent<DeedReporter>.ReportDeed( Attack, targetfactionmember); } } (Ideally you'll cache DeedReporter in Start() rather that finding it every time the player attacks.) 27

28 Deed Evaluation Faction members evaluate deeds using a fairly complex formula. This formula is described in detail in the Deed Evaluation Formula section near the end of the manual. If the faction member's % Judge Parents value is non-zero, it will not only adjust its affinity to the deed actor but also to the deed actor's parents. For example, if Cat Girl does something nice, it reflects well not only on her but on her Kingdom (her parent faction). Make sure to avoid looping family trees or this will cause an infinite loop. If you want a faction member to evaluate deeds differently for a specific faction (including its children), add a Deed Evaluation Overrides component to the faction member. 28

29 AUTOMATIC CHARACTER INTERACTION Love/Hate provides components that allow characters can perform automatic actions based on their Love/Hate values. Deed Reaction Events Use a Deed Reaction Events component to invoke events when a character witnesses a deed. To add a Deed Reaction Events component, select Component > Pixel Crushers > Love/Hate > Deed Reaction Events. To add a reaction, add an element to the Reaction Events list. Set the temperament mask (which defaults to Everything, meaning any temperament) and min and max pleasure values for the deed. Then click on the item to set the events that it should invoke. In the image above, the character is configured to set the animator trigger Happy when it witnesses a deed that causes it 25 to 100 pleasure. Greeting Trigger Use a greeting trigger to make a character play a greeting animation when it sees another character. To add a greeting trigger, select the character, and then select menu item Component > Pixel Crushers > Love/Hate > Greeting Trigger, or Greeting Trigger 2D for 2D scenes. The character must have a trigger collider. 29

30 In the Animation Triggers list, specify reactions for ranges of affinity values and temperaments. Example: In the example above, the animator trigger parameter Sad will trigger when the character's affinity to the other character is less than -25. The temperament dropdown is set to Everything on this row, which means this line applies regardless of the character's current temperament. You can also add a script that implements IGreetEventHandler if you want the character to do something more when it greets another character. The Scripting section later in the manual explains this in more detail. Gossip Trigger Use a gossip trigger to allow a character to share rumors when they see another friendly character. To add a gossip trigger, select the character and then select menu item Component > Pixel Crushers > Love/Hate > Gossip Trigger (or Gossip Trigger 2D for 2D scenes). The character must have a trigger collider. When another character enters the trigger, this character will check its affinity to the other character. If it's positive, they'll share rumors. Set Time Between Gossip to the number of seconds the character should wait before sharing gossip again with the same friend. To make a character play an animation when gossiping, add a Gossip Animation component: Component > Pixel Crushers > Love/Hate > Gossip Animation. You can also add a custom script that implements IGossipEventHandler if you want the character to do something more when it gossips with another character. For example, you could play a murmuring audio clip or show a cartoon gossip bubble above their heads. The Scripting section later in the manual explains this in more detail. Aura Trigger Use an aura trigger to affect characters when they enter the trigger area. 30

31 To add an aura trigger, select a GameObject with a trigger collider and then select menu item Component > Pixel Crushers > Love/Hate > Aura Trigger (or Aura Trigger 2D for 2D scenes). This will also add a Traits component if one doesn't already exist. Set Time Between Effects to the number of seconds the aura should wait before applying its effect again to the same character. Set the values on the Traits component. Impact is the strength of the aura, where a high value applies a stronger effect. Aggression affects how submissive or dominant the aura makes the character feel based on how their traits align with the aura's traits. Example: Say you've decided to add an aura to a vampire's lair. The Purity trait is -80, indicating it's an evil place. The Impact is 50, a powerful aura. Aggression is 30, a dominant place. When a devout villager (with a negative trait alignment) enters the lair, he will lose pleasure and dominance, and his arousal will increase. When the vampire enters its lair (with a positive trait alignment), it will gain pleasure and dominance, and its arousal will decrease. 31

32 SAVING AND LOADING Love/Hate is designed to support easy saving and loading with third party save systems. Components don't maintain any special runtime pointers to other components or external data sources, so you can serialize and deserialize any of them without having to link anything back up. The FactionManager and FactionMember classes provide methods to serialize and deserialize data from strings: public string SerializeToString() public void DeserializeFromString(string s) To save the state of the FactionManager or a FactionMember, call SerializeToString() and save the resulting string. To load, provide the string to DeserializeFromString(). FactionManager Serialized String Format Serialized FactionManager data uses this format: numfactions, (for each faction:) id,name, (for each personality trait:) {personalitytraitvalues} numparents,{parentids},numrelationships, (for each relationship:) {factionid,inheritable,relationshiptraitvalues} FactionMember Serialized String Format Serialized FactionMember data uses this format: factionid,padhappiness,padpleasure,padarousal,paddominance,nummemories, (for each memory:) memdeedguid,deedtag,actorfactionid,targetfactionid,impact, repetitions,confidence,pleasure,arousal,dominance,shorttermtimeleft,longtermleft Pixel Crushers Save System Love/Hate includes the Pixel Crushers Save System, and savers for Faction Members and Faction Managers. For instructions, see the Save System documentation in Plugins / Pixel Crushers / Common / Documentation. Other Save Systems If you're using third party support packages such as for the Dialogue System or ORK Framework, see their sections below for instructions on using their save systems. 32

33 SCRIPTING API Reference The complete API reference is online at: Namespace Love/Hate s source code is contained in the namespace PixelCrushers.LoveHate. Add this line to the top of your scripts to use Love/Hate: using PixelCrushers.LoveHate; LoveHate You can use LoveHate static class to manage most things, such as affinities and deeds. This class serves as a wrapper for the current instance of FactionManager so you don t have to refer to FactionManager.instance directly. LoveHate and FactionManager have several useful methods. Refer to the API reference for details. FactionManager You will usually have one FactionManager in your scene, which you can access directly or using the LoveHate static class. However, Love/Hate also supports multiple concurrent FactionManagers. In this case, simply assign the desired FactionManager to each faction member. See Saving and Loading above for instructions on writing save/load code. FactionMember You can override default behavior on faction members by assigning your own methods to these delegates: CanSee Delegate If set, the faction member will call this delegate instead of the default visibility method to determine if it can see the actor of a deed. void Start() { GetComponent<FactionMember>().CanSee = MyCanSee; } public bool MyCanSee(FactionMember other, Dimension dimension) { // (Return true or false) } 33

34 EvaluateRumor Delegate If set, the faction member will call this delegate instead of the default rumor evaluation method. void Start() { GetComponent<FactionMember>().EvaluateRumor = MyEvaluateRumor; } public Rumor MyEvaluateRumor(Rumor rumor, FactionMember source) { // (Return a new rumor based off the source's rumor, or source s rumor.) } ShareRumor Delegate If set, the faction member will call this delegate instead of the default rumor sharing method. void Start() { GetComponent<FactionMember>().ShareRumor = MyShareRumor; } public void MyShareRumor(Rumor rumor, FactionMember other) { // Share the rumor with other. } GetPowerLevel and GetSelfPerceivedPowerLevel Delegates There are two delegates related to power level. GetPowerLevel returns the faction member's power level as perceived by others. GetSelfPerceivedPowerLevel returns the faction member's selfperceived power level. For example, if a faction member is very insecure, he may have a lower selfperceived power level than his actual power level. Example for GetSelfPerceivedPowerLevel: void Start() { var factionmember = GetComponent<FactionMember>(); factionmember.getselfperceivedpowerlevel = MySelfPerceivedLevel; } public float MySelfPerceivedPowerLevel() { // Insecure character thinks he's half as good as he really is: return GetPowerLevel() / 2; } 34

35 GetTraitAlignment Delegate Assign this delegate to override the default function that computes how well a specified set of trait values aligns with the faction member's faction traits. Example for GetTraitAlignment: void Start() { var factionmember = GetComponent<FactionMember>(); factionmember.gettraitalignment = MyGetTraitAlignment; } public float MyGetTraitAlignment(float[] traits) { // Add some randomness to the alignment value: return Traits.Alignment(faction.traits, traits) + Random.Range(-0.5f,0.5f); } PAD Every FactionMember has a pad field. You can modify its values by calling Pad.Modify(). void Sleep() { // When sleeping, decrease arousal (3rd parameter) by 10: GetComponent<FactionMember>().pad.Modify(0, 0, -10, 0); } Temperament is a function of the PAD values. You can access it in code by calling PAD.GetTemperament(): var temperament = GetComponent<FactionMember>().pad.GetTemperament(); It returns an enum (see the table in the Faction Member section above) that corresponds to a specific state such as Temperament.Exuberant or Temperament.Anxious. DeedReporter DeedReporter has one method: ReportDeed(). Call it to report a deed in code. The deed tag should correspond to a deed template in the DeedReporter's deed template library. GetComponent<DeedReporter>().ReportDeed("attack", selectedtarget); 35

36 Event Handlers Love/Hate uses the Unity event system introduced in Unity 4.6. If you want to visually assign your own methods to Faction Member events in Unity's Inspector view, add a Faction Member Events component (Component > Pixel Crushers > Love/Hate > Faction Member Events). If you want to automatically tie your methods to Love/Hate events in script without having to assign anything in the Inspector view, add handlers for these events: 36

37 Witness Deed Event Handler This event occurs when a faction member witnesses a deed. In the example below, if the deed displeases the faction member, the faction member will attack the actor. using PixelCrushers.LoveHate; public class MyDeedHandler : MonoBehaviour, IWitnessDeedEventHandler { public void OnWitnessDeed(Rumor rumor) { if (rumor.pleasure < 0) { Say("Hey! That's my friend!"); Attack(rumor.actorFactionID); } } } Share Rumors Event Handler This event occurs when a faction member shares rumors with another. In the example below, the faction member will stroke its chin as if contemplating the information it just received. using PixelCrushers.LoveHate; public class MyShareRumorsHandler : MonoBehaviour, IShareRumorsEventHandler { public void OnShareRumors(FactionMember other) { GetComponent<Animator>().SetTrigger("strokeChin"); } } Gossip Event Handler This event occurs when two characters meet and decide to share rumors. The distinction between this event and ShareRumors is that it s possible for a character to share rumors without meeting another character and gossiping for example, if the character broadcasts news over a radio. Gossip, on the other hand, is face to face. Your custom handler can play audio, show a cartoon bubble, etc. In the example below, the faction member will play a murmur audio clip to indicate that the characters are talking. using PixelCrushers.LoveHate; public class MyGossipHandler : MonoBehaviour, IGossipEventHandler { public AudioClip murmur; public void OnShareRumors(FactionMember other) { GetComponent<AudioSource>().PlayOneShot(murmur); } } 37

38 Greet Event Handler This event occurs when two characters meet and decide to greet each other. The default greet trigger already plays an animation. You can add a custom handler to do something extra such as play audio, show bark text, etc. In the example below, used for a pickpocket, the faction member appraises what the other character owns. Later in the game, the pickpocket might use this information to choose a victim. using PixelCrushers.DialogueSystem; public class MyGreetHandler : MonoBehaviour, IGreetEventHandler { public void OnGreet(FactionMember other) { RememberValuables(other); } } Aura Event Handler This event occurs when a character enters an aura trigger. It occurs on the aura. You can add a custom handler to make the aura do something extra. In the example below, when a character enters the aura, it instantiates a Mist prefab onto the character. using PixelCrushers.DialogueSystem; public class MyAuraHandler : MonoBehaviour, IAuraEventHandler { public void OnAura(FactionMember other) { Instantiate(Resources.Load("Mist"), other.transform.position, other.transform.rotation); } } 38

39 Enter Aura Event Handler This event occurs when a character enters an aura trigger. It occurs on the character. You can add a custom handler to do something extra. In the example below, when a character enters a bad aura (one whose traits are negatively aligned with the character's traits), the character draws a weapon to prepare for trouble. using PixelCrushers.DialogueSystem; public class MyAuraHandler : MonoBehaviour, IEnterAuraEventHandler { public void OnEnterAura(AbstractAuraTrigger aura) { var traits = aura.getcomponent<traits>(); var alignment = Traits.Alignment(traits, other.faction.traits); if (alignment < 0) // Bad aura from this character's perspective. { other.getcomponent<combat>().drawweapon(); } } } 39

40 Emotional State If you've added an Emotional State component to a faction member, you can call EmotionalState.GetCurrentEmotionName() to get the name of the current emotion, or EmotionalState.GetCurrentEmotion() to get the index into the emotiondefinitions array. Accessing Traits If you've added a Traits component to a non-faction member GameObject, you can get trait values using the GetTraits(string traitname) function: using PixelCrushers.LoveHate; public class VampireAI : MonoBehaviour { // This function checks if an object is something the vampire should avoid: public bool IsObjectHarmful(GameObject obj) { var traits = obj.getcomponent<traits>(); return (traits!= null) && (traits.gettrait( Purity ) > 50); } (rest of script) } You can also the static Traits.Alignment(float[], float[]) function to check how well a two sets of traits align. It returns a normalized value in the range [-1,+1] that indicates how well their extremes match, not how close their values are. If both sets are all zero, the alignment will be zero. If all traits in both sets are at their extremes (+100 or -100) and the sets match exactly, the function will return +1. If both sets are at their extremes and the sets are the exact opposite, the function will return -1. // This function checks if an item is something a character would // want based on how the item's traits align with the character's personality: public bool DoesCharacterWantItem(FactionMember character, GameObject item) { var itemtraits = item.getcomponent<traits>().traits; return Traits.Alignment(character.traits, itemtraits) > 0; } Time Modes For all time-based functions such as PAD stabilization or delays between greetings, Love/Hate uses an included class GameTime instead of Unity's standard Time class. By default, GameTime operates the same as Time. However, you can change it to realtime (i.e., not subject to time scale) or custom (in which you must manually specify the time and deltatime each frame). 40

41 ADVENTURE CREATOR SUPPORT Love/Hate has support for Icebox Studios Adventure Creator. To enable it, import this package: Assets/Plugins/Pixel Crushers/LoveHate/Third Party Support/Adventure Creator Support.unitypackage The package will create this folder: Assets/Pixel Crushers/LoveHate/Third Party Support/Adventure Creator Support and it will also unpack several actions in: Assets/AdventureCreator/Scripts/Actions/ActionLoveHate*.cs Adventure Creator Example Scene To play the Adventure Creator example scene you must first select ManagerPackage in the Example folder. In the Inspector view, click "Assign managers". In the example scene, the NPCs have hotspots and interactions. To interact, click on an NPC. To keep the example simple, the interaction simply flatters the NPC. Adventure Creator Actions The Adventure Creator Support package will add these actions to Adventure Creator: Action Description Check PAD Checks PAD values. Check Parent Checks if a faction has an ancestor or direct parent. Check Relationship Checks the value of a relationship trait. Create New Faction Creates a new, empty faction. Destroy Faction Removes a faction from the faction database. Modify PAD Modifies PAD values. Report Deed Reports a deed. The actor must have a DeedReporter. Set Parent Adds or removes a parent from a faction. Set Relationship Sets a relationship trait value. Set Relationship Inheritable Specifies whether children inherit a relationship. Share Rumors Shares rumors from one faction member to another. Remember Scripts for Saving and Loading To save the state of the faction database, add a Remember Faction Manager script to the Faction Manager. To save the state of a faction member, add a Remember Faction Member script. Both scripts are available in the menu Pixel Crushers > Love/Hate > Third Party > Adventure Creator. 41

42 BOLT SUPPORT Love/Hate has built-in support for Ludiq s Bolt visual scripting system. To enable it, import this package: Assets/Plugins/Pixel Crushers/LoveHate/Third Party Support/Bolt Support.unitypackage The package will create this folder: Assets/Pixel Crushers/LoveHate/Third Party Support/Bolt Support Bolt works differently from other visual scripting systems. In other visual scripting systems, third party integrations typically provide a set of scripts that extend the system's library of actions (e.g., Report Deed action, Modify Affinity action, etc.). Bolt works directly with the third party asset. In the steps below, you will use Bolt's Unit Options Wizard to allow Bolt to access Love/Hate methods. To set up Bolt support, select menu item Tools Bolt Unit Options Wizard. In the Assemblies section, add Assembly-CSharp-firstpass to the list if it's not present: In the Types section, select types such as LoveHate or DeedReporter to give Bolt access to those parts of Love/Hate: 42

43 These are common types to add to Bolt: Type Reference Gives Access To LoveHate PixelCrushers.LoveHate.LoveHate Work with factions & relationships. Report deeds manually. Deed PixelCrushers.LoveHate.Deed Deed record passed to LoveHate.CommitDeed. DeedReporter PixelCrushers.LoveHate.DeedReporter Report deeds using a Deed Template Library. FactionMember PixelCrushers.LoveHate.FactionMember Work directly with a faction member. SaveSystem PixelCrushers.SaveSystem Save & load games; change scenes. Once added, you can use them in Bolt. The example screeenshot below uses LoveHate.ModifyPersonalAffinity to increase the Princess s affinity to the Player by 10: If you want Bolt to react to Love/Hate events messages such as OnWitnessDeed, add a Love Hate Bolt Custom Events component to the GameObject that will receive the event. Event Arguments When It Occurs OnWitnessDeed Rumor When a faction member witnesses a deed. OnRememberDeed Rumor When a faction member commits a deed to memory, either by witnessing it or learning it from gossip. OnModifyPad (int)δhappiness, (int)δpleasure, (int)δarousal, (int)δdominance When a faction member s PAD changes. OnGreet FactionMember When a faction member greets another using a Greet Trigger. OnGossip FactionMember When a faction member gossips with another. OnAura FactionMember When a faction member enters an Aura. OnEnterAura AuraTrigger When a faction member enters an Aura (occurs on Aura). 43

44 DIALOGUE SYSTEM SUPPORT Love/Hate has built-in Dialogue System for Unity support. To enable it, import this package: Assets/Plugins/Pixel Crushers/LoveHate/Third Party Support/Dialogue System Support.unitypackage The package will create this folder: Assets/Dialogue System/Third Party Support/LoveHate Dialogue System Example Scene The Dialogue System example scene plays just like the original Love/Hate example scene with the addition of a Talk button. When you bump into an NPC, click this button to converse. Access Love/Hate in dialogue entry conditions and scripts! It also adds Save and Load buttons on the upper right that demonstrate saving and loading Love/Hate data. 44

45 Lua Functions The Dialogue System interfaces with Love/Hate through a library of Lua functions. To enable the Lua functions, add a LoveHateLua component to the Dialogue Manager GameObject (Component > Pixel Crushers > Dialogue System > Third Party > Love/Hate > LoveHateLua). The LoveHateLua component adds the Lua functions detailed below, which you can use in conversations' Conditions and Script fields. For examples that use these Lua functions, examine the example scene's dialogue database GetFactionName(gameObjectName) [returns string] Gets the faction name of a GameObject that has a faction member component. GetPersonalityTrait(gameObjectName, traitname) [returns number] SetPersonalityTrait(gameObjectName, traitname, value) Gets or sets a faction's personality trait value. Specify the GameObject of a faction member. GetAffinity(judgeName, subjectname) [returns number] SetAffinity(judgeName, subjectname, value) ModifyAffinity(judgeName, subjectname, dvalue) Gets, sets, or modifies (increments/decrements) the affinity a judge feels toward a subject. For the judge and subject, provide the names of the GameObjects that have faction member components. GetRelationshipTrait(judgeName, subjectname, traitname) [returns number] SetRelationshipTrait(judgeName, subjectname, traitname, value) ModifyRelationshipTrait(judgeName, subjectname, traitname, dvalue) Gets, sets, or modifies a relationship trait value a judge feels toward a subject. For the judge and subject, provide the names of the GameObjects that have faction member components. SetRelationshipInheritable(judgeName, subjectname, boolean) Specifies whether children inherit a relationship. GetHappiness(gameObjectName) [returns number] GetPleasure(gameObjectName) [returns number] GetArousal(gameObjectName) [returns number] GetDominance(gameObjectName) [returns number] ModifyPAD(gameObjectName, dhappiness, dpleasure, darousal, ddominance) GetTemperament(gameObjectName) [returns string] GetEmotionalState(gameObjectName) [returns string] Gets or modifies (increments/decrements) the PAD values and/or emotional state of a faction member. Provide the name of the GameObject that has a faction member component. KnowsDeed(nameString, actornamestring, targetnamestring, deedtag) [return Boolean] Checks if a GameObject (namestring) with a faction member component knows about a deed committed by an actor to a target. ReportDeed(actorNameString, targetnamestring, deedtag) Reports a deed committed by an actor to a target. The actor must have a Deed Reporter. ShareRumors(string actorname, string targetname) Shares rumors from an actor to a target (one-way). 45

46 Example: Branching Conversation Based on Affinity It's very easy to branch the conversation based on affinity. In the example scene, the Princess says, You're not welcome here. if she dislikes the player. This is done by adding a simple GetAffinity() condition to the Conditions field: The Princess only speaks this entry if she dislikes the player. This is the condition on the dialogue entry. The condition: GetAffinity( Princess, Player ) < 0 is only true if the Princess has a negative affinity to the player. Similarly, you can use the SetAffinity(), ModifyAffinity(), and ReportDeed() functions in a dialogue entry's Script field. Using the Dialogue System to Save and Load To tie Love/Hate into the Dialogue System's Save System, add a Persistent Faction Manager component to the faction manager (Component > Pixel Crushers > Dialogue System > Third Party > Love/Hate > Save System > Persistent Faction Manager). Also add a Persistent Faction Member component to each faction member (Pixel Crushers > Dialogue System > Third Party > Love/Hate > Save System > Persistent Faction Member). 46

47 EMERALD AI SUPPORT Love/Hate has support for Emerald AI 2. To enable it, import these two packages: Assets/Plugins/Pixel Crushers/Common/Third Party Support/Emerald AI Support.unitypackage Assets/Plugins/Pixel Crushers/LoveHate/Third Party Support/Emerald AI Support.unitypackage The package will create two folder: Assets/Pixel Crushers/Common/Third Party Support/Emerald AI Support Assets/Pixel Crushers/LoveHate/Third Party Support/Emerald AI Support The package adds these features: Report Emerald AI combat as Love/Hate deeds. Adjust Emerald AI temperament based on reaction to deeds. Emerald AI Example Scene In the example scene, combat between the player and other creatures updates Love/Hate faction information and can change AIs temperament. Emerald AI Setup Add Emerald AI Love Hate Member components to Emerald AIs. When the player attacks an AI, this component will report a Love/Hate damage and/or kill deed. The deeds must be defined in the deed template library assigned to the player s Deed Reporter. If you re using Emerald AI s Player Heath component, add an Emerald Player Love Hate Member component. When an AI attacks the player, this component will report a Love/Hate damage deed. The deed must be defined in the player s deed template library. To add emotes for Love/Hate activity, add Greeting Emote and/or Gossip Emote components. 47

48 ICE CREATURE CONTROL SUPPORT Love/Hate has support for ICE Creature Control. To enable it, import this package: Assets/Plugins/Pixel Crushers/LoveHate/Third Party Support/ICE Support.unitypackage The package will create this folder: Assets/Pixel Crushers/LoveHate/Third Party Support/ICE Support The package adds these features: Report ICE combat as Love/Hate deeds. Synchronize ICE indicators (power, aggressiveness, stress) with Love/Hate. Enable or disable interactors based on Love/Hate affinity/deeds. ICE Example Scene The ICE Support example scene is in ICE Support / Example / LoveHate ICE Example. The scene has three factions: Zombies: Attack everything. Citizens: Flee zombies. Soldiers: Attack zombies. If the player hurts a Soldier or Citizen, Soldiers will attack the player, too. 48

49 ICE Setup To set up support for ICE: 1. Add an ICE To Love Hate component to the Faction Manager. 2. Add a Faction Member and Deed Reporter to the player. 3. Add a Faction Member and Love Hate Deed Damage Handler to creatures. This reports ICE damage to the faction member as a deed. 4. Optionally add a Deed Reaction Events component to creatures, and configure it to react to the pleasure value of witnessed deeds. In the example scene, creatures show a heart icon when the deed pleases them and a teardrop icon when the deed displeases them. 5. Optionally add an Enable Interactions By Affinity component to creatures. In the scene, when soldiers learn of a deed (either witnessed or through gossip), they check their affinity to the player. If the affinity is negative, the component enables interaction #2, which is configured to attack the player. ICE and UFPS Support To integrate Love/Hate with ICE s support for UFPS, replace your creatures ICE World Damage Adapter components with Love Hate Deed ICE World Damage Adapter components. This component does the same thing as ICE World Damage Adapter but also reports the deed to Love/Hate. To see it in action, play the example scene LoveHate ICE UFPS Example. This is a simpler example with only a UFPS player and a horde of zombies. When you shoot a zombie, it will register the deed with Love/Hate. 49

50 MAKINOM SUPPORT Love/Hate has support for Gaming Is Love s Makinom. To enable it, import this package: Assets/Plugins/Pixel Crushers/LoveHate/Third Party Support/Makinom Support.unitypackage The package will create this folder: Assets/Pixel Crushers/LoveHate/Third Party Support/Makinom Support The package adds these features to Makinom: Makinom Faction Manager and Makinom Faction Member components that tie faction managers and faction members into Makinom. Schematic nodes for working with Love/Hate in Makinom schematics. Makinom Example Scene The Makinom example scene works just like the main example scene except it uses a Makinom dialogue to allow the player to commit deeds. Love/Hate Event Machines on NPCs also log to the console when NPCs witness deeds. Makinom Setup To use Love/Hate in a Makinom project: 1. Set up your faction database and deed template library as normal. 2. In your game starter scene, add a Faction Manager GameObject. However, instead of adding a Faction Manager component, add a Makinom Love/Hate Faction Manager component by selecting menu item Component > Pixel Crushers > Love/Hate > Third Party > Makinom > Makinom Love Hate Faction Manager. 50

51 3. Optional: When preparing your characters (prefabs or scene objects), add a Love/Hate Event Machine component by selecting menu item Component > Pixel Crushers > Love/ Hate > Third Party > Makinom > Love Hate Event Machine. Assign schematics to start when certain Love/Hate events occur (Witness Deed, Enter Aura, etc.). 4. Optional: Add an Aura Event Machine to your aura events by selecting menu item Component > Pixel Crushers > Love/Hate > Third Party > Makinom > Aura Event Machine. Assign a schematic to play when the aura is entered. 5. Use the Report Deed node in your schematics to report deeds to Love/Hate. 6. Use the various Check nodes in your schematics to check Love/Hate values. 7. Use other Love/Hate nodes to modify PAD values, change faction membership, etc. Makinom Love/Hate Faction Manager The Makinom Love/Hate Faction Manager component is a modified version of Faction Manager that integrates with Makinom's save system. It saves the faction database and faction member data. Love/Hate Event Machine The optional Love/Hate Event Machine component starts schematics when Love/Hate events occur. Add this component to faction members. You can assign schematics to these events: Witness Deed: Occurs when the character witnesses a Love/Hate deed. Share Rumors: Occurs when the character shares rumors with another. Enter Aura: Occurs when the character enters a Love/Hate aura trigger. Greet: Occurs when the character greets another using a Greet Trigger. Gossip: Occurs when the character gossips with another using a Gossip Trigger. The Witness Deed event sets these global variables before playing the schematic: rumortag (string): The tag of the deed associated with the rumor. rumorpleasure (float): The pleasure value for the witness. rumoractor (string): The actor's faction name. rumortarget (string): The target's faction name. Aura Event Machine The Aura Event Machine component starts a schematic when an aura event occurs. Add it to an aura. 51

52 Love/Hate Makinom Schematic Nodes Love/Hate's schematic nodes are in the Love/Hate submenu. They are: Node Description Add Direct Parent Adds a direct parent to a faction. Change Affinity Changes a character's affinity to a faction. Change PAD Changes a character's PAD values. Change Relationship Trait Changes the value of a relationship trait a character feels for a faction. Check Affinity Checks a character's affinity to a faction. Check Arousal Checks a character's arousal value. Check Dominance Checks a character's dominance value. Check Happiness Checks a character's happiness value. Check Has Ancestor Checks if a character has an ancestor faction. Check Has Direct Parent Checks if a character has a faction as a direct parent. Check Knows Deed Checks if a character knows about a deed. Check Pleasure Checks a character's pleasure value. Check Relationship Trait Checks the value of a relationship trait a character feels for a faction. Create New Faction Creates a new, empty faction. Destroy Faction Permanently removes a faction from the faction database. Get Temperament Gets a character's temperament value (a string). Inherit Traits Sets a faction's traits to the values inherited from its parents. Remove Direct Parent Removes a direct parent from a faction. Report Deed Reports a deed to Love/Hate. The actor must have a DeedReporter. Share Rumors Shares rumors between two characters. Switch Faction Changes a faction member to a different faction. Use Faction Manager Sets the faction manager that the faction member should use. Using Makinom to Save and Load The Makinom Love/Hate Faction Manager component automatically ties into Makinom's save system. 52

53 ORK FRAMEWORK SUPPORT Love/Hate has support for Gaming Is Love s ORK Framework. To enable it, import this package: Assets/Plugins/Pixel Crushers/LoveHate/Third Party Support/ORK Framework Support.unitypackage The package will create this folder: Assets/Pixel Crushers/LoveHate/Third Party Support/ORK Framework Support The support package for ORK Framework is designed to replace ORK's faction system. You can use both systems in your project, but they won't talk with each other unless you write events to do it. The package adds these features to ORK: Ork Faction Manager and Ork Faction Member components that tie faction managers and faction members into ORK. Event steps for working with Love/Hate in ORK events. ORK Example Scene The example scene uses assets from ORK's tutorial game. You must first import ORK's tutorial game before playing the example scene. If you want to edit the example scene's settings in the ORK Framework editor window, move the ORKProject asset file from Love/Hate's ORK Framework Support folder to Assets/ORK Framework. The Player belongs to the Love/Hate Player faction, Green Pants belongs to Allies, and Evil Pants belongs to Enemies. The example scene uses a modified attack event named attackandreportdeed that reports an attack deed through Love/Hate. It's assigned to Status > Abilities > 0:Attack > Battle Event 1. Green Pants (an ally) has an event interaction for the Witness Deed event and also has a conversation that checks affinity to the player. 53

54 ORK Setup To use Love/Hate in an ORK game: 1. Set up your faction database and deed template library as normal. 2. In your game starter scene, add a Faction Manager GameObject. However, instead of adding a Faction Manager component, add an Ork Faction Manager component by selecting menu item Component > Pixel Crushers > Love/Hate > Third Party > ORK Framework > Ork Faction Manager. 3. When preparing your characters (prefabs or scene objects), instead of adding a Faction Member component, add an Ork Faction Member component by selecting menu item Component > Pixel Crushers > Love/Hate > Third Party > ORK Framework > Ork Faction Member. Assign ORK events to start when certain Love/Hate events occur (Witness Deed, Enter Aura, etc.). 4. Use the Report Deed event step in your ORK events to report deeds to Love/Hate. 5. Use the various Check event steps in your ORK events to check Love/Hate values. 6. Use other Love/Hate event steps to modify PAD values, change faction membership, etc. Ork Faction Manager The Ork Faction Manager component is a modified version of Faction Manager that integrates with ORK's save system. It saves the faction database and faction member data. Ork Faction Member The Ork Faction Member component is a modified version of Faction Member. It adds two things: Uses the combatant's power level when evaluating power levels for dominance values. Starts ORK events when Love/Hate events occur. Use it connect an ORK event to a Love/Hate event, add one or more ORK Event Interaction components to your character. Then assign them to the fields at the bottom of the Ork Faction Member inspector. You can assign these events: Witness Deed: Occurs when the character witnesses a Love/Hate deed. Share Rumors: Occurs when the character shares rumors with another. Enter Aura: Occurs when the character enters a Love/Hate aura trigger. Greet: Occurs when the character greets another using a Greet Trigger. Gossip: Occurs when the character gossips with another using a Gossip Trigger. Aura Event Interaction The Aura Event Interaction component starts an ORK event when an aura event occurs. 54

55 Love/Hate ORK Event Steps Love/Hate's ORK event steps are in the Love/Hate submenu. They are: Step Description Add Direct Parent Adds a direct parent to a faction. Change Affinity Changes a character's affinity to a faction. Change PAD Changes a character's PAD values. Change Relationship Trait Changes the value of a relationship trait a character feels for a faction. Check Affinity Checks a character's affinity to a faction. Check Arousal Checks a character's arousal value. Check Dominance Checks a character's dominance value. Check Happiness Checks a character's happiness value. Check Has Ancestor Checks if a character has an ancestor faction. Check Has Direct Parent Checks if a character has a faction as a direct parent. Check Knows Deed Checks if a character knows about a deed. Check Pleasure Checks a character's pleasure value. Check Relationship Trait Checks the value of a relationship trait a character feels for a faction. Create New Faction Creates a new, empty faction. Destroy Faction Permanently removes a faction from the faction database. Get Temperament Gets a character's temperament value (a string). Inherit Traits Sets a faction's traits to the values inherited from its parents. Remove Direct Parent Removes a direct parent from a faction. Report Deed Reports a deed to Love/Hate. The actor must have a DeedReporter. Share Rumors Shares rumors between two characters. Switch Faction Changes a faction member to a different faction. Use Faction Manager Sets the faction manager that the faction member should use. Using ORK to Save and Load The Ork Faction Manager component automatically ties into ORK's save system. 55

56 PLAYMAKER SUPPORT Love/Hate has built-in support for Hutong Games PlayMaker. To enable it, import this package: Assets/Plugins/Pixel Crushers/LoveHate/Third Party Support/PlayMaker Support.unitypackage The package adds several PlayMaker actions categorized under Love/Hate. PlayMaker Example Scene IMPORTANT: If using PlayMaker or earlier, to play the example scene you must first import PlayMakerUnity2D.unitypackage, which available at: The PlayMaker Example scene plays just like the original Love/Hate example scene, except the Player has a PlayMaker FSM. When you bump into an NPC, the FSM shows buttons in the top left of the screen for Flatter and Insult. The FSM demonstrates how to get factions, get affinities, and commit deeds using PlayMaker. PlayMaker Actions The Love/Hate PlayMaker support package adds these actions to PlayMaker's Actions browser: Action Description Faction Membership Add Direct Parent Adds a direct parent to a faction. Create New Faction Creates a new, empty faction. Destroy Faction Permanently removes a faction from the faction database. Get Faction Name Gets the faction name of a GameObject having a FactionMember component. Has Ancestor Checks if a faction has another faction as an ancestor. Has Direct Parent Checks if a faction has another faction as a direct parent. Inherit Traits From Parents Sets a faction's personality traits based on its parents, summed or averaged based on the setting in the faction database. Remove Direct Parent Removes a direct parent from a faction. Switch Faction Changes the faction that a faction member belongs to. Use Faction Manager Sets the faction manager that the faction member should use. Relationships Get Affinity Gets the affinity a faction feels toward another faction. Get Relationship Trait Gets the value of a relationship trait that a faction feels toward another faction. Modify Affinity Increments or decrements the affinity a faction feels toward another faction Modify Relationship Trait Increments or decrements the value of a relationship trait a faction feels toward another faction 56

57 Set Affinity Sets the affinity a faction feels toward another faction. Set Relationship Trait Sets the value of a relationship trait that a faction feels toward another faction. Set Relationship Inheritability Sets whether a relationship is inherited by children or not. Emotional State Get Happiness Gets the PAD happiness value. Get Pleasure Gets the PAD pleasure value. Get Arousal Gets the PAD arousal value. Get Dominance Gets the PAD dominance value. Get Temperament Get a string indicating the PAD temperament. Modify PAD Increments or decrements PAD values. Get Emotional State Gets the name of the current emotional state. Deeds Knows Deed Checks if a faction member knows about a deed. Report Deed Reports a deed committed by an actor to a target. NOTE: The actor must have a Deed Reporter. Share Rumors Shares rumors between two faction members. Saving and Loading Serialize To String Gets a string representation of FactionManager or FactionMember data. Deserialize From String Sets FactionManager or FactionMember data from a string. Personality Traits Get Personality Trait Gets a faction's personality trait value. Set Personality Trait Sets a faction's personality trait value. 57

58 PlayMaker Events To allow your PlayMaker FSM to receive events from Love/Hate, add a Love Hate Events To PlayMaker component. Select the FSM's GameObject, then select menu item Pixel Crushers > Love/Hate > Third Party > PlayMaker > Love/Hate Events. Your FSM can listen for these events: Event Description OnWitnessDeed Raised when the faction member witnesses a deed. Data: IntData: actor faction ID StringData: actor faction ID, target faction ID, deed tag FloatData: rumor pleasure OnShareRumors Raised when the faction member shares rumors. Data: GameObjectData: other faction member OnGreet Raised when the faction member greets another faction member. Data: GameObjectData: other faction member OnGossip Raised when the faction member gossips with another member. Data: GameObjectData: other faction member OnEnterAura Raised when the faction member enters an aura. Data: GameObjectData: aura OnAura Raised on the aura when a faction member enters it. Data: GameObjectData: faction member that entered aura 58

59 PLYGAME SUPPORT Love/Hate has support for PLYoung s plygame. To enable it, import this package: Assets/Plugins/Pixel Crushers/LoveHate/Third Party Support/plyGame Support.unitypackage The package adds several blocks categorized under Love/Hate. Blocks The Love/Hate plygame support package adds these blocks: Block Description Faction Membership Add Direct Parent Adds a direct parent to a faction. Create New Faction Creates a new, empty faction. Destroy Faction Permanently removes a faction from the faction database. Get Faction Name Gets the faction name of a GameObject that has a FactionMember component. Has Ancestor Checks if a faction has another faction as an ancestor. Has Direct Parent Checks if a faction has another faction as a direct parent. Inherit Traits From Parents Sets a faction's personality traits based on its parents, summed or averaged based on the setting in the faction database. Remove Direct Parent Removes a direct parent from a faction. Switch Faction Changes the faction that a faction member belongs to. Relationships Get Affinity Gets the affinity a faction feels toward another faction. Get Relationship Trait Gets the value of a relationship trait that a faction feels toward another faction. Modify Affinity Increments or decrements the affinity a faction feels toward another faction Modify Relationship Trait Increments or decrements the value of a relationship trait a faction feels toward another faction Set Affinity Sets the affinity a faction feels toward another faction. Set Relationship Trait Sets the value of a relationship trait that a faction feels toward another faction. Set Relationship Inheritability Sets whether a relationship is inherited by children or not. Emotional State Get Happiness Gets the PAD happiness value. Get Pleasure Gets the PAD pleasure value. Get Arousal Gets the PAD arousal value. 59

60 Get Dominance Gets the PAD dominance value. Get Temperament Get a string indicating the PAD temperament. Modify PAD Increments or decrements PAD values. Get Emotional State Gets the name of the current emotional state. Deeds Knows Deed Checks if a faction member knows about a deed. Report Deed Reports a deed committed by an actor to a target. NOTE: The actor must have a Deed Reporter. Share Rumors Shares rumors between two faction members. plygame Events To allow your plyblox to receive events from Love/Hate, add any of the event handlers found in the menu Component > Pixel Crushers > Love/Hate > Third Party > plygame > Event Handlers. Your FSM can listen for these events, each of which will also set local variables. If you add an event handler component and an event state in your plyblox, you must also define the corresponding local variables. Event Description OnWitnessDeed Raised when the faction member witnesses a deed. Data: deedtag (string) deedpleasure (float) actorfactionid (int) targetfactionid (int) OnRemember Deed Raised when the faction member commits a deed to memory. Data: deedtag (string) deedpleasure (float) actorfactionid (int) targetfactionid (int) OnForgetDeed Raised when the faction member forgets a deed. Data: deedtag (string) deedpleasure (float) actorfactionid (int) targetfactionid (int) OnModifyPAD Raised when a faction member's PAD values change. Data: happinesschange (float) pleasurechange (float) arousalchange (float) dominancechange (float) OnShareRumors Raised when the faction member shares rumors. Data: otherfactionid (int) OnGreet Raised when the faction member greets another faction member. Data: otherfactionid (int) OnGossip Raised when the faction member gossips with another member. Data: otherfactionid (int) 60

61 OnEnterAura Raised when the faction member enters an aura. Data: auraname (string) name of the aura GameObject OnAura Raised on the aura when a faction member enters it. Data: factionid (int) Saving and Loading in plygame Love/Hate's plygame support includes persistable components for faction managers and faction members. To save the faction manager's active faction database with plygame saved games, add a Persistable Faction Manager component to the faction manager by using menu item Pixel Crushers > Love/Hate > Third Party > plygame > Persistable > Persistable Faction Manager. To save a faction member's state with plygame saved games, add a Persistable Faction Member component to the faction member by using menu item Pixel Crushers > Love/Hate > Third Party > plygame > Persistable > Persistable Faction Member. 61

62 TRADESYS SUPPORT Love/Hate has built-in support for CallumP s TradeSys. To enable it, import this package: Assets/Plugins.Pixel Crushers/LoveHate/Third Party Support/TradeSys Support.unitypackage The package will create this folder: Assets/Pixel Crushers/LoveHate/Third Party Support/TradeSys Support Before using the TradeSys integration or playing the example scene, make sure you've added TradeSys's required tags as described in the TradeSys manual. TradeSys Example Scene The example scene contains four Love/Hate-enabled trade posts, two Love/Hate-enabled traders, and a player. Each post's prices for a trader (including the player) are affected by the post's affinity to the trader. As you interact with the NPCs, their changing affinity to you will influence the prices in their faction's trading posts. As you play the scene, watch the trade posts in the in the Inspector view. The prices will fluctuate depending on which trader is interacting with the post. The traders and player are controlled by modified versions of the example scripts provided with TradeSys. The example scripts don't prevent traders from interacting with the same post at the same time. If one trader buys all of a good while the other trader is trying to buy the same good, TradeSys will throw a division by zero error. To avoid this in your own project, make sure only one trader at a time interacts with a post. 62

63 TradeSys Setup Make sure you've added TradeSys's required tags. In TradeSys, trade posts are vendors or shops that buy and sell goods. Traders move goods between posts by buying from one post and selling to another. TradeSys has its own faction and group system. Love/Hate doesn't use TradeSys's factions; you can use them separately from Love/Hate to limit the posts that traders visit. How to set up Love/Hate with a trade post 1. On the Trade Post component, tick Settings > Custom pricing. 2. Add a Faction Member component. 3. Add a Love/Hate Trade Post component (Component > Pixel Crushers > Love/Hate > Third Party > TradeSys > LoveHate Trade Post). The Love/Hate Trade Post component has a price adjustment curve. This scales the price based on the post's affinity to the trader. For example, if the post's affinity to the trader is 50, and the curve's value at 50 is 0.25, then prices will be discounted by 25%. LoveHateTradePost exposes the following additional functionality: RestoreOriginalPrices(): Call to set the post's current prices to their original values. RecordOriginalPrices(): Call to record the post's current prices as the new originals. Dictionary originalprice[goodsname]: This property lets you access the recorded original prices directly. AdjustPricesForFaction(Faction faction, bool buyingfromfaction = false): Call to adjust the post's current prices for selling to a specific faction. If buyingfromfaction is true, it instead adjusts the prices for buying from a specific faction. The table below specifies how the post's affinity for the faction affects prices: Faction Sell to Faction Buy from Faction Friend Low Low Enemy High Low Hot to set up Love/Hate with a trader 1. Add a Faction Member component. 2. Add a Love/Hate Trader component (Component > Pixel Crushers > Love/Hate > Third Party > TradeSys > LoveHate Trader). 3. Before the trader interacts with a post, call the post's LoveHateTradePost.AdjustPricesForFaction() method to adjust the post's prices based on its affinity to the trader. The example script TSTraderAI2D.cs demonstrates how to call this method. How to set up Love/Hate with the player 1. Add a Faction Member component. 2. Before the player interacts with a post, call the post's LoveHateTradePost.AdjustPricesForFaction() method to adjust the post's prices based on its affinity to the player. The example script TSPlayer2D.cs demonstrates how to call this method. 63

64 UFPS SUPPORT Love/Hate has built-in support for Opsive s UFPS. To enable it, import this package: Assets/Plugins.Pixel Crushers/LoveHate/Third Party Support/UFPS Support.unitypackage The package will create this folder: Assets/Pixel Crushers/LoveHate/Third Party Support/UFPS Support UFPS Example Scene The UFPS Example scene contains two characters, represented by capsules: a Citizen and a Zombie, who mutually dislike each other. When you shoot one, it will be unhappy and the other will be happy. UFPS Support Setup To set up support for UFPS, you only need to replace your characters vp_damagehandler components with Love Hate Deed Damage Handler components. This component does the same thing as vp_damagehandler but also reports the damage as a deed. If you re using ICE Creature Control, follow the setup instructions in the ICE Support section instead. 64

Save System for Realistic FPS Prefab. Copyright Pixel Crushers. All rights reserved. Realistic FPS Prefab Azuline Studios.

Save System for Realistic FPS Prefab. Copyright Pixel Crushers. All rights reserved. Realistic FPS Prefab Azuline Studios. User Guide v1.1 Save System for Realistic FPS Prefab Copyright Pixel Crushers. All rights reserved. Realistic FPS Prefab Azuline Studios. Contents Chapter 1: Welcome to Save System for RFPSP...4 How to

More information

Adding in 3D Models and Animations

Adding in 3D Models and Animations Adding in 3D Models and Animations We ve got a fairly complete small game so far but it needs some models to make it look nice, this next set of tutorials will help improve this. They are all about importing

More information

Experiment 02 Interaction Objects

Experiment 02 Interaction Objects Experiment 02 Interaction Objects Table of Contents Introduction...1 Prerequisites...1 Setup...1 Player Stats...2 Enemy Entities...4 Enemy Generators...9 Object Tags...14 Projectile Collision...16 Enemy

More information

COMPASS NAVIGATOR PRO QUICK START GUIDE

COMPASS NAVIGATOR PRO QUICK START GUIDE COMPASS NAVIGATOR PRO QUICK START GUIDE Contents Introduction... 3 Quick Start... 3 Inspector Settings... 4 Compass Bar Settings... 5 POIs Settings... 6 Title and Text Settings... 6 Mini-Map Settings...

More information

Speechbubble Manager Introduction Instructions Adding Speechbubble Manager to your game Settings...

Speechbubble Manager Introduction Instructions Adding Speechbubble Manager to your game Settings... Table of Contents Speechbubble Manager Introduction... 2 Instructions... 2 Adding Speechbubble Manager to your game... 2 Settings... 3 Creating new types of speech bubbles... 4 Creating 9-sliced speech

More information

INTRODUCTION TO GAME AI

INTRODUCTION TO GAME AI CS 387: GAME AI INTRODUCTION TO GAME AI 3/31/2016 Instructor: Santiago Ontañón santi@cs.drexel.edu Class website: https://www.cs.drexel.edu/~santi/teaching/2016/cs387/intro.html Outline Game Engines Perception

More information

Spell Casting Motion Pack 8/23/2017

Spell Casting Motion Pack 8/23/2017 The Spell Casting Motion pack requires the following: Motion Controller v2.50 or higher Mixamo s free Pro Magic Pack (using Y Bot) Importing and running without these assets will generate errors! Why can

More information

Space Invadersesque 2D shooter

Space Invadersesque 2D shooter Space Invadersesque 2D shooter So, we re going to create another classic game here, one of space invaders, this assumes some basic 2D knowledge and is one in a beginning 2D game series of shorts. All in

More information

PoolKit - For Unity.

PoolKit - For Unity. PoolKit - For Unity. www.unitygamesdevelopment.co.uk Created By Melli Georgiou 2018 Hell Tap Entertainment LTD The ultimate system for professional and modern object pooling, spawning and despawning. Table

More information

Kings! Card Swiping Decision Game Asset

Kings! Card Swiping Decision Game Asset Kings! Card Swiping Decision Game Asset V 1.31 Thank you for purchasing this asset! If you encounter any errors / bugs, want to suggest new features/improvements or if anything is unclear (after you have

More information

Annex IV - Stencyl Tutorial

Annex IV - Stencyl Tutorial Annex IV - Stencyl Tutorial This short, hands-on tutorial will walk you through the steps needed to create a simple platformer using premade content, so that you can become familiar with the main parts

More information

Official Documentation

Official Documentation Official Documentation Doc Version: 1.0.0 Toolkit Version: 1.0.0 Contents Technical Breakdown... 3 Assets... 4 Setup... 5 Tutorial... 6 Creating a Card Sets... 7 Adding Cards to your Set... 10 Adding your

More information

Foreword Thank you for purchasing the Motion Controller!

Foreword Thank you for purchasing the Motion Controller! Foreword Thank you for purchasing the Motion Controller! I m an independent developer and your feedback and support really means a lot to me. Please don t ever hesitate to contact me if you have a question,

More information

Crowd-steering behaviors Using the Fame Crowd Simulation API to manage crowds Exploring ANT-Op to create more goal-directed crowds

Crowd-steering behaviors Using the Fame Crowd Simulation API to manage crowds Exploring ANT-Op to create more goal-directed crowds In this chapter, you will learn how to build large crowds into your game. Instead of having the crowd members wander freely, like we did in the previous chapter, we will control the crowds better by giving

More information

Introduction. Modding Kit Feature List

Introduction. Modding Kit Feature List Introduction Welcome to the Modding Guide of Might and Magic X - Legacy. This document provides you with an overview of several content creation tools and data formats. With this information and the resources

More information

The purpose of this document is to outline the structure and tools that come with FPS Control.

The purpose of this document is to outline the structure and tools that come with FPS Control. FPS Control beta 4.1 Reference Manual Purpose The purpose of this document is to outline the structure and tools that come with FPS Control. Required Software FPS Control Beta4 uses Unity 4. You can download

More information

Shoot It Game Template - 1. Tornado Bandits Studio Shoot It Game Template - Documentation.

Shoot It Game Template - 1. Tornado Bandits Studio Shoot It Game Template - Documentation. Shoot It Game Template - 1 Tornado Bandits Studio Shoot It Game Template - Documentation Shoot It Game Template - 2 Summary Introduction 4 Game s stages 4 Project s structure 6 Setting the up the project

More information

Overview. The Game Idea

Overview. The Game Idea Page 1 of 19 Overview Even though GameMaker:Studio is easy to use, getting the hang of it can be a bit difficult at first, especially if you have had no prior experience of programming. This tutorial is

More information

GameSalad Basics. by J. Matthew Griffis

GameSalad Basics. by J. Matthew Griffis GameSalad Basics by J. Matthew Griffis [Click here to jump to Tips and Tricks!] General usage and terminology When we first open GameSalad we see something like this: Templates: GameSalad includes templates

More information

Magic Leap Soundfield Audio Plugin user guide for Unity

Magic Leap Soundfield Audio Plugin user guide for Unity Magic Leap Soundfield Audio Plugin user guide for Unity Plugin Version: MSA_1.0.0-21 Contents Get started using MSA in Unity. This guide contains the following sections: Magic Leap Soundfield Audio Plugin

More information

TATAKAI TACTICAL BATTLE FX FOR UNITY & UNITY PRO OFFICIAL DOCUMENTATION. latest update: 4/12/2013

TATAKAI TACTICAL BATTLE FX FOR UNITY & UNITY PRO OFFICIAL DOCUMENTATION. latest update: 4/12/2013 FOR UNITY & UNITY PRO OFFICIAL latest update: 4/12/2013 SPECIAL NOTICE : This documentation is still in the process of being written. If this document doesn t contain the information you need, please be

More information

Easy Input For Gear VR Documentation. Table of Contents

Easy Input For Gear VR Documentation. Table of Contents Easy Input For Gear VR Documentation Table of Contents Setup Prerequisites Fresh Scene from Scratch In Editor Keyboard/Mouse Mappings Using Model from Oculus SDK Components Easy Input Helper Pointers Standard

More information

Making Your World with the Aurora Toolset

Making Your World with the Aurora Toolset Making Your World with the Aurora Toolset The goal of this tutorial is to build a very simple module to ensure that you've picked up the necessary skills for the other tutorials. After completing this

More information

Virtual Reality RPG Spoken Dialog System

Virtual Reality RPG Spoken Dialog System Virtual Reality RPG Spoken Dialog System Project report Einir Einisson Gísli Böðvar Guðmundsson Steingrímur Arnar Jónsson Instructor Hannes Högni Vilhjálmsson Moderator David James Thue Abstract 1 In computer

More information

COMPUTING CURRICULUM TOOLKIT

COMPUTING CURRICULUM TOOLKIT COMPUTING CURRICULUM TOOLKIT Pong Tutorial Beginners Guide to Fusion 2.5 Learn the basics of Logic and Loops Use Graphics Library to add existing Objects to a game Add Scores and Lives to a game Use Collisions

More information

Sword & Shield Motion Pack 11/28/2017

Sword & Shield Motion Pack 11/28/2017 The Sword and Shield Motion pack requires the following: Motion Controller v2.6 or higher Mixamo s free Pro Sword and Shield Pack (using Y Bot) Importing and running without these assets will generate

More information

"!" - Game Modding and Development Kit (A Work Nearly Done) '08-'10. Asset Browser

! - Game Modding and Development Kit (A Work Nearly Done) '08-'10. Asset Browser "!" - Game Modding and Development Kit (A Work Nearly Done) '08-'10 Asset Browser Zoom Image WoW inspired side-scrolling action RPG game modding and development environment Built in Flash using Adobe Air

More information

VACUUM MARAUDERS V1.0

VACUUM MARAUDERS V1.0 VACUUM MARAUDERS V1.0 2008 PAUL KNICKERBOCKER FOR LANE COMMUNITY COLLEGE In this game we will learn the basics of the Game Maker Interface and implement a very basic action game similar to Space Invaders.

More information

Comprehensive Rules Document v1.1

Comprehensive Rules Document v1.1 Comprehensive Rules Document v1.1 Contents 1. Game Concepts 100. General 101. The Golden Rule 102. Players 103. Starting the Game 104. Ending The Game 105. Kairu 106. Cards 107. Characters 108. Abilities

More information

CS 371M. Homework 2: Risk. All submissions should be done via git. Refer to the git setup, and submission documents for the correct procedure.

CS 371M. Homework 2: Risk. All submissions should be done via git. Refer to the git setup, and submission documents for the correct procedure. Homework 2: Risk Submission: All submissions should be done via git. Refer to the git setup, and submission documents for the correct procedure. The root directory of your repository should contain your

More information

Multiple Quests using the ScriptEase II Story System

Multiple Quests using the ScriptEase II Story System Multiple Quests using the ScriptEase II Story System In this tutorial we will be adding another pirate to our game. This pirate will wander around the world looking for his parrot and refuse to come on

More information

CONCEPTS EXPLAINED CONCEPTS (IN ORDER)

CONCEPTS EXPLAINED CONCEPTS (IN ORDER) CONCEPTS EXPLAINED This reference is a companion to the Tutorials for the purpose of providing deeper explanations of concepts related to game designing and building. This reference will be updated with

More information

The Archery Motion pack requires the following: Motion Controller v2.23 or higher. Mixamo s free Pro Longbow Pack (using Y Bot)

The Archery Motion pack requires the following: Motion Controller v2.23 or higher. Mixamo s free Pro Longbow Pack (using Y Bot) The Archery Motion pack requires the following: Motion Controller v2.23 or higher Mixamo s free Pro Longbow Pack (using Y Bot) Importing and running without these assets will generate errors! Demo Quick

More information

By Chris Burton. User Manual v1.60.5

By Chris Burton. User Manual v1.60.5 By Chris Burton User Manual v1.60.5 Table of Contents Introduction 7 Chapter I: The Basics 1. 9 Setting up 10 1.1. Installation 1.2. Running the demo games 1.3. The Game Editor window 1.3.1. The New Game

More information

fautonomy for Unity 1 st Deep Learning AI plugin for Unity

fautonomy for Unity 1 st Deep Learning AI plugin for Unity fautonomy for Unity 1 st Deep Learning AI plugin for Unity QUICK USER GUIDE (v1.2 2018.07.31) 2018 AIBrain Inc. All rights reserved The below material aims to provide a quick way to kickstart development

More information

Step 1 - Setting Up the Scene

Step 1 - Setting Up the Scene Step 1 - Setting Up the Scene Step 2 - Adding Action to the Ball Step 3 - Set up the Pool Table Walls Step 4 - Making all the NumBalls Step 5 - Create Cue Bal l Step 1 - Setting Up the Scene 1. Create

More information

Unity Certified Programmer

Unity Certified Programmer Unity Certified Programmer 1 unity3d.com The role Unity programming professionals focus on developing interactive applications using Unity. The Unity Programmer brings to life the vision for the application

More information

Live Agent for Administrators

Live Agent for Administrators Salesforce, Spring 18 @salesforcedocs Last updated: January 11, 2018 Copyright 2000 2018 salesforce.com, inc. All rights reserved. Salesforce is a registered trademark of salesforce.com, inc., as are other

More information

2D Platform. Table of Contents

2D Platform. Table of Contents 2D Platform Table of Contents 1. Making the Main Character 2. Making the Main Character Move 3. Making a Platform 4. Making a Room 5. Making the Main Character Jump 6. Making a Chaser 7. Setting Lives

More information

The lump sum amount that a series of future payments is worth now; used to calculate loan payments; also known as present value function Module 3

The lump sum amount that a series of future payments is worth now; used to calculate loan payments; also known as present value function Module 3 Microsoft Excel Formulas Made Easy Key Terms Term Definition Introduced In Absolute reference A cell reference that is fixed to a specific cell and contains a constant value throughout the spreadsheet

More information

Kismet Interface Overview

Kismet Interface Overview The following tutorial will cover an in depth overview of the benefits, features, and functionality within Unreal s node based scripting editor, Kismet. This document will cover an interface overview;

More information

Lightroom System April 2018 Updates

Lightroom System April 2018 Updates Lightroom System April 2018 Updates This April Adobe updated Lightroom Classic CC. This included a major update to profiles, making profile looks more prominent. Some essential interface tweaks and also

More information

Live Agent for Administrators

Live Agent for Administrators Live Agent for Administrators Salesforce, Spring 17 @salesforcedocs Last updated: April 3, 2017 Copyright 2000 2017 salesforce.com, inc. All rights reserved. Salesforce is a registered trademark of salesforce.com,

More information

Unity 3.x. Game Development Essentials. Game development with C# and Javascript PUBLISHING

Unity 3.x. Game Development Essentials. Game development with C# and Javascript PUBLISHING Unity 3.x Game Development Essentials Game development with C# and Javascript Build fully functional, professional 3D games with realistic environments, sound, dynamic effects, and more! Will Goldstone

More information

iphoto Getting Started Get to know iphoto and learn how to import and organize your photos, and create a photo slideshow and book.

iphoto Getting Started Get to know iphoto and learn how to import and organize your photos, and create a photo slideshow and book. iphoto Getting Started Get to know iphoto and learn how to import and organize your photos, and create a photo slideshow and book. 1 Contents Chapter 1 3 Welcome to iphoto 3 What You ll Learn 4 Before

More information

EMC ViPR SRM. Alerting Guide. Version

EMC ViPR SRM. Alerting Guide. Version EMC ViPR SRM Version 4.0.2.0 Alerting Guide 302-003-445 01 Copyright 2015-2017 Dell Inc. or its subsidiaries All rights reserved. Published January 2017 Dell believes the information in this publication

More information

Instructions for using Object Collection and Trigger mechanics in Unity

Instructions for using Object Collection and Trigger mechanics in Unity Instructions for using Object Collection and Trigger mechanics in Unity Note for Unity 5 Jason Fritts jfritts@slu.edu In Unity 5, the developers dramatically changed the Character Controller scripts. Among

More information

welcome to the world of atys! this is the first screen you will load onto after logging.this is the character-generating screen.

welcome to the world of atys! this is the first screen you will load onto after logging.this is the character-generating screen. welcome to the world of atys! this is the first screen you will load onto after logging.this is the character-generating screen. Choose an empty slot. This is where your character will be placed after

More information

BULLYDOWN PHASE ONE BULLETIN BOARD FOCUS GROUP: MODERATOR SCRIPT

BULLYDOWN PHASE ONE BULLETIN BOARD FOCUS GROUP: MODERATOR SCRIPT BULLYDOWN PHASE ONE BULLETIN BOARD FOCUS GROUP: MODERATOR SCRIPT [Note: This is a template. Questions will evolve based on the content of the discussions.] Objectives: 1. To illuminate the current exposure

More information

Learn Unity by Creating a 3D Multi-Level Platformer Game

Learn Unity by Creating a 3D Multi-Level Platformer Game Learn Unity by Creating a 3D Multi-Level Platformer Game By Pablo Farias Navarro Certified Unity Developer and Founder of Zenva Table of Contents Introduction Tutorial requirements and project files Scene

More information

Unity Game Development Essentials

Unity Game Development Essentials Unity Game Development Essentials Build fully functional, professional 3D games with realistic environments, sound, dynamic effects, and more! Will Goldstone 1- PUBLISHING -J BIRMINGHAM - MUMBAI Preface

More information

QUICKSTART COURSE - MODULE 1 PART 2

QUICKSTART COURSE - MODULE 1 PART 2 QUICKSTART COURSE - MODULE 1 PART 2 copyright 2011 by Eric Bobrow, all rights reserved For more information about the QuickStart Course, visit http://www.acbestpractices.com/quickstart Hello, this is Eric

More information

Add Rays Of Sunlight To A Photo With Photoshop

Add Rays Of Sunlight To A Photo With Photoshop Add Rays Of Sunlight To A Photo With Photoshop Written by Steve Patterson. In this photo effects tutorial, we'll learn how to easily add rays of sunlight to an image, a great way to make an already beautiful

More information

PASS Sample Size Software. These options specify the characteristics of the lines, labels, and tick marks along the X and Y axes.

PASS Sample Size Software. These options specify the characteristics of the lines, labels, and tick marks along the X and Y axes. Chapter 940 Introduction This section describes the options that are available for the appearance of a scatter plot. A set of all these options can be stored as a template file which can be retrieved later.

More information

Star Defender. Section 1

Star Defender. Section 1 Star Defender Section 1 For the first full Construct 2 game, you're going to create a space shooter game called Star Defender. In this game, you'll create a space ship that will be able to destroy the

More information

Mike Wynn - ArtofAlpha.com

Mike Wynn - ArtofAlpha.com The Art of Alpha Presents' 7 Proven Conversation Starters That Lead To Dates How to easily approach any women, And not get stuck in your head wondering what to say I just let another beautiful woman slip

More information

Game Maker Tutorial Creating Maze Games Written by Mark Overmars

Game Maker Tutorial Creating Maze Games Written by Mark Overmars Game Maker Tutorial Creating Maze Games Written by Mark Overmars Copyright 2007 YoYo Games Ltd Last changed: February 21, 2007 Uses: Game Maker7.0, Lite or Pro Edition, Advanced Mode Level: Beginner Maze

More information

Key Abstractions in Game Maker

Key Abstractions in Game Maker Key Abstractions in Game Maker Foundations of Interactive Game Design Prof. Jim Whitehead January 19, 2007 Creative Commons Attribution 2.5 creativecommons.org/licenses/by/2.5/ Upcoming Assignments Today:

More information

Live Agent for Administrators

Live Agent for Administrators Live Agent for Administrators Salesforce, Summer 16 @salesforcedocs Last updated: July 28, 2016 Copyright 2000 2016 salesforce.com, inc. All rights reserved. Salesforce is a registered trademark of salesforce.com,

More information

IMGD 1001: Programming Practices; Artificial Intelligence

IMGD 1001: Programming Practices; Artificial Intelligence IMGD 1001: Programming Practices; Artificial Intelligence Robert W. Lindeman Associate Professor Department of Computer Science Worcester Polytechnic Institute gogo@wpi.edu Outline Common Practices Artificial

More information

Section 39: BobmerMan How-To

Section 39: BobmerMan How-To Section 39: BobmerMan How-To 1. Getting Started 1. Download, unzip, and open the Starter files 2. Test it out 2. Dropping Bombs 1. Edit the script file Player.cs 1. Edit the method DropBomb(), inside the

More information

Understanding OpenGL

Understanding OpenGL This document provides an overview of the OpenGL implementation in Boris Red. About OpenGL OpenGL is a cross-platform standard for 3D acceleration. GL stands for graphics library. Open refers to the ongoing,

More information

Game Design Comp 150GD. Michael Shah 3/6/15

Game Design Comp 150GD. Michael Shah 3/6/15 Game Design Comp 150GD Michael Shah 3/6/15 Topics 1. Digital Game Testing 2. C# Scripting Tips 3. GUI 4. Music Room Part 1 - Digital Game Testing PLAYTEST ROUND #3 (20 minutes): 1. Observers stay to manage

More information

Tutorial: Creating maze games

Tutorial: Creating maze games Tutorial: Creating maze games Copyright 2003, Mark Overmars Last changed: March 22, 2003 (finished) Uses: version 5.0, advanced mode Level: Beginner Even though Game Maker is really simple to use and creating

More information

Educational Technology Lab

Educational Technology Lab Educational Technology Lab National and Kapodistrian University of Athens School of Philosophy Faculty of Philosophy, Pedagogy and Philosophy (P.P.P.), Department of Pedagogy Director: Prof. C. Kynigos

More information

IMGD 1001: Programming Practices; Artificial Intelligence

IMGD 1001: Programming Practices; Artificial Intelligence IMGD 1001: Programming Practices; Artificial Intelligence by Mark Claypool (claypool@cs.wpi.edu) Robert W. Lindeman (gogo@wpi.edu) Outline Common Practices Artificial Intelligence Claypool and Lindeman,

More information

Module All You Ever Need to Know About The Displace Filter

Module All You Ever Need to Know About The Displace Filter Module 02-05 All You Ever Need to Know About The Displace Filter 02-05 All You Ever Need to Know About The Displace Filter [00:00:00] In this video, we're going to talk about the Displace Filter in Photoshop.

More information

Part II Coding the Animation

Part II Coding the Animation Part II Coding the Animation Welcome to Part 2 of a tutorial on programming with Alice and Garfield using the Alice 2 application software. In Part I of this tutorial, you created a scene containing characters

More information

Perspective Shadow Text Effect In Photoshop

Perspective Shadow Text Effect In Photoshop Perspective Shadow Text Effect In Photoshop Written by Steve Patterson. In this Photoshop text effects tutorial, we ll learn how to create a popular, classic effect by giving text a perspective shadow

More information

Phase 2: Testing & Validation: Forever Affiliate Content Strategy - Minisite & Authority Site

Phase 2: Testing & Validation: Forever Affiliate Content Strategy - Minisite & Authority Site Phase 2: Testing & Validation: Forever Affiliate Content Strategy - Minisite & Authority Site Okay. Welcome to Phase 2: Testing and Validation: Forever Affiliate Content Strategy for Minisites and Authority

More information

True bullet 1.03 manual

True bullet 1.03 manual Introduction True bullet 1.03 manual The True bullet asset is a complete game, comprising a gun with very realistic bullet ballistics. The gun is meant to be used as a separate asset in any game that benefits

More information

IDG Easy Iray Studio 2 User Guide

IDG Easy Iray Studio 2 User Guide IDG Easy Iray Studio 2 User Guide Usage Notes: We highly recommend that to get the most out of this product, and to make your experience the easiest, that you don t use Smart Content. Instead switch to

More information

TEXT PERSPECTIVE SHADOW EFFECT

TEXT PERSPECTIVE SHADOW EFFECT TEXT PERSPECTIVE SHADOW EFFECT In this Photoshop text effects tutorial, we ll learn how to create a popular, classic effect by giving text a perspective shadow as if a light source behind the text was

More information

MIRROR IMAGING. Author: San Jewry LET S GET STARTED. Level: Beginner+ Download: None Version: 1.5

MIRROR IMAGING. Author: San Jewry LET S GET STARTED. Level: Beginner+ Download: None Version: 1.5 Author: San Jewry Level: Beginner+ Download: None Version: 1.5 In this tutorial, you will learn how to create a mirror image of your work. Both sides will look exactly the same no matter how much you tweak

More information

GlassSpection User Guide

GlassSpection User Guide i GlassSpection User Guide GlassSpection User Guide v1.1a January2011 ii Support: Support for GlassSpection is available from Pyramid Imaging. Send any questions or test images you want us to evaluate

More information

understanding sensors

understanding sensors The LEGO MINDSTORMS EV3 set includes three types of sensors: Touch, Color, and Infrared. You can use these sensors to make your robot respond to its environment. For example, you can program your robot

More information

Installation Instructions

Installation Instructions Installation Instructions Important Notes: The latest version of Stencyl can be downloaded from: http://www.stencyl.com/download/ Available versions for Windows, Linux and Mac This guide is for Windows

More information

Level 21: Creating the Boss Battle 2

Level 21: Creating the Boss Battle 2 Level 21: Creating the Boss Battle 2 Welcome to Level 21 of the RPG Maker VX Introductory Course. In the previous Level, we created the boss, Devil King Gonzare. We are now ready to create the actual Boss

More information

Introducing Scratch Game development does not have to be difficult or expensive. The Lifelong Kindergarten Lab at Massachusetts Institute

Introducing Scratch Game development does not have to be difficult or expensive. The Lifelong Kindergarten Lab at Massachusetts Institute Building Games and Animations With Scratch By Andy Harris Computers can be fun no doubt about it, and computer games and animations can be especially appealing. While not all games are good for kids (in

More information

Steven Slate Drums 4.0

Steven Slate Drums 4.0 Steven Slate Drums 4.0 1 Steven Slate Drums 4.0 2 Introduction... 3 System Requirements... 4 Windows... 4 Mac OS X... 4 Installation... 4 Windows & Mac OS X... 4 Loading a Kit... 5 Loading an Instrument...

More information

Easy Input Helper Documentation

Easy Input Helper Documentation Easy Input Helper Documentation Introduction Easy Input Helper makes supporting input for the new Apple TV a breeze. Whether you want support for the siri remote or mfi controllers, everything that is

More information

Grading Delays. We don t have permission to grade you (yet) We re working with tstaff on a solution We ll get grades back to you as soon as we can

Grading Delays. We don t have permission to grade you (yet) We re working with tstaff on a solution We ll get grades back to you as soon as we can Grading Delays We don t have permission to grade you (yet) We re working with tstaff on a solution We ll get grades back to you as soon as we can Due next week: warmup2 retries dungeon_crawler1 extra retries

More information

Easily Smooth And Soften Skin In A Photo With Photoshop

Easily Smooth And Soften Skin In A Photo With Photoshop Easily Smooth And Soften Skin In A Photo With Photoshop Written by Steve Patterson OPEN THE START FILE BY RIGHT CLICKING THE.JPG FILE AND CHOOSING OPEN WITH ADOBE PHOTOSHOP. SAVE AS: X_lastname_firstname_Smooth_Soft

More information

ADD A REALISTIC WATER REFLECTION

ADD A REALISTIC WATER REFLECTION ADD A REALISTIC WATER REFLECTION In this Photoshop photo effects tutorial, we re going to learn how to easily add a realistic water reflection to any photo. It s a very easy effect to create and you can

More information

Audacity 5EBI Manual

Audacity 5EBI Manual Audacity 5EBI Manual (February 2018 How to use this manual? This manual is designed to be used following a hands-on practice procedure. However, you must read it at least once through in its entirety before

More information

Go Daddy Online Photo Filer

Go Daddy Online Photo Filer Getting Started and User Guide Discover an easier way to share, print and manage your photos online! Online Photo Filer gives you an online photo album site for sharing photos, as well as easy-to-use editing

More information

Photoshop CS6 automatically places a crop box and handles around the image. Click and drag the handles to resize the crop box.

Photoshop CS6 automatically places a crop box and handles around the image. Click and drag the handles to resize the crop box. CROPPING IMAGES In Photoshop CS6 One of the great new features in Photoshop CS6 is the improved and enhanced Crop Tool. If you ve been using earlier versions of Photoshop to crop your photos, you ll find

More information

Creating Dynamic Soundscapes Using an Artificial Sound Designer

Creating Dynamic Soundscapes Using an Artificial Sound Designer 46 Creating Dynamic Soundscapes Using an Artificial Sound Designer Simon Franco 46.1 Introduction 46.2 The Artificial Sound Designer 46.3 Generating Events 46.4 Creating and Maintaining the Database 46.5

More information

GD&T Administrator Manual v 1.0

GD&T Administrator Manual v 1.0 The GD&T Professional Edition GD&T Administrator Manual v 1.0 800-886-0909 Effective Training Inc. www.etinews.com Introduction to the GD&T Administrator s Manual There are two Administration programs

More information

Color Correction and Enhancement

Color Correction and Enhancement 10 Approach to Color Correction 151 Color Correction and Enhancement The primary purpose of Photoshop is to act as a digital darkroom where images can be corrected, enhanced, and refined. How do you know

More information

GETTING STARTED MAKING A NEW DOCUMENT

GETTING STARTED MAKING A NEW DOCUMENT Accessed with permission from http://web.ics.purdue.edu/~agenad/help/photoshop.html GETTING STARTED MAKING A NEW DOCUMENT To get a new document started, simply choose new from the File menu. You'll get

More information

Introduction to Turtle Art

Introduction to Turtle Art Introduction to Turtle Art The Turtle Art interface has three basic menu options: New: Creates a new Turtle Art project Open: Allows you to open a Turtle Art project which has been saved onto the computer

More information

CRYPTOSHOOTER MULTI AGENT BASED SECRET COMMUNICATION IN AUGMENTED VIRTUALITY

CRYPTOSHOOTER MULTI AGENT BASED SECRET COMMUNICATION IN AUGMENTED VIRTUALITY CRYPTOSHOOTER MULTI AGENT BASED SECRET COMMUNICATION IN AUGMENTED VIRTUALITY Submitted By: Sahil Narang, Sarah J Andrabi PROJECT IDEA The main idea for the project is to create a pursuit and evade crowd

More information

Making Domino Designer work like you want

Making Domino Designer work like you want Making Domino Designer work like you want If there's any common refrain I hear from developers when it comes to Domino 8.5, it's that they have issues with Designer. Struggling with an IDE is always painful,

More information

the gamedesigninitiative at cornell university Lecture 20 Optimizing Behavior

the gamedesigninitiative at cornell university Lecture 20 Optimizing Behavior Lecture 20 2 Review: Sense-Think-Act Sense: Perceive world Reading game state Example: enemy near? Think: Choose an action Often merged with sense Example: fight or flee Act: Update state Simple and fast

More information

NWN ScriptEase Tutorial

NWN ScriptEase Tutorial Name: Date: NWN ScriptEase Tutorial ScriptEase is a program that complements the Aurora toolset and helps you bring your story to life. It helps you to weave the plot into your story and make it more interesting

More information

LPR SETUP AND FIELD INSTALLATION GUIDE

LPR SETUP AND FIELD INSTALLATION GUIDE LPR SETUP AND FIELD INSTALLATION GUIDE Updated: May 1, 2010 This document was created to benchmark the settings and tools needed to successfully deploy LPR with the ipconfigure s ESM 5.1 (and subsequent

More information

Create a Candy Cane. Create a new canvas with the size 8x10 inches at 300 pixel/inch. See image below Ctrl + N

Create a Candy Cane. Create a new canvas with the size 8x10 inches at 300 pixel/inch. See image below Ctrl + N Create a Candy Cane The Basic Candy Cane Canvas and Shape 1. Create a new folder, name it Candy Cane your name. Create a new canvas with the size 8x10 inches at 300 pixel/inch. See image below Ctrl + N

More information

Computer Science 25: Introduction to C Programming

Computer Science 25: Introduction to C Programming California State University, Sacramento College of Engineering and Computer Science Computer Science 25: Introduction to C Programming Fall 2018 Project Dungeon Battle Overview Time to make a game a game

More information

A. creating clones. Skills Training 5

A. creating clones. Skills Training 5 A. creating clones 1. clone Bubbles In many projects you see multiple copies of a single sprite: bubbles in a fish tank, clouds of smoke, rockets, bullets, flocks of birds or of sheep, players on a soccer

More information