Building Relationships Progress Report

From EQUIS Lab Wiki

Jump to: navigation, search

This is the midterm progress report for the Building Relationships project.


Contents

Group Name

Powerpuff Girls

Group Members

  • Julian Lepinski
  • Sylvia Cheng

Description of Project

This project involves adding interactions between the player and the NPCs (Non-Player Characters). This is very similar to the popular game by Electronic Arts, The Sims. The interactions that can be performed between the player and the NPCs include: hugging, slapping, handshaking, and insulting (just to name some). Executing some of these interactions will result in positive relationships with the NPC while some will result in negative relationships with the NPC. These relationships will potentially affect future interactions with the NPCs; for example, if the player issues an order for a NPC to chop wood for him/her, the NPC may refuse to do so if their relationship is in the enemy or stranger state.

User Interface

Relationship Status and Villager Information

When the user comes into close proximity with a character in the game, a status box appears in the bottom right corner of the screen. Currently there is text box indicating the name of the villager and the state of their relationship (in a numerical value). The relationship is also described as being an enemy, acquaintance, stranger, friend, or lover. A graphical meter developed by the art students may eventually replace this box. This box also contains information about the villager that is interacting with the player. For example, the villager’s name is displayed (along with the affinity). There are currently data available to all four existent villagers in the game. We have also created methods for setting and retrieving this information so our game can support many more villagers and their data.

Modes

When the player is in close proximity to a villager, the interaction mode is initiated. As the player moves away from the NPC he/she is interacting with, the interaction mode is turned off. Likewise, when a user is in close proximity to a resource, a resource mode is triggered (e.g. harvesting).

File:Mode.jpg

Interaction with NPC

Once the user is in interaction mode, an interaction minigame will appear that will allow the player to choose which interaction to perform with the NPC. The user can choose to perform the following interactions (where + denotes a positive interaction and – denotes a negative one): handshaking (+), talking in friendly context (+), flirting (+), serenading (+), slapping (-), and insulting (-). After an interaction is selected, a mesh model with its material properties will appear above the player’s head; this model will illustrate the interaction (see the art section for more details). At present time, we have added an entity (a treeclump mesh with its material data) above the player’s head. This entity can easily be modified after we receive the models from the art students. Depending on whether or not animations will be made for the interactions, the entity above the head may simply rotate (if animations are not made). Since the state of the relationship with every NPC is stored, when the player approaches a NPC to issue a task for the NPC to perform, the NPC may decline to help the player. In the game, as the player approaches a tree, for example, the command to chop a tree is initiated by pressing the enter key. The NPC in closest proximity to the player is automatically chosen to chop wood. If the relationship with the NPC is poor (e.g. in enemy state or a stranger), the NPC will refuse to chop the tree for the player. After chopping a tree for the player, the player’s relationship with the NPC will go up.

File:Ogre tree.jpg

Interaction minigame

The following is a mockup of the interaction minigame.

File:BRminigame.png

Art Requirements

The following models will be REQUIRED for our project:

The following interactions can be represented graphically through mesh and material models. The models listed are suggestions. Arrangements have been made with Jennifer in creating these designs. All the interactions will be shown in thought bubbles. The basic thought bubble (with nothing in it) has already been created. A three-dimensional heart has been created as well.

Acquaintances:

1. handshaking -- model of two hands shaking

Friends:

2. talking in friendly context -- speech bubble with happy face

Romantic Partners:

3. flirting -– a heart

4. serenading -- guitar and music notes

Enemies:

5. slapping -– a SMACK@!! text graphic

6. insulting -- hand giving the finger / dead fish / poison

We will also be requiring an image to show the status of the player's relationship to NPCs (e.g. a mood meter). The below image illustrates what we are looking for.

File:RelationshipBar.PNG

The last model that we will be requiring is a menu system for the above interactions which will allow the user to select which interaction to perform (e.g. a list with text).


The following models are OPTIONAL:

Sound effects for all the above interactions (excluding serenading -- we will be using our own music for this – this will be implemented as time permits).

Project Milestones

Milestone Status
Add villager affinity and name data types to villagers Completed
Add proximity triggers to villagers Completed
Add new game mode for NPC interaction Completed
Add overlay text display on NPC affinity when in interaction mode Completed
Change overlay text to be graphical affinity meter 2 more weeks
Add NPC interaction commands to InputManager 1 more week
Implement issuing commands to closest NPC (e.g. chop wood) 1 more week
Add floating NPC affinity models overhead 2 more weeks + model wait time
Change NPC behaviour based on affinity 3 more weeks
NPC interaction minigame (so it's not so easy to get them to like you) 4 weeks, if possible
Add music based on avatar's mood If time permits
Add sound effects to interactions If time permits
Implement interactions among multiple people (e.g. jealousy, mutual enemies)

Technology

Architectural Changes

To date the major game architectural changes have focused on the implementation of the interaction mode with NPCs. This has included the addition of triggers for each NPC which trigger a new mode (similar to resource harvesting mode) that is entered when the user is close enough to the NPC. In this mode a new hud element is enabled which gives the player feedback about the currently targeted NPC's disposition towards them. The Villager structure was modified to now include information about the villager disposition, and unique names to identify them. Changes in progress include changes to the InputManager to allow for interaction input, and changes to the CAXGame to include new models based on NPC disposition.

CAXGameState

  • Addition of a new game state (CAXInteractionGameState)
    • New state follows closely to preexisting (CAXActionGameState) architecture
    • Includes additional overlay showing / hiding for new HUD elements
    • (Incomplete) toggles acceptance of new input in minigame

CAXVillagerManager

  • As each villager is placed, a proximity trigger is also placed to trigger interaction state
    • Similar to harvest triggers placed at resource nodes
  • setupVillagers() -- initializes villagers with names and disposition values (this may be moved elsewhere in future)

overlay

  • New hud overlay information display, which includes information on player affinity and name. (This will be updated to a graphical display in future.)
    • Only displayed when in CAXInteractionGameState
    • Includes a text overlay indicating mode change, as well as an infobox in bottom-right corner with villager information
  • (Incomplete) Replacement hud overlay -- graphics instead of text

CAXVillager

  • Added new private data and associated get/set methods for NPC name and disposition towards the user (also added correspondingly to CAXVillagerData)
    • mVillagerName -- private string which holds unique villager names
    • mVillagerDisposition -- private int which holds villager disposition towards player
    • getVillagerName() -- returns the mVillagerName string
    • getVillagerDisposition() -- returns the mVillagerDisposition int
    • setVillagerName() -- sets the mVillagerName string
    • setVillagerDisposition() -- sets the mVillagerDisposition int

InputManager

  • (Incomplete) Addition of new input to enable NPC interaction
  • (Incomplete -- Not for sure!) Interface with joystick controls for possible NPC interaction minigame

CAXGame

  • (Incomplete) Addition of new models above NPCs displaying their general feelings

File:BRvillagerdata2.png

Third Party Packages

None currently used. TAO.sdl


Interaction with other groups

Life is an Online Village

Some initial discussion by Scott on integrating multiplayer aspects with other groups. While our project would certainly be well suited to a multiplayer aspect, there hasn't been any further discussion on this, so it's assumed to be on hold at present.