Friday, 26 October 2012

A Starry Night : Whodunit - Murder He Worte


PRESENTS


BASED ON THEMES DERIVED FROM



A STARRY NIGHT BY VINCENT VAN GOGH


So for our Second Prototype game we had a lot of fun developing it. We deiced to make our own Whodunit type game as a bases for telling a story. Essentially we have created a framework for players to play through a murder mystery in the town based in A Starry Night. We decided as a group the themes that best represented the painting are dark and depressing so we used that as a base for the Whodunit, by crafting characters and mechanics that will fill that role.

Concept:

We started out with the basic concept of a Whodunit murder mystery since that at its heart is a story driven book, we took this concept because it allowed us the amount of control we required to guide players through the game with our themes intact. We eventually released the control we had into one of the players who will play a "Van Gogh" which is essentially a Game Master. He leads the players through the game providing answers to there questions and providing them with clues, he controls the important facts about the game.

Rules:

  •             Players will decide on a player to be the 'Van Gogh'. The Van Gogh acts as a game master and narrator for the game. The VG will then choose one of the 11 characters to be a murderer and one to be a victim. They will then create a plot as simple or complicated as they want using the rest of the characters. Use sample plot as a template.

  •       Every player picks a character bio card (this is their character) and places their token in the town square.

  •       The objective of the game is for players to successfully discover which of the 11 characters is the murderer.

  •             The game will begin with the Van Gogh telling the players who the murder victim is and suspicious details about the townspeople that may or may not be relevant to the murder. The type and amount of information given is completely up to the Van Gogh.

  •       Players gather information about the murder in two ways: Talking to characters and investigating areas around the town. Only one of these actions may be done each turn.
    •      Players can talk to any of the 11 characters to gather information on the murder. This is done by asking the Van Gogh any question they want that they feel is relevant to the crime. All characters have things that anger them. Trying to determine motive is a good place to start.

    •       Players may also talk to other players, but there is no guarantee that other players will share information or even tell the truth.

    •       Players may also investigate any of the places in the town in an attempt to discover clues about the murder. The players must justify to the Van Gogh why they are investigating certain places. If the Van Gogh determines an investigation to be 'successful', a player is rewarded with a clue card, which has valuable information on the murder.
      • *It is important to note that this game is a very role-playing 'table talking game. The Van Gogh will always tell the truth, but may withhold certain information depending on how justified you are in asking what you are asking.
  •      After every player has had a turn, the game advances to the next night. Every three nights, the Van Gogh picks another character (not being played) to fall victim to their murderer.
  •     The game progresses until a player is confident that they know who the murderer is and what the murder weapon was. The player will make their accusation at the beginning of their turn. If they are correct, the game is over. If they are incorrect, they are out of the game.


The Van Gogh Role Tips:


This is intended as a reference guide for the Van Gogh of the story.  Remember, the Van Gogh is the most important player; they set up the game, and are usually the host of the party.  They are the god within the machine, all-knowing.   They need to be good at improvisation, because some story arcs will appear out of thin air!
  • To do beforehand:
    • Scene of Crime:  Specify the location of the murdered person.  It can be anywhere as long as it is not the town square.  As an example, use the graveyard.
    • Murderer:  Each player can hypothetically be a murderer.  Make sure you specify who the murderer is beforehand, so that you can’t accidentally change it halfway through.  Also give the player a reason to murder.  Don’t have the priest randomly kill the widow without explaining why he might do that.  Some player relations are listed on the Bio sheets.  For advanced players, you can make a murderer as well as an accomplice.  To start, it is recommended to use the Baker on his own as the murderer.
    • Back story:  Create some back story for the NPCs that you’ll be controlling.  This back story is basically just what the character was doing night of the murder, so possible alibis.  These change from game to game.  We recommend having something like the priest saw the town drunk get outrageously drunk the night of the murder and pass out in the park.  Also, have something like the baker’s assistant was out of town that night on a delivery.  Use your imagination, you tell the story!
    • Clues in the area:  Make sure you think about some clues and where they are going to be found in the game map.  For instance, if the dead body was found to be poisoned, and the baker happens to have an empty bottle of poison in his garbage, it looks extremely suspicious.  Similarly, if there are only male footprints at the scene of the crime, it is unlikely that the murderer was a female.  If the clues provided aren't good enough, take one of the blank ones and write something down!
  • To do during:
    • Make sure people tell good stories.  If someone says “I search the area for clues” give them a poor clue at best.  But, if they say something like “I meticulously search the main path to the cemetery, looking for footprints”, award that player with exactly what he was looking for.  Remember, this game is just as much about storytelling as it is murder mystery and role playing.
    • Just because someone asks a question, doesn't mean you need to answer it.  If a player challenges an NPC saying unimaginative like, “Did you murder him?”, feel free to create a story workaround so that you don’t have to answer it, such as: “I get so offended at you slandering my good name that I punch you in the face and knock you out”.  This is to discourage people asking easy questions.  However, should you choose to actually give an answer, it MUST BE TRUE.
    • Someone looks for a clue that you don’t have?  Let’s say a player looks around in a bush to find poison berries, which could be a murder weapon.  You could tell the player he finds nothing, or for advanced players, feed him a false clue by taking a second write down the poison berries on one of the blank clue cards provided!   Be careful of this though, you need to keep track of the clues players find, and how they relate to the game. 
    • Slow game?  Kill a character!   If you find that the game is slowing down and the players aren't making much progress, you have the option to kill off an NPC every 3 turns.  This helps the player by adding a new murder scene where you can plant new clues.  Also, it decreases the amount of possible suspects, helping out the players.



Character Bios:

Name:
Basile Chaput
Gender:
Male
Occupation
Butcher
Age:
32
Height:
5 foot 4
Important Relations:
Has a secret crush on the candlestick maker
Facts:
Likes to walk alone at night
No one knows where he gets his meat
Is a vegetarian


Name:
Léo Gosselin
Gender:
Male
Occupation
Town Drunk
Age:
40
Height:
6 Feet
Important Relations:
Brother of the widow
On good terms with constable
Facts:
Occasionally passes out in the graveyard or park
Sometimes gets arrested for public indecency, drunkenness, etc. 
Used to be a soldier

Name:
Guy Tailler
Gender:
Male
Occupation
Baker
Age:
28
Height:
4 foot  11
Important Relations:
Is crushed on by the candlestick maker
Frequently employs the services of the courtesan
Facts:
Severe Napoleon complex
Binge eats his own pastries
Used to make cakes for royalty, quit because he was ridiculed for his height

Name:
Jérémie Archambault
Gender:
Male
Occupation
Gravedigger
Age:
22
Height:
6 foot 2
Important Relations:
Married to the Baker’s Assistant
Doesn't get along well with the Priest
Facts:
Extremely emotional
Works at nighttime as a gravedigger
Often falls asleep on the job, making Father Benoit dislike him somewhat
Falls asleep in the graves he digs. 
Can talk his way out of any situation, smooth talker

Name:
Léandre Gagnier
Gender:
Male
Occupation
Constable
Age:
35
Height:
5 foot 8
Important Relations:
Mutual respect with town drunk
Doesn't trust the gravedigger
Facts:
Bad judge of character
Nighttime vigilante
Can’t talk to women
Name:
Marion Archambault
Gender:
Female
Occupation
Baker’s assistant
Age:
20
Height:
5 foot 6
Important Relations:
Good friends with candlestick maker
Married to the gravedigger
Facts:
Gossips often with the candlestick maker
Unintentionally flirty
Does deliveries for the baker.

Name:
Suzanne Lapointe
Gender:
Female
Occupation
Courtesan
Age:
26
Height:
5 foot 4
Important Relations:
Has a crush on the gravedigger
Is frequently employed by the baker
Facts:
Extremely insightful
Knows everyone’s secrets
Is very good at keeping them

Name:
Geneveve Janvier
Gender:
Female
Occupation
Candlestick maker
Age:
21
Height:
5 foot 7
Important Relations:
Has a crush on the baker
Is good friends with the baker’s assistant
Facts:
Has recently put on weight and is insecure about it
Short temper
Very affectionate about her cats

Name:
Pétronille Chastain
Gender:
Female
Occupation
Widow
Age:
45
Height:
5 foot 2
Important Relations:
Sister of the town drunk
Good friends with Father Benoit
Facts:
Religious
Has a loyal dog
Indifferent
Is a polite old lady

Name:
Father Francois Benoit
Gender:
Male
Occupation
Priest
Age:
50
Height:
5 foot 10
Important Relations:
Dislikes the gravedigger
Good friends with the widow
Thinks the courtesan will spend eternity in hell
Facts:
Has as wooden leg
Angry when people miss church
Carries holy water with him at all times.


Clues:

These are the predefined clues we provide to the "Van Gogh", he can also create his own clues on the blank cards we provide.



Wednesday, 17 October 2012

Flocking Algorithms

Flocking


A Flocking Behavior is a simple set of rules that can emerge into a set complex global behaviors. There are many uses in game and simulator development for flocking. Whether you want you units to move around the map or you want to simulate a flock of seagulls or fish you can even emulate crowds, flocking provides a base for you to work of off.

There are three basic rules to flocking, separation, cohesion and alignment. I have represented these rules below in the image.



Lets talk about how you can actually implement a basic flocking behavior.

Separation:

The function code below is how you calculate the separation vector for each boid.  This code loops through every boid and checks if the position between the object being updated and the object that the loop is processing is within the minimum allowed distance by your code.

In my implementation, not shown in the code below, I actually only pass each boid the boids that are close to  it already.

Pseudo code:


FUNCTION separate(boid bj)       
         Vector c = 0;  
         FOR EACH BOID b  
             IF b != bj THEN  
                 IF |b.position - bj.position| < 100 THEN  
                     c = c - (b.position - bj.position)  
                 END IF  
             END IF  
         END  
         RETURN c  
 END FUNCTION 


Cohesion:

Cohesion is what makes the boids stick together in the local groups. Without it flocking really cannot exist. It works by calculating the center of the mass of the local flock (average position).

In my implementation, not shown in the code below, I actually only pass each boid the boids that are close to  it already.

Pseudo code:



 FUNCTION cohere(boid bj)  
  Vector pcj  
  FOR EACH BOID b  
   IF b != bj THEN  
    pcj = pcj + b.position  
   END IF  
  END  
  pcj = pcj / N-1  
  RETURN (pcj - bj.position) / 100  
 END FUNCTION  




Alignment:

Alignment works by averaging the velocities of all the boids in the local area to get the boids moving in the same general direction.

In my implementation, not shown in the code below, I actually only pass each boid the boids that are close to  it already.

Pseudo code:



 FUNCTION align(boid bj)  
  Vector pvj  
  FOR EACH BOID b  
   IF b != bj THEN  
    pvj = pvj + b.velocity  
   END IF  
  END  
  pvj = pvj / N-1  
  RETURN (pvj - bj.velocity) / 8  
 END FUNCTION  




Moving the Boids:

This is the function that gives your there acceleration and velocity then adjusts there position. It simply calls the above functions and then sums their result.

In my implementation I do more processing on the vectors values, I normalize each vector and then multiply by a weight factor that I can tweak for each vector. After this I also normalize the end result to get a smoother motion.

Pseudo code:



 FUNCTION flock()  
  Vector separateVector, cohereVector, alignVector  
  Boid b  
  FOR EACH BOID b  
   separateVector = separate(b)  
   cohereVector = cohere(b)  
   alignVector = align(b)  
   b.velocity = b.velocity + separateVector + cohereVector + alignVector  
   b.position = b.position + b.velocity  
  END  
 END FUNCTION  



Conclusion:

In the above code and descriptions I have outlined the basic structure that I have used to create a simple flocking behavior, this code is just as valid whether you are dealing with a 2D or 3D space. There are improvement to the code, some of which I have added and others which I have not.

You can rotate the object so it is always facing the direction it is traveling in. You can also add rules that handle collision with other objects, and steering behaviors to create an even smoother appearance to the object moving.


Liars Dice Modification

This week we where tasked with removing the Positive Feedback loop in a popular version of the game of Liar's Dice. Each of my team members had to come up with 1 changed, added or removed rule.

Pity mod:
If a player has only one die left, they can go down or up on their call, rather than just up. The exception being that if there are two players left this rule no longer takes effect. 

Examples: A player calls 4 sixes, the player with 1 die left can in addition to the normal rules can say 3 sixes or 4 fives.

Result:
  • This allowed weaker players to stay in the game longer.
  • This somewhat reduces positive feedback loop.



Holdem mod:
All lost dice get placed in the center of the table and are rolled.  These dice count towards the global total of dice.

Result:
  • It turns out doesn't affect game play that much.
  • The players who are better at counting dice do better.
  • This actually reinforces positive feedback loop, rather than negating it.



Loser wins mod:
  • Winner is person who first loses all their dice.
  • Calling a bluff correctly loses you a die.
  • Calling a bluff incorrectly makes the person the bluff was called on loses a die.
  • Calling a spot on correctly makes you lose a die.
  • Calling a spot on incorrectly makes you gain a die.
Result:
  • This rule makes it get considerably harder as you lose dice.
  • The positive feedback loop replaced with a negative feedback loop.



Handicap mod
Everyone who didn't lose a dice each round has to reveal one of their dice in the next round
unless you have 1 die left.

Result:
  • The more you win the more other players know about your hand.
  • This hinders the positive feedback loop but does not remove it completely.


Lucky guesser mod:
If you call a spot on, you reacquire one lost die, but you can still only have as many as you started with

Result:
  • This rule actually enforces positive feedback loop.


Blind mod:
Every player gets to see everyone's dices but their own.

Result:
  • The less dice you have the harder it is for everyone to play.
  • This reverses positive feedback loop.




A couple of pictures taking during the play testing yesterday.

Always good to have a person play who is not in your group, Thanks Justin.


"Required" dice rolling picture.

Sunday, 14 October 2012

Battleship: Revision

Yesterday our in class we were tasked with modifying the classic game Battleship. For me this was a great experience because Battleship was one of my favorite games growing up, and I had lots of ideas back then on how to modify it, it was nice to get a chance to do that. Of course having only 20 minutes meant that my group had to move non-stop to finish the concept. Thankfully, we finished with only seconds to spare.

Lets talk about the rule modifications we made, we added 5 addition rules.


Storms- A storm is very dangerous. A storm occupies a single tile and damages that part of the ship during the turn. A storm is moved every full round (after all players have went). To determine where it went, players roll 2 D10’s and whatever the result is, the storm goes to that tile on both sides.

Cruise Missile- Every player gets three cruise missiles and can use them during the start of their turn instead of a regular attack. When using a cruise missile, a player announces a ship they wish to attack; they do not need to have previously hit the ship. A player rolls a D10 and if the result is 6 or greater, they successfully hit an undamaged part of that ship. If it is 5 or lower, they miss and it is the next players turn.

Movement- Every turn, a player can choose to move. When moving, a player can move 1 ship either three squares up or three squares down. Or, a player can choose to take up all three movements and rotate their ship along either end.

Repair crews- Every turn you can choose to repair a section of a ship. You simply state you are using a repair, and repair a single tile of a ship. You have a total of 5 repairs you can use.

Carpet Bomb- As long as your aircraft carrier is still up; you can choose to do a carpet bombing run. When doing a carpet bomb, you select a single vertical line (a line facing both players) and you hit every tile along that line.  You only hit the tiles on your opponent’s side. You can only do this once.  



Now some fast paced action pictures...