m (Co-Op Puzzle game)
 
(52 intermediate revisions by 2 users not shown)
Line 1: Line 1:
For the assignment I recreated the iconic beginning of the piano piece "Für Elise" by Ludwig van Beethoven in a basic way.
 
  
  
Here is the patcher:
+
=='''Semensterproject'''==
  
{
 
"patcher" : {
 
"fileversion" : 1,
 
"appversion" : {
 
"major" : 8,
 
"minor" : 1,
 
"revision" : 8,
 
"architecture" : "x64",
 
"modernui" : 1
 
}
 
,
 
"classnamespace" : "box",
 
"rect" : [ 26.0, 85.0, 1852.0, 929.0 ],
 
"bglocked" : 0,
 
"openinpresentation" : 0,
 
"default_fontsize" : 12.0,
 
"default_fontface" : 0,
 
"default_fontname" : "Arial",
 
"gridonopen" : 1,
 
"gridsize" : [ 15.0, 15.0 ],
 
"gridsnaponopen" : 1,
 
"objectsnaponopen" : 1,
 
"statusbarvisible" : 2,
 
"toolbarvisible" : 1,
 
"lefttoolbarpinned" : 0,
 
"toptoolbarpinned" : 0,
 
"righttoolbarpinned" : 0,
 
"bottomtoolbarpinned" : 0,
 
"toolbars_unpinned_last_save" : 0,
 
"tallnewobj" : 0,
 
"boxanimatetime" : 200,
 
"enablehscroll" : 1,
 
"enablevscroll" : 1,
 
"devicewidth" : 0.0,
 
"description" : "",
 
"digest" : "",
 
"tags" : "",
 
"style" : "",
 
"subpatcher_template" : "",
 
"assistshowspatchername" : 0,
 
"boxes" : [ {
 
"box" : {
 
"id" : "obj-110",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 887.0, 282.5, 24.0, 24.0 ]
 
}
 
  
}
 
, {
 
"box" : {
 
"id" : "obj-108",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 906.5, 231.5, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
  
}
+
==='''Co-Op Puzzle game'''===
, {
 
"box" : {
 
"id" : "obj-106",
 
"maxclass" : "newobj",
 
"numinlets" : 19,
 
"numoutlets" : 19,
 
"outlettype" : [ "bang", "bang", "bang", "bang", "bang", "bang", "bang", "bang", "bang", "bang", "bang", "bang", "bang", "bang", "bang", "bang", "bang", "bang", "" ],
 
"patching_rect" : [ 1034.0, 189.0, 340.0, 22.0 ],
 
"text" : "select 48 50 52 54 56 58 60 62 64 66 72 74 76 78 84 86 88 90"
 
}
 
  
}
+
'''Idea:'''
, {
 
"box" : {
 
"id" : "obj-3",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 1437.25, 468.0, 29.5, 22.0 ],
 
"text" : "450"
 
}
 
  
}
+
For my final project of this semester I would like to continue and finish developing this “Two-Player Puzzle-game”.
, {
+
The mechanic of two patchers interacting with each other really fasinated me, so I wanted to create something with the objects that made this funtion possible: "udpsend" and "udpreceive".
"box" : {
+
It would be played on two separate computers and with two separate players, which can only communicate through the message boxes that are connected to these objects.
"id" : "obj-9",
+
The players would have to solve different kinds of puzzles by cooperating with each other and exchanging information. They would go through multiple levels to get to the end of the game.
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 1529.5, 449.0, 29.5, 22.0 ],
 
"text" : "500"
 
}
 
  
}
 
, {
 
"box" : {
 
"id" : "obj-11",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 1376.0, 485.0, 29.5, 22.0 ],
 
"text" : "320"
 
}
 
  
}
+
[[File:Information exchange1.jpg|500px]]
, {
 
"box" : {
 
"id" : "obj-15",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 1587.0, 229.5, 24.0, 24.0 ]
 
}
 
  
}
 
, {
 
"box" : {
 
"id" : "obj-16",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 1544.75, 247.5, 24.0, 24.0 ]
 
}
 
  
}
 
, {
 
"box" : {
 
"id" : "obj-19",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 1510.75, 282.5, 24.0, 24.0 ]
 
}
 
  
}
+
'''Concept:'''
, {
 
"box" : {
 
"id" : "obj-23",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 1483.5, 317.0, 24.0, 24.0 ]
 
}
 
  
}
+
Here is how the game would work in theory
, {
+
Every level contains one puzzle that is split into two parts, one part for each of the players. For example player one has the base information in their patcher that player two needs to understand and solve their side of the puzzle. So, player one needs to convey this information to player two by writing it to them via the message boxes. Player two can then use this information to decode their side of the puzzle and get for exampel a number code. This code (new information) then can be conveyed back to player one because they both need the code to "unlock" a prize for solving the puzzel but most importantly both players are needed to move forward in the game
"box" : {
 
"id" : "obj-25",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 1432.0, 366.0, 24.0, 24.0 ]
 
}
 
  
}
+
This game is build on the curiousness of a human and the willingness to work together, to achive a goal, as well as the friendliness/understanding to share the information, so both player can get to the reward and advance in the game.
, {
 
"box" : {
 
"id" : "obj-29",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 1406.0, 395.0, 24.0, 24.0 ]
 
}
 
  
}
 
, {
 
"box" : {
 
"id" : "obj-32",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 1349.25, 426.0, 24.0, 24.0 ]
 
}
 
  
}
+
[[File:Puzzel Sketch.jpg|500px]]
, {
 
"box" : {
 
"id" : "obj-34",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 1312.0, 485.0, 29.5, 22.0 ],
 
"text" : "260"
 
}
 
  
}
 
, {
 
"box" : {
 
"id" : "obj-37",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 1312.0, 439.0, 24.0, 24.0 ]
 
}
 
  
}
+
With the reward "unlocked" the level would be completed and both players can advance to the next stage. Each level would be harder than the one before but so far I was only able to create the first level, where the players are told what the main mechanics of the game are and how everything works.
, {
 
"box" : {
 
"id" : "obj-39",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 1470.5, 231.5, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
  
}
 
, {
 
"box" : {
 
"id" : "obj-41",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 1470.5, 199.5, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
  
}
 
, {
 
"box" : {
 
"id" : "obj-43",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 1474.75, 155.5, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
  
}
+
'''Design:'''
, {
 
"box" : {
 
"id" : "obj-45",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 1447.0, 257.0, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
  
}
+
The design of the game is very simplistic. In both players patchers many different "panel" objects are stacked in a way to represent a smartphone. The message boxes, the players can type in, are arranged to make it look like the phone is displaying a messeging app. The red text in the top left corner of the patcher windows welcomes the players and explains them what they need to do before starting the game. On the left and right side of the phone are some speech bubbels with short instructions and tipps.  
, {
 
"box" : {
 
"id" : "obj-47",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 1393.0, 317.0, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
  
}
+
Player 1:                                                                                                                                          
, {
+
<gallery>
"box" : {
+
File:Game Player ONE v.2 (unlocked) 04.03.2021 21_56_56 (4).png
"id" : "obj-49",
+
File:Game Player ONE v.2 (unlocked) 04.03.2021 21_56_26 (6).png
"maxclass" : "message",
+
</gallery>
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 1349.25, 340.0, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
  
}
+
Player 2:
, {
 
"box" : {
 
"id" : "obj-51",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 1329.25, 380.0, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
  
}
+
<gallery>
, {
+
File:Game Player TWO v.2 (unlocked) 04.03.2021 21_57_48 (3).png
"box" : {
+
File:Game Player TWO v.2 (unlocked) 04.03.2021 21_57_24 (3).png
"id" : "obj-53",
+
</gallery>
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 1286.0, 355.0, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
  
}
 
, {
 
"box" : {
 
"id" : "obj-55",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 1212.25, 477.0, 29.5, 22.0 ],
 
"text" : "445"
 
}
 
  
}
 
, {
 
"box" : {
 
"id" : "obj-56",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 1172.0, 433.0, 29.5, 22.0 ],
 
"text" : "520"
 
}
 
  
}
+
'''Mechanics:'''
, {
 
"box" : {
 
"id" : "obj-57",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 1135.25, 482.0, 29.5, 22.0 ],
 
"text" : "590"
 
}
 
  
}
+
The actual part of the puzzel that player ones patcher contains are the visual and audio representation of a morse code. Morse codes can be deconstructed into "long" and "short" beeps, that tanslate into letters or numbers. The player can use the pad with these prompts at the bottom of their phone to more easily communicate the code to player two.
, {
 
"box" : {
 
"id" : "obj-59",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 1094.5, 449.0, 29.5, 22.0 ],
 
"text" : "495"
 
}
 
  
}
+
[[File:Game Player ONE v.2 (unlocked) 04.03.2021 21_56_56 (6).png|200px]]  
, {
 
"box" : {
 
"id" : "obj-61",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 1215.0, 374.0, 24.0, 24.0 ]
 
}
 
  
}
 
, {
 
"box" : {
 
"id" : "obj-63",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 1172.0, 380.0, 24.0, 24.0 ]
 
}
 
  
}
+
Player twos part of the puzzel consists of an image of numbers and how they translate into morse code. With the "long" and "short" beep messages from player one, player two can translate the code back into numbers. With the pad on the bottom of their phone they can more easily tell player one the code, so they can both unlock their reward.
, {
 
"box" : {
 
"id" : "obj-65",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 1135.25, 380.0, 24.0, 24.0 ]
 
}
 
  
}
+
[[File:Game Player TWO v.2 (unlocked) 04.03.2021 21_57_48 (4).png|200px]]
, {
 
"box" : {
 
"id" : "obj-67",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 1094.5, 392.5, 24.0, 24.0 ]
 
}
 
  
}
 
, {
 
"box" : {
 
"id" : "obj-69",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 1064.0, 368.0, 24.0, 24.0 ]
 
}
 
  
}
+
To unlock this reward both players have a "textedit" object that is placed above the pad at the bottom of the phone. In this "textedit" object the player can write the code. When they think it is the correct one they need to press the button next to the object.
, {
 
"box" : {
 
"id" : "obj-71",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 1033.0, 385.5, 24.0, 24.0 ]
 
}
 
  
}
+
[[File:Game Player ONE v.2 (unlocked) 04.03.2021 21_56_56 (5).png|200px]]
, {
 
"box" : {
 
"id" : "obj-73",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 1376.0, 119.0, 50.0, 22.0 ],
 
"text" : "44"
 
}
 
  
}
 
, {
 
"box" : {
 
"id" : "obj-75",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 1188.0, 317.0, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
  
}
+
The most important mechanic of this game is the way the players communicate with each other. This is made possible through the objects "udpsend" and "udpreceive". The two players have one of each of those object.
, {
+
Connected to the object "udpsend" is a "textedit" object as well as "custom writing pad" which consicts of many message boxes. The "textedit" object can be used when the patcher is locked. The player can write a text and send it to their counterpart when clicking a messag box that has written "send" in it. The pad can also be used when the patcher is locked. Clicking the message boxes arrages what is written in them into a text in a seperate message box.  
"box" : {
+
For player one they consist of the word "short" and "long", while for player two they are numbers from 0 to 9.
"id" : "obj-77",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 1122.25, 317.0, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
  
}
+
Player 1:
, {
+
<gallery>
"box" : {
+
File:Game Player ONE v.2 (unlocked) 04.03.2021 21_56_56 (2).png
"id" : "obj-78",
+
File:Game Player ONE v.2 (unlocked) 04.03.2021 21_56_26 (2).png
"maxclass" : "message",
+
</gallery>
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 1154.0, 344.0, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
  
}
+
Player 2:
, {
+
<gallery>
"box" : {
+
File:Game Player TWO v.2 (unlocked) 04.03.2021 21_57_48 (2).png
"id" : "obj-80",
+
File:Game Player TWO v.2 (unlocked) 04.03.2021 21_57_24 (2).png
"maxclass" : "message",
+
</gallery>
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 1087.5, 344.0, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
  
}
+
If the player thinks that their arragned message is wrong they can delete is by pressing the message box that has am "X" written inside it. If they think in it correct they need to press the message box that says "OK".
, {
+
Connected to the "udpreceive" object are two message boxes that show each player what message the other has send them. Everytime when one of the players receives a message, no matter if self written or separately arranged, the player gets notified by a short melodie playing.
"box" : {
 
"id" : "obj-82",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 1053.75, 317.0, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
  
}
 
, {
 
"box" : {
 
"id" : "obj-84",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 1010.5, 340.0, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
  
}
 
, {
 
"box" : {
 
"id" : "obj-86",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 1033.0, 477.0, 29.5, 22.0 ],
 
"text" : "630"
 
}
 
  
}
+
'''''Here are the MAX patchers for the two players:'''''
, {
 
"box" : {
 
"id" : "obj-88",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 949.0, 496.5, 29.5, 22.0 ],
 
"text" : "660"
 
}
 
  
}
 
, {
 
"box" : {
 
"id" : "obj-90",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 1002.5, 392.5, 24.0, 24.0 ]
 
}
 
  
}
+
'''Patcher for Player 1''': [[:File:Puzzel Game Player 1.maxpat]]
, {
 
"box" : {
 
"id" : "obj-92",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 969.0, 374.0, 24.0, 24.0 ]
 
}
 
  
}
+
Player 1 needs to download the file for the morse code audio. This file needs to be put in the same directory as the general max files. The audio file for the morse code needs to be draged and droped into the the playlist on the left side of the phone. This is also shown in the setup video. It generally demonstrates the mechanics of the game patcher:
, {
+
[[:File:Audio file morse code.zip]]
"box" : {
 
"id" : "obj-94",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 927.0, 313.0, 24.0, 24.0 ]
 
}
 
  
}
+
''Setup video for Player 1'': https://youtu.be/TlXoWFeIv0s
, {
 
"box" : {
 
"id" : "obj-96",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 976.5, 311.0, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
  
}
 
, {
 
"box" : {
 
"id" : "obj-98",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 949.0, 282.5, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
  
}
+
'''Patcher for Player 2''': [[:File:Puzzel Game Player 2.maxpat]]
, {
 
"box" : {
 
"id" : "obj-100",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 925.0, 257.0, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
  
}
+
Player 2 does not need to download any files. The video demonstrates the mechanics of the game patcher.
, {
 
"box" : {
 
"id" : "obj-102",
 
"maxclass" : "newobj",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"patching_rect" : [ 1139.5, 81.0, 63.0, 22.0 ],
 
"text" : "metro 150"
 
}
 
  
}
+
''Setup video for Player 2'': https://youtu.be/W6m56P8mvBY
, {
 
"box" : {
 
"id" : "obj-103",
 
"maxclass" : "newobj",
 
"numinlets" : 5,
 
"numoutlets" : 4,
 
"outlettype" : [ "int", "", "", "int" ],
 
"patching_rect" : [ 996.5, 138.0, 72.0, 22.0 ],
 
"text" : "counter 100"
 
}
 
  
}
 
, {
 
"box" : {
 
"id" : "obj-104",
 
"maxclass" : "newobj",
 
"numinlets" : 1,
 
"numoutlets" : 0,
 
"patching_rect" : [ 933.0, 155.5, 32.0, 22.0 ],
 
"text" : "print"
 
}
 
  
}
+
This video explains the funtions of the two patchers in more detail and shows how they interact with each other:
, {
+
https://youtu.be/ouxpdBoTXAM
"box" : {
 
"id" : "obj-105",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 726.0, 341.0, 29.5, 22.0 ],
 
"text" : "520"
 
}
 
  
}
 
, {
 
"box" : {
 
"id" : "obj-99",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 572.25, 447.0, 29.5, 22.0 ],
 
"text" : "450"
 
}
 
  
}
 
, {
 
"box" : {
 
"id" : "obj-97",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 696.75, 363.0, 29.5, 22.0 ],
 
"text" : "405"
 
}
 
  
}
 
, {
 
"box" : {
 
"id" : "obj-95",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 616.5, 398.0, 29.5, 22.0 ],
 
"text" : "500"
 
}
 
  
}
+
===Resources===
, {
+
Here are a few links to some interesting projects:
"box" : {
 
"id" : "obj-93",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 510.5, 468.0, 29.5, 22.0 ],
 
"text" : "320"
 
}
 
  
}
+
https://cycling74.com/projects/forms-generative-visual-music
, {
 
"box" : {
 
"id" : "obj-91",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 710.0, 199.5, 24.0, 24.0 ]
 
}
 
  
}
+
https://cycling74.com/projects/forms-screen-ensemble
, {
 
"box" : {
 
"id" : "obj-89",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 696.75, 231.5, 24.0, 24.0 ]
 
}
 
  
}
+
https://cycling74.com/projects/held-meiner-tr%C3%A4ume-my-hero-%E2%80%93-interactive-sound-pendulum-%E2%80%93-mixmux-duo-application-example
, {
 
"box" : {
 
"id" : "obj-87",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 668.75, 275.5, 24.0, 24.0 ]
 
}
 
  
}
+
https://cycling74.com/projects/broken-umbrella-strings
, {
 
"box" : {
 
"id" : "obj-85",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 628.0, 310.5, 24.0, 24.0 ]
 
}
 
  
}
+
https://cycling74.com/projects/plantconnect
, {
 
"box" : {
 
"id" : "obj-83",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 583.0, 353.0, 24.0, 24.0 ]
 
}
 
  
}
 
, {
 
"box" : {
 
"id" : "obj-81",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 557.0, 382.0, 24.0, 24.0 ]
 
}
 
  
}
+
https://www.youtube.com/watch?v=JCmoN0Bbdg8
, {
 
"box" : {
 
"id" : "obj-79",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 500.25, 413.0, 24.0, 24.0 ]
 
}
 
  
}
+
===Notes===
, {
+
I fixed the issue I had with my last project. Now it works like I intended:
"box" : {
+
I updated my first patcher by experimenting with the sound-text-video conversion. I copied the basic build for the jit.matrix object, that you can find when right clicking the objeckt and then clicking on help, where you can assign certain planes a value. I made it so that, in the window with each frequenz a different value blicks to the rhythm of the melodie.  
"id" : "obj-76",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 463.0, 472.0, 29.5, 22.0 ],
 
"text" : "260"
 
}
 
  
}
+
Here is the fixed Patch:  [[:File:Für Elise 3.maxpat]]
, {
 
"box" : {
 
"id" : "obj-74",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 463.0, 426.0, 24.0, 24.0 ]
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-72",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 615.0, 247.5, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-70",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 616.5, 206.0, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-68",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 622.75, 164.0, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-66",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 596.0, 275.5, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-64",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 531.0, 305.0, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-62",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 515.0, 329.0, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-60",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 500.25, 353.0, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-58",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 473.0, 377.0, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-54",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 364.25, 426.0, 29.5, 22.0 ],
 
"text" : "445"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-52",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 324.0, 382.0, 29.5, 22.0 ],
 
"text" : "520"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-50",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 287.25, 431.0, 29.5, 22.0 ],
 
"text" : "590"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-48",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 246.5, 398.0, 29.5, 22.0 ],
 
"text" : "495"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-46",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 367.0, 323.0, 24.0, 24.0 ]
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-44",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 324.0, 329.0, 24.0, 24.0 ]
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-42",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 287.25, 329.0, 24.0, 24.0 ]
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-40",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 246.5, 341.5, 24.0, 24.0 ]
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-38",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 216.0, 317.0, 24.0, 24.0 ]
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-35",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 185.0, 334.5, 24.0, 24.0 ]
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-33",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 345.0, 109.0, 50.0, 22.0 ],
 
"text" : "49"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-31",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 340.0, 266.0, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-26",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 274.25, 266.0, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-24",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 306.0, 293.0, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-21",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 239.5, 293.0, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-17",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 205.75, 266.0, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-13",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 162.5, 289.0, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-36",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 185.0, 426.0, 29.5, 22.0 ],
 
"text" : "630"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-30",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 79.0, 440.5, 29.5, 22.0 ],
 
"text" : "660"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-28",
 
"maxclass" : "newobj",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "signal" ],
 
"patching_rect" : [ 798.0, 755.0, 66.0, 22.0 ],
 
"text" : "cycle~ 100"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-27",
 
"maxclass" : "ezdac~",
 
"numinlets" : 2,
 
"numoutlets" : 0,
 
"patching_rect" : [ 808.5, 811.5, 45.0, 45.0 ]
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-22",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 154.5, 341.5, 24.0, 24.0 ]
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-20",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 121.0, 323.0, 24.0, 24.0 ]
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-18",
 
"maxclass" : "button",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 79.0, 262.0, 24.0, 24.0 ]
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-14",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 128.5, 260.0, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-12",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 101.0, 231.5, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-10",
 
"maxclass" : "message",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "" ],
 
"patching_rect" : [ 77.0, 206.0, 50.0, 22.0 ],
 
"text" : "bang"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-8",
 
"maxclass" : "newobj",
 
"numinlets" : 18,
 
"numoutlets" : 18,
 
"outlettype" : [ "bang", "bang", "bang", "bang", "bang", "bang", "bang", "bang", "bang", "bang", "bang", "bang", "bang", "bang", "bang", "bang", "bang", "" ],
 
"patching_rect" : [ 147.5, 164.0, 297.0, 22.0 ],
 
"text" : "select 2 4 6 8 10 12 14 16 18 24 26 28 30 36 38 40 42"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-7",
 
"maxclass" : "toggle",
 
"numinlets" : 1,
 
"numoutlets" : 1,
 
"outlettype" : [ "int" ],
 
"parameter_enable" : 0,
 
"patching_rect" : [ 808.5, 9.0, 24.0, 24.0 ]
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-5",
 
"maxclass" : "newobj",
 
"numinlets" : 2,
 
"numoutlets" : 1,
 
"outlettype" : [ "bang" ],
 
"patching_rect" : [ 290.5, 68.0, 63.0, 22.0 ],
 
"text" : "metro 150"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-4",
 
"maxclass" : "newobj",
 
"numinlets" : 5,
 
"numoutlets" : 4,
 
"outlettype" : [ "int", "", "", "int" ],
 
"patching_rect" : [ 147.5, 125.0, 72.0, 22.0 ],
 
"text" : "counter 100"
 
}
 
 
 
}
 
, {
 
"box" : {
 
"id" : "obj-1",
 
"maxclass" : "newobj",
 
"numinlets" : 1,
 
"numoutlets" : 0,
 
"patching_rect" : [ 84.0, 142.5, 32.0, 22.0 ],
 
"text" : "print"
 
}
 
 
 
}
 
  ],
 
"lines" : [ {
 
"patchline" : {
 
"destination" : [ "obj-18", 0 ],
 
"source" : [ "obj-10", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-94", 0 ],
 
"source" : [ "obj-100", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-103", 0 ],
 
"source" : [ "obj-102", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-104", 0 ],
 
"order" : 1,
 
"source" : [ "obj-103", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-106", 0 ],
 
"order" : 0,
 
"source" : [ "obj-103", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-28", 0 ],
 
"source" : [ "obj-105", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-100", 0 ],
 
"source" : [ "obj-106", 1 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-108", 0 ],
 
"source" : [ "obj-106", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-39", 0 ],
 
"source" : [ "obj-106", 15 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-41", 0 ],
 
"source" : [ "obj-106", 16 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-43", 0 ],
 
"source" : [ "obj-106", 17 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-45", 0 ],
 
"source" : [ "obj-106", 14 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-47", 0 ],
 
"source" : [ "obj-106", 13 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-49", 0 ],
 
"source" : [ "obj-106", 12 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-51", 0 ],
 
"source" : [ "obj-106", 11 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-53", 0 ],
 
"source" : [ "obj-106", 10 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-73", 0 ],
 
"source" : [ "obj-106", 18 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-75", 0 ],
 
"source" : [ "obj-106", 9 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-77", 0 ],
 
"source" : [ "obj-106", 7 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-78", 0 ],
 
"source" : [ "obj-106", 8 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-80", 0 ],
 
"source" : [ "obj-106", 6 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-82", 0 ],
 
"source" : [ "obj-106", 5 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-84", 0 ],
 
"source" : [ "obj-106", 4 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-96", 0 ],
 
"source" : [ "obj-106", 3 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-98", 0 ],
 
"source" : [ "obj-106", 2 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-110", 0 ],
 
"source" : [ "obj-108", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-28", 0 ],
 
"source" : [ "obj-11", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-11", 0 ],
 
"source" : [ "obj-110", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-20", 0 ],
 
"source" : [ "obj-12", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-35", 0 ],
 
"source" : [ "obj-13", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-22", 0 ],
 
"source" : [ "obj-14", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-3", 0 ],
 
"source" : [ "obj-15", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-9", 0 ],
 
"source" : [ "obj-16", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-38", 0 ],
 
"source" : [ "obj-17", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-30", 0 ],
 
"source" : [ "obj-18", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-56", 0 ],
 
"source" : [ "obj-19", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-36", 0 ],
 
"source" : [ "obj-20", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-40", 0 ],
 
"source" : [ "obj-21", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-30", 0 ],
 
"source" : [ "obj-22", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-11", 0 ],
 
"source" : [ "obj-23", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-44", 0 ],
 
"source" : [ "obj-24", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-9", 0 ],
 
"source" : [ "obj-25", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-42", 0 ],
 
"source" : [ "obj-26", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-27", 1 ],
 
"order" : 0,
 
"source" : [ "obj-28", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-27", 0 ],
 
"order" : 1,
 
"source" : [ "obj-28", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-3", 0 ],
 
"source" : [ "obj-29", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-28", 0 ],
 
"source" : [ "obj-3", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-28", 0 ],
 
"source" : [ "obj-30", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-46", 0 ],
 
"source" : [ "obj-31", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-11", 0 ],
 
"source" : [ "obj-32", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-28", 0 ],
 
"source" : [ "obj-34", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-36", 0 ],
 
"source" : [ "obj-35", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-28", 0 ],
 
"source" : [ "obj-36", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-34", 0 ],
 
"source" : [ "obj-37", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-30", 0 ],
 
"source" : [ "obj-38", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-19", 0 ],
 
"source" : [ "obj-39", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-1", 0 ],
 
"order" : 1,
 
"source" : [ "obj-4", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-8", 0 ],
 
"order" : 0,
 
"source" : [ "obj-4", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-48", 0 ],
 
"source" : [ "obj-40", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-16", 0 ],
 
"source" : [ "obj-41", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-50", 0 ],
 
"source" : [ "obj-42", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-15", 0 ],
 
"source" : [ "obj-43", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-52", 0 ],
 
"source" : [ "obj-44", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-23", 0 ],
 
"source" : [ "obj-45", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-54", 0 ],
 
"source" : [ "obj-46", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-25", 0 ],
 
"source" : [ "obj-47", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-28", 0 ],
 
"source" : [ "obj-48", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-29", 0 ],
 
"source" : [ "obj-49", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-4", 0 ],
 
"source" : [ "obj-5", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-28", 0 ],
 
"source" : [ "obj-50", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-32", 0 ],
 
"source" : [ "obj-51", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-28", 0 ],
 
"source" : [ "obj-52", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-37", 0 ],
 
"source" : [ "obj-53", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-28", 0 ],
 
"source" : [ "obj-54", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-28", 0 ],
 
"source" : [ "obj-55", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-28", 0 ],
 
"source" : [ "obj-56", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-28", 0 ],
 
"source" : [ "obj-57", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-74", 0 ],
 
"source" : [ "obj-58", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-28", 0 ],
 
"source" : [ "obj-59", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-79", 0 ],
 
"source" : [ "obj-60", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-55", 0 ],
 
"source" : [ "obj-61", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-81", 0 ],
 
"source" : [ "obj-62", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-56", 0 ],
 
"source" : [ "obj-63", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-83", 0 ],
 
"source" : [ "obj-64", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-57", 0 ],
 
"source" : [ "obj-65", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-85", 0 ],
 
"source" : [ "obj-66", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-59", 0 ],
 
"source" : [ "obj-67", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-91", 0 ],
 
"source" : [ "obj-68", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-88", 0 ],
 
"source" : [ "obj-69", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-102", 0 ],
 
"order" : 0,
 
"source" : [ "obj-7", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-5", 0 ],
 
"order" : 1,
 
"source" : [ "obj-7", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-89", 0 ],
 
"source" : [ "obj-70", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-86", 0 ],
 
"source" : [ "obj-71", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-87", 0 ],
 
"source" : [ "obj-72", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-76", 0 ],
 
"source" : [ "obj-74", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-61", 0 ],
 
"source" : [ "obj-75", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-28", 0 ],
 
"source" : [ "obj-76", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-65", 0 ],
 
"source" : [ "obj-77", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-63", 0 ],
 
"source" : [ "obj-78", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-93", 0 ],
 
"source" : [ "obj-79", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-10", 0 ],
 
"source" : [ "obj-8", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-12", 0 ],
 
"source" : [ "obj-8", 1 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-13", 0 ],
 
"source" : [ "obj-8", 3 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-14", 0 ],
 
"source" : [ "obj-8", 2 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-17", 0 ],
 
"source" : [ "obj-8", 4 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-21", 0 ],
 
"source" : [ "obj-8", 5 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-24", 0 ],
 
"source" : [ "obj-8", 7 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-26", 0 ],
 
"source" : [ "obj-8", 6 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-31", 0 ],
 
"source" : [ "obj-8", 8 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-33", 1 ],
 
"source" : [ "obj-8", 17 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-58", 0 ],
 
"source" : [ "obj-8", 9 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-60", 0 ],
 
"source" : [ "obj-8", 10 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-62", 0 ],
 
"source" : [ "obj-8", 11 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-64", 0 ],
 
"source" : [ "obj-8", 12 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-66", 0 ],
 
"source" : [ "obj-8", 13 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-68", 0 ],
 
"source" : [ "obj-8", 16 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-70", 0 ],
 
"source" : [ "obj-8", 15 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-72", 0 ],
 
"source" : [ "obj-8", 14 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-67", 0 ],
 
"source" : [ "obj-80", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-99", 0 ],
 
"source" : [ "obj-81", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-69", 0 ],
 
"source" : [ "obj-82", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-95", 0 ],
 
"source" : [ "obj-83", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-71", 0 ],
 
"source" : [ "obj-84", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-93", 0 ],
 
"source" : [ "obj-85", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-28", 0 ],
 
"source" : [ "obj-86", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-97", 0 ],
 
"source" : [ "obj-87", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-28", 0 ],
 
"source" : [ "obj-88", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-95", 0 ],
 
"source" : [ "obj-89", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-28", 0 ],
 
"source" : [ "obj-9", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-88", 0 ],
 
"source" : [ "obj-90", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-105", 0 ],
 
"source" : [ "obj-91", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-86", 0 ],
 
"source" : [ "obj-92", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-28", 0 ],
 
"source" : [ "obj-93", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-88", 0 ],
 
"source" : [ "obj-94", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-28", 0 ],
 
"source" : [ "obj-95", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-90", 0 ],
 
"source" : [ "obj-96", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-28", 0 ],
 
"source" : [ "obj-97", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-92", 0 ],
 
"source" : [ "obj-98", 0 ]
 
}
 
 
 
}
 
, {
 
"patchline" : {
 
"destination" : [ "obj-28", 0 ],
 
"source" : [ "obj-99", 0 ]
 
}
 
 
 
}
 
],
 
"dependency_cache" : [  ],
 
"autosave" : 0
 
}
 
 
 
}
 

Latest revision as of 22:41, 4 March 2021


Semensterproject

Co-Op Puzzle game

Idea:

For my final project of this semester I would like to continue and finish developing this “Two-Player Puzzle-game”. The mechanic of two patchers interacting with each other really fasinated me, so I wanted to create something with the objects that made this funtion possible: "udpsend" and "udpreceive". It would be played on two separate computers and with two separate players, which can only communicate through the message boxes that are connected to these objects. The players would have to solve different kinds of puzzles by cooperating with each other and exchanging information. They would go through multiple levels to get to the end of the game.


Information exchange1.jpg


Concept:

Here is how the game would work in theory Every level contains one puzzle that is split into two parts, one part for each of the players. For example player one has the base information in their patcher that player two needs to understand and solve their side of the puzzle. So, player one needs to convey this information to player two by writing it to them via the message boxes. Player two can then use this information to decode their side of the puzzle and get for exampel a number code. This code (new information) then can be conveyed back to player one because they both need the code to "unlock" a prize for solving the puzzel but most importantly both players are needed to move forward in the game

This game is build on the curiousness of a human and the willingness to work together, to achive a goal, as well as the friendliness/understanding to share the information, so both player can get to the reward and advance in the game.


Puzzel Sketch.jpg


With the reward "unlocked" the level would be completed and both players can advance to the next stage. Each level would be harder than the one before but so far I was only able to create the first level, where the players are told what the main mechanics of the game are and how everything works.


Design:

The design of the game is very simplistic. In both players patchers many different "panel" objects are stacked in a way to represent a smartphone. The message boxes, the players can type in, are arranged to make it look like the phone is displaying a messeging app. The red text in the top left corner of the patcher windows welcomes the players and explains them what they need to do before starting the game. On the left and right side of the phone are some speech bubbels with short instructions and tipps.

Player 1:

Player 2:


Mechanics:

The actual part of the puzzel that player ones patcher contains are the visual and audio representation of a morse code. Morse codes can be deconstructed into "long" and "short" beeps, that tanslate into letters or numbers. The player can use the pad with these prompts at the bottom of their phone to more easily communicate the code to player two.

Game Player ONE v.2 (unlocked) 04.03.2021 21 56 56 (6).png


Player twos part of the puzzel consists of an image of numbers and how they translate into morse code. With the "long" and "short" beep messages from player one, player two can translate the code back into numbers. With the pad on the bottom of their phone they can more easily tell player one the code, so they can both unlock their reward.

Game Player TWO v.2 (unlocked) 04.03.2021 21 57 48 (4).png


To unlock this reward both players have a "textedit" object that is placed above the pad at the bottom of the phone. In this "textedit" object the player can write the code. When they think it is the correct one they need to press the button next to the object.

Game Player ONE v.2 (unlocked) 04.03.2021 21 56 56 (5).png


The most important mechanic of this game is the way the players communicate with each other. This is made possible through the objects "udpsend" and "udpreceive". The two players have one of each of those object. Connected to the object "udpsend" is a "textedit" object as well as "custom writing pad" which consicts of many message boxes. The "textedit" object can be used when the patcher is locked. The player can write a text and send it to their counterpart when clicking a messag box that has written "send" in it. The pad can also be used when the patcher is locked. Clicking the message boxes arrages what is written in them into a text in a seperate message box. For player one they consist of the word "short" and "long", while for player two they are numbers from 0 to 9.

Player 1:

Player 2:

If the player thinks that their arragned message is wrong they can delete is by pressing the message box that has am "X" written inside it. If they think in it correct they need to press the message box that says "OK". Connected to the "udpreceive" object are two message boxes that show each player what message the other has send them. Everytime when one of the players receives a message, no matter if self written or separately arranged, the player gets notified by a short melodie playing.


Here are the MAX patchers for the two players:


Patcher for Player 1: File:Puzzel Game Player 1.maxpat

Player 1 needs to download the file for the morse code audio. This file needs to be put in the same directory as the general max files. The audio file for the morse code needs to be draged and droped into the the playlist on the left side of the phone. This is also shown in the setup video. It generally demonstrates the mechanics of the game patcher: File:Audio file morse code.zip

Setup video for Player 1: https://youtu.be/TlXoWFeIv0s


Patcher for Player 2: File:Puzzel Game Player 2.maxpat

Player 2 does not need to download any files. The video demonstrates the mechanics of the game patcher.

Setup video for Player 2: https://youtu.be/W6m56P8mvBY


This video explains the funtions of the two patchers in more detail and shows how they interact with each other: https://youtu.be/ouxpdBoTXAM



Resources

Here are a few links to some interesting projects:

https://cycling74.com/projects/forms-generative-visual-music

https://cycling74.com/projects/forms-screen-ensemble

https://cycling74.com/projects/held-meiner-tr%C3%A4ume-my-hero-%E2%80%93-interactive-sound-pendulum-%E2%80%93-mixmux-duo-application-example

https://cycling74.com/projects/broken-umbrella-strings

https://cycling74.com/projects/plantconnect


https://www.youtube.com/watch?v=JCmoN0Bbdg8

Notes

I fixed the issue I had with my last project. Now it works like I intended: I updated my first patcher by experimenting with the sound-text-video conversion. I copied the basic build for the jit.matrix object, that you can find when right clicking the objeckt and then clicking on help, where you can assign certain planes a value. I made it so that, in the window with each frequenz a different value blicks to the rhythm of the melodie.

Here is the fixed Patch: File:Für Elise 3.maxpat