Dreamphone: Difference between revisions

From ConsoleMods Wiki
Jump to navigation Jump to search
m (Removed first person POV)
 
(37 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.


Line 20: Line 24:
{| class="wikitable"  
{| class="wikitable"  
|-
|-
! Game Cards
! colspan="4" style="text-align:center;" | Dream Phone Game Cards
|- style="background-color:#ffffff;"
|-
| (missing images)
|
The deck consists of the Boy Cards as well as 12 special "PvP" 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]]
|}
|}


Line 68: Line 132:
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.
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==
=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:
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:


Line 77: Line 144:
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.
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 Dream Phone Simulator / Open Dream Dialer===
==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====
====Clue Logic====
Line 132: Line 459:
| Anything Yellow
| 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 A-X is assigned as "the crush", and the remaining letters are assigned deduction clues.  
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:
For Example:
RNG Selects Dave(a)
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's Location is '''Crosstown Mall''', or A1 on the Clue Possibility Matrix. Thus, he is not A2, A3, A4, A5, or A6. Add These Values to the clue table.
Dave likes cookies, or C1, thus, he is not C2, C3, C4, C5, or C6. Add values to the negative clue table.
Dave(a) likes cookies, or C1, thus, he is not C2, C3, C4, C5, or C6. Add values to the 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.
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.
Thus, if a C value above zero is found, all of B1-B6 is added to clue table.
Line 144: Line 470:
{| class="wikitable"  
{| 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 (B-X))
! 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))
|-
|-
|  
|  
Line 277: Line 603:
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."
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.
Each clue should effectively eliminate 2-4 boys from the game.
====Boy Attribute Table====
{| class="wikitable"
|-
! colspan="6" style="text-align:center; font-weight:bold;" | Boy Attribute Table
|- style="font-weight:bold; vertical-align:bottom;"
|
| Person
| Location
| Sport / Food
| Food
| Clothing
|- style="vertical-align:bottom;"
| style="text-align:right;" | 0
| Dave
| Crosstown Mall
|
| Cookies
| Blue Jeans
|- style="vertical-align:bottom;"
| style="text-align:right;" | 1
| George
| Crosstown Mall
|
| Ice Cream
| Tie
|- style="vertical-align:bottom;"
| style="text-align:right;" | 2
| Dale
| Crosstown Mall
|
| Ice Cream
| Jacket
|- style="vertical-align:bottom;"
| style="text-align:right;" | 3
| Alan
| Crosstown Mall
|
| Cookies
| Tie
|- style="vertical-align:bottom;"
| style="text-align:right;" | 4
| James
| E.A.T.S. Snack Shop
|
| Hot Dogs
| Jacket
|- style="vertical-align:bottom;"
| style="text-align:right;" | 5
| Phil
| E.A.T.S. Snack Shop
|
| Pizza
| Glasses
|- style="vertical-align:bottom;"
| style="text-align:right;" | 6
| Bruce
| E.A.T.S. Snack Shop
|
| Pizza
| Tie
|- style="vertical-align:bottom;"
| style="text-align:right;" | 7
| Tyler
| E.A.T.S. Snack Shop
|
| Hot Dogs
| Blue Jeans
|- style="vertical-align:bottom;"
| style="text-align:right;" | 8
| Jamal
| Reel Movies
|
| Candy
| Tie
|- style="vertical-align:bottom;"
| style="text-align:right;" | 9
| Gary
| Reel Movies
|
| Popcorn
| Blue Jeans
|- style="vertical-align:bottom;"
| style="text-align:right;" | 10
| Dan
| Reel Movies
|
| Candy
| Blue Jeans
|- style="vertical-align:bottom;"
| style="text-align:right;" | 11
| Spencer
| Reel Movies
|
| Popcorn
| Jacket
|- style="vertical-align:bottom;"
| style="text-align:right;" | 12
| Mark
| Woodland Park
| Baseball
|
| Hat
|- style="vertical-align:bottom;"
| style="text-align:right;" | 13
| Jason
| Woodland Park
| Baseball
|
| Glasses
|- style="vertical-align:bottom;"
| style="text-align:right;" | 14
| Steve
| Woodland Park
| Skateboarding
|
| Jacket
|- style="vertical-align:bottom;"
| style="text-align:right;" | 15
| John
| Woodland Park
| Skateboarding
|
| Anything Yellow
|- style="vertical-align:bottom;"
| style="text-align:right;" | 16
| Paul
| High Tide Beach
| Volleyball
|
| Anything Yellow
|- style="vertical-align:bottom;"
| style="text-align:right;" | 17
| Tony
| High Tide Beach
| Volleyball
|
| Hat
|- style="vertical-align:bottom;"
| style="text-align:right;" | 18
| Wayne
| High Tide Beach
| Surfing
|
| Anything Yellow
|- style="vertical-align:bottom;"
| style="text-align:right;" | 19
| Mike
| High Tide Beach
| Surfing
|
| Hat
|- style="vertical-align:bottom;"
| style="text-align:right;" | 20
| Scott
| Jim's Gym
| Basketball
|
| Anything Yellow
|- style="vertical-align:bottom;"
| style="text-align:right;" | 21
| Bob
| Jim's Gym
| Basketball
|
| Glasses
|- style="vertical-align:bottom;"
| style="text-align:right;" | 22
| Carlos
| Jim's Gym
| Tennis
|
| Hat
|- style="vertical-align:bottom;"
| style="text-align:right;" | 23
| Matt
| Jim's Gym
| Tennis
|
| Glasses
|}


===Dream Phone Simulator Python Code===
===Dream Phone Simulator Python Code===
====DPS Alpha 1.7====
====DPS Alpha 1.7====
Run the code here:
https://www.online-python.com/HFAh9oMD7T
https://www.online-python.com/HFAh9oMD7T

Latest revision as of 03:59, 2 May 2023

Electronic Dream Phone Box Cover.png

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
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 Cards: James
Dream Phone Cards: Phil
Dream Phone Cards: Bruce
Dream Phone Cards: Tyler
Dream Phone Cards: Jamal
Dream Phone Cards: Gary
Dream Phone Cards: Dan
Dream Phone Cards: Spencer
Dream Phone Cards: Mark
Dream Phone Cards: Jason
Dream Phone Cards: Steve
Dream Phone Cards: John
Dream Phone Cards: Paul
Dream Phone Cards: Tony
Dream Phone Cards: Wayne
Dream Phone Cards: Mike
Dream Phone Cards: Scott
Dream Phone Cards: Bob
Dream Phone Cards: Carlos
Dream Phone Cards: Matt
Dream Phone Cards: Dave
Dream Phone Cards: George
Dream Phone Cards: Dale
Dream Phone Cards: Alan
Dream Phone Cards: Share a Secret
Dream Phone Cards: Speakerphone
Dream Phone Cards: Mom Says Hang Up
Dream Phone Cards: Back of Cards


Dream Phone Clue Card
Dream Phone Clue Card.png

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

DPS Program Logic Block Diagram.png

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