Building Relationships Progress Report
From EQUIS Lab Wiki
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).
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.
Interaction minigame
The following is a mockup of the interaction minigame.
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.
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) |
- Table layout shamelessly copied from Life is an Obstacle Course - Midterm Report. Thanks!
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
Third Party Packages
None currently used. TAO.sdl
- Potential addition for interfacing with XBOX360 controller. Additional info:
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.