Dreamphone: Difference between revisions
m (Removed first person POV) |
|||
(78 intermediate revisions by one other user not shown) | |||
Line 7: | Line 7: | ||
==Gameplay== | ==Gameplay== | ||
===Official Manual=== | |||
You can view the official Dream Phone instruction manual here: [[File:Dream Phone Manual PDF.pdf|Dream Phone Manual PDF.pdf]] | |||
Dream Phone is a conceptual cousin of the classic board game Clue. In Clue, you are trying to discover a murderer by deductive reasoning. Unlike Clue, Dream Phone doesn't have any player pieces or a game board per-se, the entirety of the game is based on the interactions of the player, the game cards, and the Dream Phone device itself, with occasional PvP interactions between players. | Dream Phone is a conceptual cousin of the classic board game Clue. In Clue, you are trying to discover a murderer by deductive reasoning. Unlike Clue, Dream Phone doesn't have any player pieces or a game board per-se, the entirety of the game is based on the interactions of the player, the game cards, and the Dream Phone device itself, with occasional PvP interactions between players. | ||
===Game Board, Cards and | ===Game Board, Cards and Clue Card=== | ||
{| class="wikitable" | |||
|- | |||
! Dream Phone Game Board | |||
|- style="background-color:#ffffff;" | |||
| [[File:Dream Phone Game Board.png|Dream Phone Game Board|500px|center]] | |||
The game board is a codex for reference of the Boys' names, location, clothing, sport and food information. | |||
|} | |||
{| class="wikitable" | |||
|- | |||
! colspan="4" style="text-align:center;" | Dream Phone Game Cards | |||
|- | |||
| | |||
[[File:Dream-phone-cards-James.png|200px|thumb|Dream Phone Cards: James]] | |||
| | |||
[[File:Dream-phone-cards-Phil.png|200px|thumb|Dream Phone Cards: Phil]] | |||
| | |||
[[File:Dream-phone-cards-Bruce.png|200px|thumb|Dream Phone Cards: Bruce]] | |||
| | |||
[[File:Dream-phone-cards-Tyler.png|200px|thumb|Dream Phone Cards: Tyler]] | |||
|- | |||
| | |||
[[File:Dream-phone-cards-Jamal.png|200px|thumb|Dream Phone Cards: Jamal]] | |||
| | |||
[[File:Dream-phone-cards-Gary.png|200px|thumb|Dream Phone Cards: Gary]] | |||
| | |||
[[File:Dream-phone-cards-Dan.png|200px|thumb|Dream Phone Cards: Dan]] | |||
| | |||
[[File:Dream-phone-cards-Spencer.png|200px|thumb|Dream Phone Cards: Spencer]] | |||
|- | |||
| | |||
[[File:Dream-phone-cards-Mark.png|200px|thumb|Dream Phone Cards: Mark]] | |||
| | |||
[[File:Dream-phone-cards-Jason.png|200px|thumb|Dream Phone Cards: Jason]] | |||
| | |||
[[File:Dream-phone-cards-Steve.png|200px|thumb|Dream Phone Cards: Steve]] | |||
| | |||
[[File:Dream-phone-cards-John.png|200px|thumb|Dream Phone Cards: John]] | |||
|- | |||
| | |||
[[File:Dream-phone-cards-Paul.png|200px|thumb|Dream Phone Cards: Paul]] | |||
| | |||
[[File:Dream-phone-cards-Tony.png|200px|thumb|Dream Phone Cards: Tony]] | |||
| | |||
[[File:Dream-phone-cards-Wayne.png|200px|thumb|Dream Phone Cards: Wayne]] | |||
| | |||
[[File:Dream-phone-cards-Mike.png|200px|thumb|Dream Phone Cards: Mike]] | |||
|- | |||
| | |||
[[File:Dream-phone-cards-Scott.png|200px|thumb|Dream Phone Cards: Scott]] | |||
| | |||
[[File:Dream-phone-cards-Bob.png|200px|thumb|Dream Phone Cards: Bob]] | |||
| | |||
[[File:Dream-phone-cards-Carlos.png|200px|thumb|Dream Phone Cards: Carlos]] | |||
| | |||
[[File:Dream-phone-cards-Matt.png|200px|thumb|Dream Phone Cards: Matt]] | |||
|- | |||
| | |||
[[File:Dream-phone-cards-Dave.png|200px|thumb|Dream Phone Cards: Dave]] | |||
| | |||
[[File:Dream-phone-cards-George.png|200px|thumb|Dream Phone Cards: George]] | |||
| | |||
[[File:Dream-phone-cards-Dale.png|200px|thumb|Dream Phone Cards: Dale]] | |||
| | |||
[[File:Dream-phone-cards- Alan.png|200px|thumb|Dream Phone Cards: Alan]] | |||
|- | |||
| | |||
[[File:Dream-phone-cards-Share-A-Secret.png|200px|thumb|Dream Phone Cards: Share a Secret]] | |||
| | |||
[[File:Dream-phone-cards-Speakerphone.png|200px|thumb|Dream Phone Cards: Speakerphone]] | |||
| | |||
[[File:Dream-phone-cards-Hang-Up.png|200px|thumb|Dream Phone Cards: Mom Says Hang Up]] | |||
| | |||
[[File:Dream-phone-cards-Card-Back.png|200px|thumb|Dream Phone Cards: Back of Cards]] | |||
|} | |||
{| class="wikitable" | |||
|- | |||
! Dream Phone Clue Card | |||
|- | |||
| | |||
[[File:Dream Phone Clue Card.png|500px|center]] | |||
To keep track of your clues, the game includes a pad of paper that you can scratch off the locations, clothing, etc. that doesn't fit your crush. | |||
|} | |||
===Setup=== | ===Setup=== | ||
To setup the game, perform the following sequence: | |||
'''Sort the Deck:''' Separate out the 12 special cards from the deck. The special cards are "Speakerphone", "Share a Secret" and "Mom Says Hang Up". | '''Sort the Deck:''' Separate out the 12 special cards from the deck. The special cards are "Speakerphone", "Share a Secret" and "Mom Says Hang Up". | ||
Line 25: | Line 115: | ||
'''Draw a Card:''' The player draws from the stack of "Boy" cards. | '''Draw a Card:''' The player draws from the stack of "Boy" cards. | ||
'''Dial a Boy:''' If a Boy Card is drawn, the player uses the Dream Phone to dial the phone number for the boy that is printed on the card. | |||
The response from the call can be useful (e.g "He's not at the Mall!"), or can be not useful (e.g "Ha Ha! I'm not telling"). The player then should scratch off any information that they have received from their notepad. | '''Dial a Boy:''' If a Boy Card is drawn, the player uses the Dream Phone to dial the phone number for the boy that is printed on the card. The response from the call can be useful (e.g "He's not at the Mall!"), or can be not useful (e.g "Ha Ha! I'm not telling"). The player then should scratch off any information that they have received from their notepad. The Dream Phone responses are broken into loud and quiet portions. The category of the clue is announced ("I know where he hangs out!") over the loudspeaker, but the clue itself ("He's not at the mall!") is only revealed to the current player over the quiet earpiece. | ||
The Dream Phone responses are broken into loud and quiet portions. The category of the clue is announced ("I know where he hangs out!") over the loudspeaker, but the clue itself ("He's not at the mall!") is only revealed to the current player over the quiet earpiece. | |||
'''Next Player:''' Once a Boy card is dialed, the card goes into the discard pile, and the current player's turn is over. the action goes to the next player in sequence. | '''Next Player:''' Once a Boy card is dialed, the card goes into the discard pile, and the current player's turn is over. the action goes to the next player in sequence. | ||
Line 33: | Line 123: | ||
At any time before the current player dials, other players may use one of their special cards. | At any time before the current player dials, other players may use one of their special cards. | ||
Speakerphone: If a speakerphone card is played, the current player must push the "Speakerphone" button on the Dream Phone before dialing their current boy. This will play both potions of the clue over the speakerphone, allowing all players to benefit from knowing the clue. Once the Speakerphone card is played, it is taken out of the game. | '''Speakerphone:''' If a speakerphone card is played, the current player must push the "Speakerphone" button on the Dream Phone before dialing their current boy. This will play both potions of the clue over the speakerphone, allowing all players to benefit from knowing the clue. Once the Speakerphone card is played, it is taken out of the game. | ||
'''Share a Secret:''' If the "Share a Secret" card is played, the current player proceeds as normal but must reveal the clue that was exposed during the phone call to the player who played the card. They can do this by sticking their ears near the earpiece, or by using the "redial" button to repeat the last clue. The "Share a Secret" card is not discarded when played, but goes into the possession of the player it was used on. | |||
'''Mom Says Hang Up:''' When a "Mom Says Hang Up" card is played, the turn is lost for the current player and they are not able to dial a Boy and must pass the phone to the next player. Once played, the "Mom Says Hang Up" card is taken out of the game. | |||
===Solve=== | |||
When a player thinks they have enough information to guess which Boy their crush is, when it is their turn, they can press the "Solve" button on the Dream Phone. They then need to dial the number of the boy into the Dream Phone device. A victory message will play if the answer is correct. If not, a "try again" message will play and the gameplay continues. | |||
=Open Dream Dialer= | |||
[https://github.com/Supertimtendo/DreamPhone-Sim '''Dreamphone-Sim on Github''']: https://github.com/Supertimtendo/DreamPhone-Sim | |||
Open Dream Dialer is a project started by me (Old Kid) to recreate Electronic Dream Phone in a computer software simulation. The project is divided into three goals: | |||
1. Dream Phone Simulator: Recreate as accurately as possible the experience of playing Dream Phone via software recreation. This includes reverse engineering gameplay mechanics, scanning and archiving game board and card assets, and 'Dream Phone Device' dialing behavior and sound effects. | |||
2. Open Dream Dialer: Once Dream Phone Simulator is complete, the goal will be to remove any copyrighted assets from the program and open source release as "Open Dream Dialer". This would include instructions, tools and/or assets for users to create custom game board, card and clue configurations. | |||
3. Open Dream Dialer Device: With the ODD code complete, a "Device" can be made to emulate the behavior of the Dream Phone handset device. This currently is specified as using a Raspberry Pi Pico to run the main game code and audio playback, and I2S audio drivers playing MP3 files in response to the dialed inputs. This would serve as a drop-in alternative to the original Dream Phone handset, as well as opening the opportunity for Open Dream Phone custom user assets to be uploaded to the ODD-Device for custom audio reflecting new clue categories, boy names, responses, etc. | |||
==Game Logic Notes for DPS / ODD== | |||
[[File:DPS Program Logic Block Diagram.png|thumb|none|1600px]] | |||
===New Game Button Pushed:=== | |||
The game begins when the player pushes "new game" on the device. | |||
===Build Game Board (Boy Attribute Table):=== | |||
For the initialization of a new game to occur, the DPS must create the Boy Attribute Table. This is a static data pool showing which Hang-Out, Sport, Food or Clothing relates to which Boy. Using Dream Phone's Clue Card and Game Board as reference, a table can be built to consolidate all of these relationships. Note that the information is sorted so that the attributes are clustered together.This will be helpful later in the code.:(note to fix table to include boy phone numbers). | |||
{| class="wikitable" | |||
|- | |||
! colspan="7" | Boy Attribute Table | |||
|- | |||
| | |||
| Person | |||
| Phone Number | |||
| Location | |||
| Sport | |||
| Food | |||
| Clothing | |||
|- | |||
| 0 | |||
| Dave | |||
| 5551111 | |||
| Crosstown Mall | |||
| | |||
| Cookies | |||
| Blue Jeans | |||
|- | |||
| 1 | |||
| George | |||
| 5551233 | |||
| Crosstown Mall | |||
| | |||
| Ice Cream | |||
| Tie | |||
|- | |||
| 2 | |||
| Dale | |||
| 5554566 | |||
| Crosstown Mall | |||
| | |||
| Ice Cream | |||
| Jacket | |||
|- | |||
| 3 | |||
| Alan | |||
| 5557899 | |||
| Crosstown Mall | |||
| | |||
| Cookies | |||
| Tie | |||
|- | |||
| 4 | |||
| James | |||
| 5552588 | |||
| E.A.T.S. Snack Shop | |||
| | |||
| Hot Dogs | |||
| Jacket | |||
|- | |||
| 5 | |||
| Phil | |||
| 5553333 | |||
| E.A.T.S. Snack Shop | |||
| | |||
| Pizza | |||
| Glasses | |||
|- | |||
| 6 | |||
| Bruce | |||
| 5553699 | |||
| E.A.T.S. Snack Shop | |||
| | |||
| Pizza | |||
| Tie | |||
|- | |||
| 7 | |||
| Tyler | |||
| 5551477 | |||
| E.A.T.S. Snack Shop | |||
| | |||
| Hot Dogs | |||
| Blue Jeans | |||
|- | |||
| 8 | |||
| Jamal | |||
| 5559877 | |||
| Reel Movies | |||
| | |||
| Candy | |||
| Tie | |||
|- | |||
| 9 | |||
| Gary | |||
| 5553211 | |||
| Reel Movies | |||
| | |||
| Popcorn | |||
| Blue Jeans | |||
|- | |||
| 10 | |||
| Dan | |||
| 5557777 | |||
| Reel Movies | |||
| | |||
| Candy | |||
| Blue Jeans | |||
|- | |||
| 11 | |||
| Spencer | |||
| 5556544 | |||
| Reel Movies | |||
| | |||
| Popcorn | |||
| Jacket | |||
|- | |||
| 12 | |||
| Mark | |||
| 5558522 | |||
| Woodland Park | |||
| Baseball | |||
| | |||
| Hat | |||
|- | |||
| 13 | |||
| Jason | |||
| 5557411 | |||
| Woodland Park | |||
| Baseball | |||
| | |||
| Glasses | |||
|- | |||
| 14 | |||
| Steve | |||
| 5559999 | |||
| Woodland Park | |||
| Skateboarding | |||
| | |||
| Jacket | |||
|- | |||
| 15 | |||
| John | |||
| 5559633 | |||
| Woodland Park | |||
| Skateboarding | |||
| | |||
| Anything Yellow | |||
|- | |||
| 16 | |||
| Paul | |||
| 5555515 | |||
| High Tide Beach | |||
| Volleyball | |||
| | |||
| Anything Yellow | |||
|- | |||
| 17 | |||
| Tony | |||
| 5552442 | |||
| High Tide Beach | |||
| Volleyball | |||
| | |||
| Hat | |||
|- | |||
| 18 | |||
| Wayne | |||
| 5553535 | |||
| High Tide Beach | |||
| Surfing | |||
| | |||
| Anything Yellow | |||
|- | |||
| 19 | |||
| Mike | |||
| 5552226 | |||
| High Tide Beach | |||
| Surfing | |||
| | |||
| Hat | |||
|- | |||
| 20 | |||
| Scott | |||
| 5555599 | |||
| Jim's Gym | |||
| Basketball | |||
| | |||
| Anything Yellow | |||
|- | |||
| 21 | |||
| Bob | |||
| 5554884 | |||
| Jim's Gym | |||
| Basketball | |||
| | |||
| Glasses | |||
|- | |||
| 22 | |||
| Carlos | |||
| 5556668 | |||
| Jim's Gym | |||
| Tennis | |||
| | |||
| Hat | |||
|- | |||
| 23 | |||
| Matt | |||
| 5557557 | |||
| Jim's Gym | |||
| Tennis | |||
| | |||
| Glasses | |||
|} | |||
The code so far to build the BAT works like this: | |||
boy_names and boy_nums are variables created to associate the proper noun name and their phone number based on a list. So that boy_names[0] and boy_nums[0] would link 'dave' to his phone number '5551111'. Said another way, this uses the list entry number as the common link between the data sets. I’m not sure if it is the best programming approach, but this is the fundamental association used to make the BAT work. | |||
<pre> | |||
boy_names = ['dave', 'george','dale','alan','james','phil','bruce','tyler','jamal','gary','dan','spencer','mark','jason','steve', 'john', 'paul', 'tony', 'wayne', 'mike', 'scott', 'bob', 'carlos', 'matt'] | |||
boy_nums = ['5551111', '5551233', '5554566', '5557899', '5552588', '5553333','5553699', '5551477', '5559877', '5553211', '5557777', '5556544', '5558522', '5557411', '5559999', '5559633', '5555515', '5552442', '5553535', '5552226', '5555599','5554884','5556668','5557557'] | |||
</pre> | |||
The variable all_clues lists clues from the BAT as they occur from column to column, left to right. Note that these are a list of strings (might be redundant? Used for language stuff) | |||
<pre> | |||
all_clues = 'crosstown_mall', 'snack_shop', 'reel_movies', 'woodland_park', 'high_tide_beach', 'jims_gym', 'baseball', 'skateboarding', 'volleyball', 'surfing', 'basketball', 'tennis', 'ice_cream', 'cookies', 'hot_dogs', 'pizza', 'candy', 'popcorn', 'hat', 'tie', 'blue_jeans', 'jacket', 'glasses', 'anything_yellow'] | |||
</pre> | |||
Variables are created for each clue, and a list containing the number reference of the boys the clue pertains to is assigned to the variable. | |||
<pre> | |||
crosstown_mall = [0,1,2,3] | |||
snack_shop = [4,5,6,7] | |||
reel_movies = [8,9,10,11] | |||
woodland_park = [12,13,14,15] | |||
high_tide_beach = [16,17,18,19] | |||
jims_gym = [20,21,22,23] | |||
baseball = [12,13] | |||
skateboarding = [14,15] | |||
volleyball = [16,17] | |||
surfing = [18,19] | |||
basketball = [20,21] | |||
tennis = [22,23] | |||
ice_cream = [1,2] | |||
cookies = [0,3] | |||
hot_dogs = [4,7] | |||
pizza = [5,6] | |||
candy = [8,10] | |||
popcorn = [9,11] | |||
hat = [12,17,19,22] | |||
tie = [1,3,6,8] | |||
blue_jeans = [0,7,9,10] | |||
jacket = [2,4,11,14] | |||
glasses = [5,13,21,23] | |||
anything_yellow = [15,16,18,20] | |||
</pre> | |||
Printing the strings from the list entries of the boy_names variable, by getting the list number from the snack_shop variable. This lets us say that snack_shop “contains” 'james', 'phil', 'bruce and 'tyler' when cross referenced correctly with the boy_names list. | |||
In practice, a bit of code like this would print all the boys found in the Snack Shop: | |||
<pre> | |||
x = 0 | |||
for i in snack_shop: | |||
print (boy_names[x]) | |||
x = x + 1 | |||
</pre> | |||
====Clue Logic==== | |||
{| class="wikitable" | |||
|- | |||
! colspan="5" style="text-align:center; font-weight:bold;" | Clue Possibility Matrix | |||
|- style="font-weight:bold; vertical-align:bottom;" | |||
| style="font-weight:normal;" | | |||
| A | |||
| B | |||
| C | |||
| D | |||
|- style="vertical-align:bottom;" | |||
| style="text-align:right; font-weight:bold;" | 0 | |||
| - | |||
| empty | |||
| empty | |||
| - | |||
|- style="vertical-align:bottom;" | |||
| style="text-align:right; font-weight:bold;" | 1 | |||
| Crosstown Mall | |||
| Baseball | |||
| Cookies | |||
| Blue Jeans | |||
|- style="vertical-align:bottom;" | |||
| style="text-align:right; font-weight:bold;" | 2 | |||
| E.A.T.S. Snack Shop | |||
| Skateboarding | |||
| Ice Cream | |||
| Tie | |||
|- style="vertical-align:bottom;" | |||
| style="text-align:right; font-weight:bold;" | 3 | |||
| Reel Movies | |||
| Volleyball | |||
| Hot Dogs | |||
| Jacket | |||
|- style="vertical-align:bottom;" | |||
| style="text-align:right; font-weight:bold;" | 4 | |||
| Woodland Park | |||
| Surfing | |||
| Pizza | |||
| Glasses | |||
|- style="vertical-align:bottom;" | |||
| style="text-align:right; font-weight:bold;" | 5 | |||
| High Tide Beach | |||
| Basketball | |||
| Candy | |||
| Hat | |||
|- style="vertical-align:bottom;" | |||
| style="text-align:right; font-weight:bold;" | 6 | |||
| Jim's Gym | |||
| Tennis | |||
| Popcorn | |||
| Anything Yellow | |||
|} | |||
Dream Phone works by removing choices - "he doesn't like this" or "he isn't there". Each boy consists of a table of features that is hard coded. The game randomly selects a boy, and then randomly selects deductions from the table for every other boy on the table to reveal to you. For a game to be set up,a selection from one of the 24 boys is assigned as "the crush", and the remaining boys are assigned clues. | |||
=== | For Example: | ||
RNG Selects Dave as "the crush". Dave's Location is '''Crosstown Mall''', or A1 on the Clue Possibility Matrix. Thus, he '''is not''' A2, A3, A4, A5, or A6. These values would be added to the 'negative clue' table. | |||
Dave likes cookies, or C1, thus, he is not C2, C3, C4, C5, or C6. Add values to the negative clue table. | |||
Sports and Foods values are mutually exclusive - such that if B = 0, than C = 1-6. If C=0, than B=1-6. Sum of B+C cannot equal greater than 6. | |||
Thus, if a C value above zero is found, all of B1-B6 is added to clue table. | |||
Dave(a) wears Blue Jeans, or D1. Thus, D2, D3, D4, D5 and D6 are added to clue table. | |||
{| class="wikitable" | |||
|- | |||
! colspan="4" style="text-align:center; font-weight:bold;" | Example Game Clue Distribution<br />(Dave's Clue Table -Dave is A1, so Every Other Boy is represented (X1-X24)) | |||
|- | |||
| | |||
| style="vertical-align:bottom;" | | |||
| style="vertical-align:bottom;" | | |||
| style="vertical-align:bottom;" | | |||
|- style="vertical-align:bottom;" | |||
| X1 | |||
| style="font-weight:bold;" | Is not at - | |||
| E.A.T.S. Snack Shop | |||
| A2 | |||
|- style="vertical-align:bottom;" | |||
| X2 | |||
| style="font-weight:bold;" | Is not at - | |||
| Reel Movies | |||
| A3 | |||
|- style="vertical-align:bottom;" | |||
| X3 | |||
| style="font-weight:bold;" | Is not at - | |||
| Woodland Park | |||
| A4 | |||
|- style="vertical-align:bottom;" | |||
| X4 | |||
| style="font-weight:bold;" | Is not at - | |||
| High Tide Beach | |||
| A5 | |||
|- style="vertical-align:bottom;" | |||
| X5 | |||
| style="font-weight:bold;" | Is not at - | |||
| Jim's Gym | |||
| A6 | |||
|- style="vertical-align:bottom;" | |||
| X6 | |||
| style="font-weight:bold;" | Does not play - | |||
| Baseball | |||
| B1 | |||
|- style="vertical-align:bottom;" | |||
| X7 | |||
| style="font-weight:bold;" | Does not play - | |||
| Skateboarding | |||
| B2 | |||
|- style="vertical-align:bottom;" | |||
| X8 | |||
| style="font-weight:bold;" | Does not play - | |||
| Volleyball | |||
| B3 | |||
|- style="vertical-align:bottom;" | |||
| X9 | |||
| style="font-weight:bold;" | Does not play - | |||
| Surfing | |||
| B4 | |||
|- style="vertical-align:bottom;" | |||
| X10 | |||
| style="font-weight:bold;" | Does not play - | |||
| Basketball | |||
| B5 | |||
|- style="vertical-align:bottom;" | |||
| X11 | |||
| style="font-weight:bold;" | Does not play - | |||
| Tennis | |||
| B6 | |||
|- style="vertical-align:bottom;" | |||
| X12 | |||
| style="font-weight:bold;" | Does not Eat - | |||
| Ice Cream | |||
| C2 | |||
|- style="vertical-align:bottom;" | |||
| X13 | |||
| style="font-weight:bold;" | Does not Eat - | |||
| Hot Dogs | |||
| C3 | |||
|- style="vertical-align:bottom;" | |||
| X14 | |||
| style="font-weight:bold;" | Does not Eat - | |||
| Pizza | |||
| C4 | |||
|- style="vertical-align:bottom;" | |||
| X15 | |||
| style="font-weight:bold;" | Does not Eat - | |||
| Candy | |||
| C5 | |||
|- style="vertical-align:bottom;" | |||
| X16 | |||
| style="font-weight:bold;" | Does not Eat - | |||
| Popcorn | |||
| C6 | |||
|- style="vertical-align:bottom;" | |||
| X17 | |||
| style="font-weight:bold;" | Does Not Wear - | |||
| Tie | |||
| D2 | |||
|- style="vertical-align:bottom;" | |||
| X18 | |||
| style="font-weight:bold;" | Does Not Wear - | |||
| Jacket | |||
| D3 | |||
|- style="vertical-align:bottom;" | |||
| X19 | |||
| style="font-weight:bold;" | Does Not Wear - | |||
| Glasses | |||
| D4 | |||
|- style="vertical-align:bottom;" | |||
| X20 | |||
| style="font-weight:bold;" | Does Not Wear - | |||
| Hat | |||
| D5 | |||
|- style="vertical-align:bottom;" | |||
| X21 | |||
| style="font-weight:bold;" | Does Not Wear - | |||
| Anything Yellow | |||
| D6 | |||
|- style="vertical-align:bottom;" | |||
| X22 | |||
| BLANK BOY | |||
| | |||
| | |||
|- style="vertical-align:bottom;" | |||
| X23 | |||
| BLANK BOY | |||
| | |||
| | |||
|- style="vertical-align:bottom;" | |||
| X24 | |||
| BLANK BOY | |||
| | |||
| | |||
|} | |||
The game then randomly assigns the clue X1-X23 to boys B through X in this example. "Blank Boys" Can be Assigned null hints, "I'm not telling! Ha ha!" Because no unique clue can be assigned to this Boy. The game also has modifiers to randomly put a clue on speakerphone (probably a D10 RNG roll). This happens at the end of a turn. The win condition is when a player enters the correct boy code on their turn. | |||
Another point to note is that the table of the boy's attributes is displayed on the game board so deductive reasoning can be exercised. | |||
For example, "Oh, he is not that the movies, that rules out the 4 boys that are at the movies.", Or, "Oh, he is not wearing jeans, that rules out the 4 boys that are not wearing jeans." | |||
Each clue should effectively eliminate 2-4 boys from the game. | |||
===Dream Phone Simulator Python Code=== | |||
====DPS Alpha 1.7==== | |||
Run the code here: | |||
https://www.online-python.com/HFAh9oMD7T |
Latest revision as of 03:59, 2 May 2023
Dream Phone, or "Electronic Dream Phone", was a board game by Milton Bradley, originally made in the early 90's. The goal of the game is to discover who "your crush" is out of a selection of 90's Boys. Though designed as a multiplayer game, the simple mechanics allow for solo play as well.
The selling point was the inclusion of an electronic toy phone, allowing players to dial phone numbers and "talk" to boys. When a number is dialed, a clue is revealed about one of the 24 boys featured in the game. The goal of the game is to using deductive reasoning to discover which of the boys has a crush on you before the other players.
Gameplay
Official Manual
You can view the official Dream Phone instruction manual here: File:Dream Phone Manual PDF.pdf
Dream Phone is a conceptual cousin of the classic board game Clue. In Clue, you are trying to discover a murderer by deductive reasoning. Unlike Clue, Dream Phone doesn't have any player pieces or a game board per-se, the entirety of the game is based on the interactions of the player, the game cards, and the Dream Phone device itself, with occasional PvP interactions between players.
Game Board, Cards and Clue Card
Dream Phone Game Board |
---|
The game board is a codex for reference of the Boys' names, location, clothing, sport and food information. |
Dream Phone Game Cards | |||
---|---|---|---|
Dream Phone Clue Card |
---|
To keep track of your clues, the game includes a pad of paper that you can scratch off the locations, clothing, etc. that doesn't fit your crush. |
Setup
To setup the game, perform the following sequence:
Sort the Deck: Separate out the 12 special cards from the deck. The special cards are "Speakerphone", "Share a Secret" and "Mom Says Hang Up".
Distribute Special Cards: Each player receives one of each special card ("Speakerphone", "Share a Secret" and "Mom Says Hang Up") face up in front of them. Remove any extra from play.
Shuffle The Deck: The remaining "Boy" cards are shuffled and placed face down on the game board. As cards are used, they are discarded into a discard pile. If the main stack of cards is exhausted, the discard pile is shuffled and used again as many times as required until the game ends.
Start The Game: On the Dream Phone device, the "New Game" Button is pushed, starting the game. Note that the game will turn off if no interactions are made to the device in 5 minutes.
Main Game
Players take turns performing the following sequence:
Draw a Card: The player draws from the stack of "Boy" cards.
Dial a Boy: If a Boy Card is drawn, the player uses the Dream Phone to dial the phone number for the boy that is printed on the card. The response from the call can be useful (e.g "He's not at the Mall!"), or can be not useful (e.g "Ha Ha! I'm not telling"). The player then should scratch off any information that they have received from their notepad. The Dream Phone responses are broken into loud and quiet portions. The category of the clue is announced ("I know where he hangs out!") over the loudspeaker, but the clue itself ("He's not at the mall!") is only revealed to the current player over the quiet earpiece.
Next Player: Once a Boy card is dialed, the card goes into the discard pile, and the current player's turn is over. the action goes to the next player in sequence.
Player Vs Player
At any time before the current player dials, other players may use one of their special cards.
Speakerphone: If a speakerphone card is played, the current player must push the "Speakerphone" button on the Dream Phone before dialing their current boy. This will play both potions of the clue over the speakerphone, allowing all players to benefit from knowing the clue. Once the Speakerphone card is played, it is taken out of the game.
Share a Secret: If the "Share a Secret" card is played, the current player proceeds as normal but must reveal the clue that was exposed during the phone call to the player who played the card. They can do this by sticking their ears near the earpiece, or by using the "redial" button to repeat the last clue. The "Share a Secret" card is not discarded when played, but goes into the possession of the player it was used on.
Mom Says Hang Up: When a "Mom Says Hang Up" card is played, the turn is lost for the current player and they are not able to dial a Boy and must pass the phone to the next player. Once played, the "Mom Says Hang Up" card is taken out of the game.
Solve
When a player thinks they have enough information to guess which Boy their crush is, when it is their turn, they can press the "Solve" button on the Dream Phone. They then need to dial the number of the boy into the Dream Phone device. A victory message will play if the answer is correct. If not, a "try again" message will play and the gameplay continues.
Open Dream Dialer
Dreamphone-Sim on Github: https://github.com/Supertimtendo/DreamPhone-Sim
Open Dream Dialer is a project started by me (Old Kid) to recreate Electronic Dream Phone in a computer software simulation. The project is divided into three goals:
1. Dream Phone Simulator: Recreate as accurately as possible the experience of playing Dream Phone via software recreation. This includes reverse engineering gameplay mechanics, scanning and archiving game board and card assets, and 'Dream Phone Device' dialing behavior and sound effects.
2. Open Dream Dialer: Once Dream Phone Simulator is complete, the goal will be to remove any copyrighted assets from the program and open source release as "Open Dream Dialer". This would include instructions, tools and/or assets for users to create custom game board, card and clue configurations.
3. Open Dream Dialer Device: With the ODD code complete, a "Device" can be made to emulate the behavior of the Dream Phone handset device. This currently is specified as using a Raspberry Pi Pico to run the main game code and audio playback, and I2S audio drivers playing MP3 files in response to the dialed inputs. This would serve as a drop-in alternative to the original Dream Phone handset, as well as opening the opportunity for Open Dream Phone custom user assets to be uploaded to the ODD-Device for custom audio reflecting new clue categories, boy names, responses, etc.
Game Logic Notes for DPS / ODD
New Game Button Pushed:
The game begins when the player pushes "new game" on the device.
Build Game Board (Boy Attribute Table):
For the initialization of a new game to occur, the DPS must create the Boy Attribute Table. This is a static data pool showing which Hang-Out, Sport, Food or Clothing relates to which Boy. Using Dream Phone's Clue Card and Game Board as reference, a table can be built to consolidate all of these relationships. Note that the information is sorted so that the attributes are clustered together.This will be helpful later in the code.:(note to fix table to include boy phone numbers).
Boy Attribute Table | ||||||
---|---|---|---|---|---|---|
Person | Phone Number | Location | Sport | Food | Clothing | |
0 | Dave | 5551111 | Crosstown Mall | Cookies | Blue Jeans | |
1 | George | 5551233 | Crosstown Mall | Ice Cream | Tie | |
2 | Dale | 5554566 | Crosstown Mall | Ice Cream | Jacket | |
3 | Alan | 5557899 | Crosstown Mall | Cookies | Tie | |
4 | James | 5552588 | E.A.T.S. Snack Shop | Hot Dogs | Jacket | |
5 | Phil | 5553333 | E.A.T.S. Snack Shop | Pizza | Glasses | |
6 | Bruce | 5553699 | E.A.T.S. Snack Shop | Pizza | Tie | |
7 | Tyler | 5551477 | E.A.T.S. Snack Shop | Hot Dogs | Blue Jeans | |
8 | Jamal | 5559877 | Reel Movies | Candy | Tie | |
9 | Gary | 5553211 | Reel Movies | Popcorn | Blue Jeans | |
10 | Dan | 5557777 | Reel Movies | Candy | Blue Jeans | |
11 | Spencer | 5556544 | Reel Movies | Popcorn | Jacket | |
12 | Mark | 5558522 | Woodland Park | Baseball | Hat | |
13 | Jason | 5557411 | Woodland Park | Baseball | Glasses | |
14 | Steve | 5559999 | Woodland Park | Skateboarding | Jacket | |
15 | John | 5559633 | Woodland Park | Skateboarding | Anything Yellow | |
16 | Paul | 5555515 | High Tide Beach | Volleyball | Anything Yellow | |
17 | Tony | 5552442 | High Tide Beach | Volleyball | Hat | |
18 | Wayne | 5553535 | High Tide Beach | Surfing | Anything Yellow | |
19 | Mike | 5552226 | High Tide Beach | Surfing | Hat | |
20 | Scott | 5555599 | Jim's Gym | Basketball | Anything Yellow | |
21 | Bob | 5554884 | Jim's Gym | Basketball | Glasses | |
22 | Carlos | 5556668 | Jim's Gym | Tennis | Hat | |
23 | Matt | 5557557 | Jim's Gym | Tennis | Glasses |
The code so far to build the BAT works like this:
boy_names and boy_nums are variables created to associate the proper noun name and their phone number based on a list. So that boy_names[0] and boy_nums[0] would link 'dave' to his phone number '5551111'. Said another way, this uses the list entry number as the common link between the data sets. I’m not sure if it is the best programming approach, but this is the fundamental association used to make the BAT work.
boy_names = ['dave', 'george','dale','alan','james','phil','bruce','tyler','jamal','gary','dan','spencer','mark','jason','steve', 'john', 'paul', 'tony', 'wayne', 'mike', 'scott', 'bob', 'carlos', 'matt'] boy_nums = ['5551111', '5551233', '5554566', '5557899', '5552588', '5553333','5553699', '5551477', '5559877', '5553211', '5557777', '5556544', '5558522', '5557411', '5559999', '5559633', '5555515', '5552442', '5553535', '5552226', '5555599','5554884','5556668','5557557']
The variable all_clues lists clues from the BAT as they occur from column to column, left to right. Note that these are a list of strings (might be redundant? Used for language stuff)
all_clues = 'crosstown_mall', 'snack_shop', 'reel_movies', 'woodland_park', 'high_tide_beach', 'jims_gym', 'baseball', 'skateboarding', 'volleyball', 'surfing', 'basketball', 'tennis', 'ice_cream', 'cookies', 'hot_dogs', 'pizza', 'candy', 'popcorn', 'hat', 'tie', 'blue_jeans', 'jacket', 'glasses', 'anything_yellow']
Variables are created for each clue, and a list containing the number reference of the boys the clue pertains to is assigned to the variable.
crosstown_mall = [0,1,2,3] snack_shop = [4,5,6,7] reel_movies = [8,9,10,11] woodland_park = [12,13,14,15] high_tide_beach = [16,17,18,19] jims_gym = [20,21,22,23] baseball = [12,13] skateboarding = [14,15] volleyball = [16,17] surfing = [18,19] basketball = [20,21] tennis = [22,23] ice_cream = [1,2] cookies = [0,3] hot_dogs = [4,7] pizza = [5,6] candy = [8,10] popcorn = [9,11] hat = [12,17,19,22] tie = [1,3,6,8] blue_jeans = [0,7,9,10] jacket = [2,4,11,14] glasses = [5,13,21,23] anything_yellow = [15,16,18,20]
Printing the strings from the list entries of the boy_names variable, by getting the list number from the snack_shop variable. This lets us say that snack_shop “contains” 'james', 'phil', 'bruce and 'tyler' when cross referenced correctly with the boy_names list.
In practice, a bit of code like this would print all the boys found in the Snack Shop:
x = 0 for i in snack_shop: print (boy_names[x]) x = x + 1
Clue Logic
Clue Possibility Matrix | ||||
---|---|---|---|---|
A | B | C | D | |
0 | - | empty | empty | - |
1 | Crosstown Mall | Baseball | Cookies | Blue Jeans |
2 | E.A.T.S. Snack Shop | Skateboarding | Ice Cream | Tie |
3 | Reel Movies | Volleyball | Hot Dogs | Jacket |
4 | Woodland Park | Surfing | Pizza | Glasses |
5 | High Tide Beach | Basketball | Candy | Hat |
6 | Jim's Gym | Tennis | Popcorn | Anything Yellow |
Dream Phone works by removing choices - "he doesn't like this" or "he isn't there". Each boy consists of a table of features that is hard coded. The game randomly selects a boy, and then randomly selects deductions from the table for every other boy on the table to reveal to you. For a game to be set up,a selection from one of the 24 boys is assigned as "the crush", and the remaining boys are assigned clues.
For Example: RNG Selects Dave as "the crush". Dave's Location is Crosstown Mall, or A1 on the Clue Possibility Matrix. Thus, he is not A2, A3, A4, A5, or A6. These values would be added to the 'negative clue' table. Dave likes cookies, or C1, thus, he is not C2, C3, C4, C5, or C6. Add values to the negative clue table. Sports and Foods values are mutually exclusive - such that if B = 0, than C = 1-6. If C=0, than B=1-6. Sum of B+C cannot equal greater than 6. Thus, if a C value above zero is found, all of B1-B6 is added to clue table. Dave(a) wears Blue Jeans, or D1. Thus, D2, D3, D4, D5 and D6 are added to clue table.
Example Game Clue Distribution (Dave's Clue Table -Dave is A1, so Every Other Boy is represented (X1-X24)) | |||
---|---|---|---|
X1 | Is not at - | E.A.T.S. Snack Shop | A2 |
X2 | Is not at - | Reel Movies | A3 |
X3 | Is not at - | Woodland Park | A4 |
X4 | Is not at - | High Tide Beach | A5 |
X5 | Is not at - | Jim's Gym | A6 |
X6 | Does not play - | Baseball | B1 |
X7 | Does not play - | Skateboarding | B2 |
X8 | Does not play - | Volleyball | B3 |
X9 | Does not play - | Surfing | B4 |
X10 | Does not play - | Basketball | B5 |
X11 | Does not play - | Tennis | B6 |
X12 | Does not Eat - | Ice Cream | C2 |
X13 | Does not Eat - | Hot Dogs | C3 |
X14 | Does not Eat - | Pizza | C4 |
X15 | Does not Eat - | Candy | C5 |
X16 | Does not Eat - | Popcorn | C6 |
X17 | Does Not Wear - | Tie | D2 |
X18 | Does Not Wear - | Jacket | D3 |
X19 | Does Not Wear - | Glasses | D4 |
X20 | Does Not Wear - | Hat | D5 |
X21 | Does Not Wear - | Anything Yellow | D6 |
X22 | BLANK BOY | ||
X23 | BLANK BOY | ||
X24 | BLANK BOY |
The game then randomly assigns the clue X1-X23 to boys B through X in this example. "Blank Boys" Can be Assigned null hints, "I'm not telling! Ha ha!" Because no unique clue can be assigned to this Boy. The game also has modifiers to randomly put a clue on speakerphone (probably a D10 RNG roll). This happens at the end of a turn. The win condition is when a player enters the correct boy code on their turn.
Another point to note is that the table of the boy's attributes is displayed on the game board so deductive reasoning can be exercised. For example, "Oh, he is not that the movies, that rules out the 4 boys that are at the movies.", Or, "Oh, he is not wearing jeans, that rules out the 4 boys that are not wearing jeans." Each clue should effectively eliminate 2-4 boys from the game.
Dream Phone Simulator Python Code
DPS Alpha 1.7
Run the code here: https://www.online-python.com/HFAh9oMD7T