Hot Potato Online



A

Hot Potato Online

Design Document

Platform: PC Online

Requirements: Low

Budget: Nonexistent

Target audience: Co-workers on break or lunch hour.

Synopsis: A mix of Bomberman with dodge ball, Hot Potato Online is an arcade-action mini-game aiming at fast time wasting for people to confront each other in a simple yet addictive environment.

Menus

Logo screen(s)

An overhead view of a stone in a grassy field with the Reality Interactive logo carved into it. A fraction of a second later, a Potato comes into view, as if thrown, bouncing to a stop against the stone. Its explosion covers the screen in white smoke, fading rapidly into the Title Screen. No music is necessary. Pressing any key or clicking the mouse skips to the title screen. No mouse is visible.

Title Screen

The characters are shown in action, with one throwing the Potato, the others fleeing it. The Hot Potato Online title glows feverishly along the short lively tune. A blinking message states “Press the ‘any’ key”. No mouse is visible.

Main Menu

The Potato lies menacingly in the foreground, with its fuse animated, while the characters remain in the back, united with their common fear of the impeding explosion. The title remains at the top, and the menu offers four choices: Create Game, Join Game, Read Manual or Quit Game. A less lively yet more anticipating tune replaces the Title music. This music stays with the players throughout the other menus.

1. Create Game sends the player to the Connexion Pop-Up with server privileges.

2. Join Game sends the player to the Connexion Pop-Up with client conditions.

3. Read Manual sends the player to the Manual screens.

4. Quit Game terminates the program and returns user to operating system.

Connexion Pop-up

On top of the Main Menu, a dialog box appears. For the server, the first line states the IP address (which can’t be modified). For the client, the first line asks for the server’s IP address. The second line asks either way to enter a name. The amount of characters in the name is limited to what the menu and gameplay boxes can hold. The last name entered is already present, or the default Player1. The Ok button then either creates the game (server), or tries to contact the server. The Back button returns to the Main Menu.

Lobby

The lobby is separated into three sections: the top left section is the match setup section, the bottom left section is the chat box section, the right side is the player setup section.

Match Setup Section

5. Setup: Here, the server can change the specific match options. These include game type, points (kills, deaths, suicides) or lives/life + Health Potatoes, blast radius, fuse length, arena size, object frequencies (solid/bounce/hole, many/few/none) and overtime type (On, Off). Only the server can change options, a client’s mouse over the option buttons turns into a ‘denied’ symbol. The server’s IP address is shown in this section, whereas clients see instead a message stating ‘ONLY SERVER CHANGES OPTIONS’. A button on the left of the SETUP title invites the player to go see the RESULTS if a previous match was already played. Players arrive in the Setup the first time they arrive in a lobby.

6. Results: Here, players can see their final scores, as well as the details of how many times a player has killed another versus how many times that same player has killed him, as well as the amount of suicides. In team mode, the total is the team’s total in team color rather than the individual’s in the individual’s color).

An animation below their results shows their character in a different mood, depending on his ranking (teams all share the same ranking).

• Only if one individual or team has a higher score than everyone else, he gets the 1st place animation. If two individuals or teams tie for first, they will have either the 2nd or 3rd place animation.

• Only if one individual or team has a lower score than everyone else, he gets the 4th place animation (regardless if they are actually 4 or not). If two individuals or teams tie for last, they get the 3rd place animation.

• If everyone is equal, then the 3rd place animation is used.

• With 3 players, 3rd place animation takes priority over 2nd (ex.1: 5pts gets 1st, 3pts gets 3rd, 2pts gets 4th) (ex.2: 5pts – 5pts tie get 3rd, 1 pt gets 4th)

A button invites the players to return to the SETUP of the next match (optional). If changes are made by the server, the button changes to a glowing version. Players arrive by default in the Results after a match, rather than the Setup.

7. Cumulative Results: If more than one match has been played, a “Cumulative” button is present in the results screen, inviting a player to see cumulative individual statistics. The global score is replaced by amount of wins (individual, never team), while the details of “how many times one player has killed another versus how many times that same player has killed him” sections are totals from all the matches. If a player changes colors, everyone’s cumulative scores adapt to reflect his new color (the results are the player’s, not the color’s). If a player leaves or a new player arrives, the cumulative results are reset. The server can also “reset” the cumulative results with a button present on this page.

Chat Box Section

8. The top square is where all dialog from the players as well as system messages (players entering, exiting, match starting, etc.). The default colors are white for system messages. Once a player has chosen a slot in the player setup section, his chat dialog will become that color. Players must click in the bottom dialog box or press enter to have their type-in cursor appear there to input a message. Pressing enter with text in the type-in box then sends the string to the server, who displays it at the first free line in the dialog box, or the last line if all are full, pushing up the previous lines. Players can use the arrow keys on the side of the top chat window to scroll up and see the previous lines which were hidden in such a way.

9. Typing in smilies displays static images of their character (over where their score would be in-game) displaying the emotion for two seconds. :) or :D display an overly proud smile, :( or :’( display a teary-eyed desperate, :S or :X display an oops wide-eyed and :P sticks their tongue out. The emotes are only recognized if at the end of a string.

Player Setup section

10. Four buttons are assigned colors, red, blue, green and yellow. An entering player is automatically assigned the first free color, but can switch by clicking on another free color. So a player will always have his name displayed, and always have a color. A button used by a player is displayed locked to other players with the player’s name on it. On the right of a selected button, a player can choose a team by clicking on the appropriate colored circle. This option only appears to the clients once the server has chosen his team (activated teams). When teams are activated, the clients are set by default to white. If every player is in the same team when the match starts, the match will be without teams. The team is displayed under the player’s name on the button. Team matches mean all members of the same team will share the same score/health/lives, the initial amount determined by the match setup.

11. To the server, the unused color slots will have ADD BOT buttons appear on them. Clicking the button will fill the slot with BOT1, BOT2, BOT3, or BOT4. The server can then select the team normally. Clicking on the bot name again removes the bot. If a player attempting to connect a full match using bots, the player will have priority and take up the first bot color. This is to allow a group to start playing with filled slots yet allowing a player to join later on. If empty slots are available, incoming players will fill these before overtaking the bot slots.

12. The LEAVE button disconnects from the server, and returns to the Main Menu, or in case of the server leaving, disconnects as well all the clients who also return to the Main Menu.

13. States for the "Ready" button/section are defined as follow:

Enter state "Waiting"

State "Waiting" : At least 2 players

Button is "Players not ready"

o Players can switch colors/teams...

o Settings can be changed

- Players or bots are removed so only 1 player is left (server)

-> Enter state "Waiting"

- All players are ready (bots are always ready)

-> Enter state "Ready"

- Server presses the "Players not ready" button

-> Enter state "Lauching"

State "Ready" : Every player is ready

Button is "Launch match"

o Players can switch colors/teams...

o Settings cannot be changed

- A new player connects to the game

-> Enter state "Waiting"

- Server presses the "Launch match" button

-> Enter state "Lauching"

State "Lauching" : Game is being launched

Button is "Launching match..."

o Clients and server are brought to the setup screen

o Players cannot switch colors/teams...

o Settings cannot be changed

o Chat messages "Starting in 5... 4... 3... 2... 1..."

o Lost connections will be handled IN GAME

----- Server Side ---------------------------->

Enter state "Launching"

State "Lauching" : Game is being launched

Button is "Launching match..."

o Chat messages "Starting in 5... 4... 3... 2... 1..."

- *Sent by the server*

----- Client Side ---------------------------->

Manual

Slab of stone with text directly on it, and page annotation at the bottom middle ( 1 / 7 ) with an arrow button on either side for moving back and forth between the pages. A BACK button is also placed at the top right, opposite the title.

History

At the turn of the last century, major sport leagues were considered obsolete with the arrival of a new phenomenon in professional athletics, in the form of a confrontational game of Hot Potato. Challengers from across the globe compete for the honor of representing their homes and families in the fastest, most energetic of face-offs. Up to four players enter the arena at a time, risking injury and humiliation, hoping to come through in a blaze of glory.

Basics

The object of the game is to detonate the Potato within opponents’ vicinity, without harming one’s self. A Potato explodes either by impacting on a player or solid object, or after the short fuse has been spent. Players must acquire the Potato either by picking it up or catching it. Acquiring the Potato resets the fuse for another few seconds. Once a Potato explodes, another one is randomly sent into play.

Movement Controls

The character always faces towards the mouse cursor, which is considered where he is aiming. By holding down or releasing the Right Mouse Button (RMB), a character switches between relative and absolute movement. In relative movement the character moves either towards, away or circles around in relation to the cursor. In absolute movement, by holding down the Right Mouse Button (RMB), the W-A-S-D or Directional Keys will move the character towards the edges of the screen, regardless of where he is facing.

Potato Controls

The mouse controls the Potato interaction. Facing towards the Potato will catch it if thrown towards the character, or pick it up if walking towards it. The Left Mouse Button (LMB) throws the Potato. Time the release the LMB with the climax of the charge-up for the strongest throw. Holding down on the LMB before acquiring the Potato allows the character to bounce what would normally be caught. Timing this deflect to just before the potato connects bounces with additional velocity. Carefully judging the leftover velocity and rebound angle will result in a formidable counterattack.

Arena

The spaces in the arena are either filled by a plane, a solid object, a bounce object, or a hole object. Both the characters and Potato can move freely over flat areas. Solid objects block movement, and Potatoes explode on impact with them. Bounce objects block movement, while deflecting a Potato thrown their way. Hole objects block movement for the character, but the Potato can be thrown over them.

Match Types

An official Hot Potato tournament match can be played in three different categories. A Frag match attributes points for exploding opponents, while deducting points for getting exploded. A Survival match requires a player to outlast the others by exploding their opponents until none of their Lives are left. A Stamina match resembles a Survival match, except proximity to an explosion determines the amount of damage to Life (100 to 0 damage). Every type can also be played in teams, where score, Lives or Health is shared amongst the team members. Setup options allow players to further customize each type of match to their liking.

Credits

Design: Thiéry Adam & Jean-François Pérusse

Code: Jean-François Pérusse

Visuals: Thiéry Adam

Audio: Bertrand Bry-Marfaing

© 2004 Reality Interactive

Menu Mouse

Throughout the menus (except the logo and title screens), the mouse is as follows:

• Neutral: relaxed gloved character hand

• Over: (Mouse hovering over a clickable button) pointing hand

• Down: (Mouse hovering over a clickable button with LMB held) Pointing hand presses with finger.

• NoClick: (Mouse hovering over a non-clickable button) No access sign

• Wait: (loading something, no player action possible) animated stopwatch (clock hand moves)

Gameplay

Screen Layout

The gameplay area is 600 x 600 on the left side of the screen. The 200 pixels left on the right side are used as a scoreboard. The scoreboard has four sections with each a player’s name at the top. Their current score/life/lives are written, below the name, in the player’s color as well. In the case of team matches, the player’s current score/life/lives are in the team color. The value is shared amongst the teammembers (thus the same number is repeated). Whenever a player kills without getting killed, a short animation appears over his score, briefly showing the character’s satisfaction before returning to the regular score and name. Whenever a player commits suicide, the animation instead is of him slapping his own forehead.

By pressing enter, players open the chat line which is laid out exactly like in the lobby, but without the actual frames, nor the arrows to scroll in the message history. Instead, chat messages disappear after 10 seconds, while still respecting the maximum amount of lines displayed. Smilies are still treated in the same way.

At the bottom of the scoreboard is the match clock, displaying how much time is left (in minutes and seconds). When less than 30 seconds are left, the time turns red and a system chat message (in white) states “30 seconds left…”. There will also be a countdown during the last 5 seconds, much like in the lobby: 5… 4… 3… 2… 1… . When the timer expires, if a winning player/team stands out (or Overtime Off), the message FINISHED appears. The static screen holds for at least 2 seconds before displaying the Results. If overtime is required, the message “Overtime” appears, the screen frozen for 2 seconds, then only the players tied for first are left and the action resumes (potato reset in play).

In overtime, scores are already locked in and its only a question of distinguishing a single player/team for first position (thus why the non-first tied players are taken away). Any player caught in an overtime explosion (weither by suicide or kill) disappears, until a single one is left. If an explosion would not leave anyone (because it booms all those left simultaneously), no one is taken away and overtime continues normally.

Pressing or or on the keyboard will bring up the pause menu. A pause menu pop-up allows all the players to resume the game (unpauses), disconnect (clients only: return to main menu), abort match (server only: everyone returns to lobby, no results) or quit the game (exits HPO entirely). Chatting is still supported while paused.

Arena

Measuring convention: because of the different arena sizes, absolute measures (those that don’t change with arena size) are measured in pixels (menus, layout, chat), while relative measures (those that change with the arena size) are measured in metric (objects, players, potato). As a base, 1 tile measures 1 meter by 1 meter.

The arena varies between three grid formats: 5x5, 6x6, and 7x7. An object takes up most of the space in a tile, reaching from the top to the bottom, and touching each side, while leaving the four corners barely free. This way, diagonally placed objects do not create a wall; they leave a gap to walk through. The player must fit in this gap barely, so the exact measure for a 50-centimeter radius object, the player must be just under 41.421356237095 centimeters in diameter (distance between two tile centers - two object radiuses, or 141.42 - 100). For convenience, the player's graphical size and collision radius are then considered to be 40% of an object's, so 20 centimeters in radius.

[pic]

Arenas are generated randomly, with an algorithm preventing objects from creating a closed space. The players start randomly across the grid, each in a separate empty tile. Afterwards, the objects are placed, without ever having more than two touch each other (except diagonally or with walls). This is to prevent having the arena seperated into "rooms", emphasizing obstacles and covers, not running away and getting cornered. When the Potato comes back into play, it is also sent into a random empty tile.

Object proportions: Many = 2, Few = 1, None = 0. Grass is always 6. Thus, with the maximum objects, we have proportions of 6 grass to 2 solid to 2 bounce to 2 hole (50% of tiles are occupied). So in this example, on a 7 x 7 grid (49 tiles), we would have a maximum of 8 of each object (49*(2/(6+2+2+2))). In the case where there are less object types, there are more instances of the ones chosen. Ex.: Many solids, no bounces and no holes = 2/(6+2+0+0), so about 1/4th of the tiles would be solids (rather than 1/6th if all 3 object types were at 'many').

Bounce objects have 3 animation levels of recoil, depending on how hard the Potato impacts with it. Aiming directly at the center of the Bounce object sends the Potato right back. The more to the edge (glancing) the bounce object is hit, the closer to a 180 degree bounce. Solid objects explode the potato on impact (prime targets in a match, since opponents can catch a potato thrown at them). Characters cannot walk over a hole object, but a thrown potato can fly over it. If a potato bounces or rolls into the hole collision, its entire collision contained in the hole’s, it is lost, and a new one will be generated.

Characters

There are 8 directions a character can move in absolute or relative movement, by pressing one or two directional keys. The feet have 8 different animations for each of the directions. The distance covered in a direction is always constant (no faster moving in diagonal, just think of a circle with a radius of 1 as the multiplier). A character’s movement speed is 50 centimeters/second.

The upper body is animated separately, depending on player action. The relaxed state has the character’s hands ready to catch. The deflect state has the hands flattened. The charge-up pulls the arm back until the maximum strength, then comes back a bit if the LMB is still being held. The charge-up animation is interrupted when the LMB is released. The throw animation goes further with more charge-up, but lasts the same amount of milliseconds. The catch animation’s recoil works in the same way, going further when catching a higher velocity Potato, but lasting the same time. The deflect itself has no impact animation but sends back the potato in the same way a tree does. If the impact takes place during its ‘set’ animation (going into deflect mode), 50% of the potato’s current velocity is added.

When a character is caught in an explosion (his center is within the blast radius), one of two animations happen: if he is facing mostly away, he will face completely away and play the 'hit in the back' animation. If he is facing mostly towards, he will face completely towards and play the 'hit in the face' animation. Immediately upon completion of the animation, he returns to facing the mouse by interpolation of the facing angle over 250 milliseconds.

Potato

The maximum Fuse length in seconds is determined in the Setup. When initially dropped, it is not armed to explode (to avoid a too short fuse setting to prevent players from ever approaching it, and kills with no credit). Otherwise, the fuse timer goes down whenever it is being held by a character, or it has stopped rolling on the ground (it pauses while airborne-thrown). This is to encourage a dodgeball type of playing, rather than grenade throwing. When the potato is caught, picked up from the ground, or stops rolling, half the time to the maximum fuse length is recuperated (FuseLeft = CurrentFuse + (MaxFuse-CurrentFuse)/2). This is to encourage the gameplay to flow, so that people won’t want to wait until the fuse is almost spent to throw, and remove fear of picking up the almost exploded potato from the ground.

The Potato starts flashing 3 seconds before it explodes, first alternating between black and yellow, then yellow and red, then just stays on red. Whenever the Potato is caught or picked up, the ‘real’ Potato turns invisible, replaced instead by the one integrated to the character. The angle to catch a Potato is 90degrees (45 degrees on each side of the character’s orientation angle). Outside of that, contact will detonate the Potato. Anyone inside the radius is fragged or loses a life. In Stamina, damage is calculated according to distance from blast center.

Holding down the LMB when in possession of the potato charges a throw. Releasing then throws the potato. Up to 500 milliseconds, the charged thrown strength increases exponentially. From 500 milliseconds to 750 milliseconds, the charged thrown strength decreases a bit (to 75%). Past 750 milliseconds, it levels out at an even strength. This is to encourage timing and fast pace, rather than over-holding to ensure getting maximum strength, while not overly penalizing new players.

[pic]

(X =Time held, Y=Charged Thrown Strength)

The maximum strength (100%) is just enough to cover the distance from one corner to the other (landing at the opposite corner for the first bounce) in the largest arena (7 x 7), so 100% strength means 10 meters before the first bounce. 0% throw strength starts at 1 meter distance before first bounce, to avoid too easy throw-pickup-throw-pickup timer extension. The distance thrown stays proportional to the characters (which stay proportional to the object size), so smaller arenas are more bounce-prone.

The maximum speed of the potato decreases exponentially from the throw, but must remain faster than the players up until the first bounce.

The explosion sizes are Tiny, Medium and Large. Small is a radius of 50 centimeters, Medium is 75 centimeters and Large is 1 meter. A player is considered fragged if his center is within the blast radius.

Life/Health Potato

In survival mode, if the option is on, Life Potatoes periodically fall randomly in the field in the same way the Bomb Potato does. The difference is that when they are picked up (walked over), they add one life to the player/team that does so. The amount of lives cannot go above the initial maximum set in setup, but can still be picked up by a maxed player to avoid the others getting to it. An emote of a stuffed happy character shows which player has picked up the Life Potato.

The Health Potato is the same principle, except it gives back 75 health to the player/team that picks it up.

If the quantity for either is set on Many, potatoes will drop randomly every 15 to 30 seconds. If the quantity is set on Few, the potatoes will drop randomly every 30 to 60 seconds. At none, they will never drop.

Training Dummy

If no other players are in the lobby, the server's Ready button reads . This starts a game with a training dummy. The first available slot (red, if not red, blue) is filled with an AI named DUMMY. Scoring and game rules remain the same, except: whenever an automatic emote would appear, the emote_dummy will appear instead (a scarecrow/dummy looking version of a player, without emotions). In the match results, instead of a position's animation, the Dummy has his menu_lobby_dummy image displayed (no emotion, and no variation depending on result). The Dummy doesn

In-Game Dummy

The Dummy always faces the player (not the potato), his main purpose being to teach indirect attacks.

State 1: Potato immobile on ground

The dummy moves directly towards it, without considering any obstacles.

State 2: Has Potato

Dummy immediately charges to the maximum and throws directly towards the player, without considering obstacles.

State 3: Does not have potato and potato is not immobile on ground

Dummy moves about randomly, without considering obstacles or the player.

................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download