diff --git a/assets/conclusion/summary.png b/assets/conclusion/summary.png
new file mode 100644
index 0000000..33f28f4
Binary files /dev/null and b/assets/conclusion/summary.png differ
diff --git a/assets/conclusion/truce.jpg b/assets/conclusion/truce.jpg
new file mode 100644
index 0000000..27ed55d
Binary files /dev/null and b/assets/conclusion/truce.jpg differ
diff --git a/assets/sounds/evil_laugh.mp3 b/assets/sounds/evil_laugh.mp3
new file mode 100644
index 0000000..744ae4c
Binary files /dev/null and b/assets/sounds/evil_laugh.mp3 differ
diff --git a/assets/splash/splash_peep.json b/assets/splash/splash_peep.json
index ef419d3..1d8844d 100644
--- a/assets/splash/splash_peep.json
+++ b/assets/splash/splash_peep.json
@@ -7,13 +7,21 @@
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":302,"h":402},
"sourceSize": {"w":302,"h":402}
+},
+"splash_peep0001":
+{
+ "frame": {"x":10,"y":422,"w":302,"h":402},
+ "rotated": false,
+ "trimmed": false,
+ "spriteSourceSize": {"x":0,"y":0,"w":302,"h":402},
+ "sourceSize": {"w":302,"h":402}
}},
"meta": {
"app": "Adobe Animate",
"version": "15.2.0.66",
"image": "splash_peep.png",
"format": "RGBA8888",
- "size": {"w":512,"h":512},
+ "size": {"w":512,"h":1024},
"scale": "1"
}
}
diff --git a/assets/splash/splash_peep.png b/assets/splash/splash_peep.png
index fbe3e5b..57b395b 100644
Binary files a/assets/splash/splash_peep.png and b/assets/splash/splash_peep.png differ
diff --git a/index.html b/index.html
index ada7e92..a95836e 100644
--- a/index.html
+++ b/index.html
@@ -97,11 +97,14 @@ window.onload = function(){
slideSelect.dom.style.display = "block";
// [FOR DEBUGGING]
- //publish("slideshow/next");
- publish("slideshow/scratch", ["noise"]);
+ publish("slideshow/next");
+ //publish("slideshow/scratch", ["conclusion"]);
});
+ // DEBUGGING
+ //Howler.mute(true);
+
// LOAD REAL THINGS
Loader.loadAssets(
Loader.manifest,
diff --git a/js/sims/Iterated.js b/js/sims/Iterated.js
index 98ba9a2..878719f 100644
--- a/js/sims/Iterated.js
+++ b/js/sims/Iterated.js
@@ -8,6 +8,7 @@ Loader.addToManifest(Loader.manifest,{
// SFX
coin_insert: "assets/sounds/coin_insert.mp3",
coin_get: "assets/sounds/coin_get.mp3",
+ evil_laugh: "assets/sounds/evil_laugh.mp3",
});
@@ -202,6 +203,8 @@ function Iterated(config){
self.remove = function(){
app.destroy();
unlisten(self);
+ self.playerA.kill();
+ self.playerB.kill();
_remove(self);
};
@@ -457,6 +460,14 @@ function IteratedPeep(config){
if(self.payoff==PD.PAYOFFS.P) self.face.gotoAndStop(7); // Punishment Face
if(self.payoff==PD.PAYOFFS.T) self.face.gotoAndStop(10); // Temptation Face!
+ // EVIL LAUGH
+ if(self.payoff==PD.PAYOFFS.T){
+ setTimeout(function(){
+ var stereo = (config.opponent) ? 0.9 : -0.9;
+ Loader.sounds.evil_laugh.stereo(stereo).volume(1).play();
+ },100);
+ }
+
if(self.payoff==PD.PAYOFFS.T){
_isHopping = true;
}
@@ -584,6 +595,16 @@ function IteratedPeep(config){
self.animationDeferred.resolve();
};
+ // KILL
+ self.kill = function(){
+ // Remove ALL tweens
+ Tween.removeTweens(self.animated);
+ Tween.removeTweens(self.coin);
+ for(var i=0;i
"+Words.get("oneoff_2_top"));
}else{
t.setText(Words.get("oneoff_2_cheated")+"
"+Words.get("oneoff_2_top"));
}
- b.setTextID("oneoff_2_btm");
+ self.add({
+ id:"btmWords", type:"TextBox", text_id:"oneoff_2_btm",
+ x:130, y:392, width:700, height:100, align:"center"
+ });
// Replace button
self.remove("btnCheat");
self.remove("btnCooperate");
self.add({
- id:"btnNext", type:"Button", x:304, y:466, size:"long",
+ id:"btnNext", type:"Button", x:304, y:481, size:"long",
text_id:"oneoff_button_next",
message:"slideshow/next"
});
diff --git a/js/slides/3_Slides_Tournament.js b/js/slides/3_Slides_Tournament.js
index aacd042..1d7838a 100644
--- a/js/slides/3_Slides_Tournament.js
+++ b/js/slides/3_Slides_Tournament.js
@@ -84,6 +84,12 @@ SLIDES.push({
var o = self.objects;
+ // Words to the side
+ self.add({
+ id:"text_extra", type:"TextBox",
+ x:510, y:230, width:450, height:500
+ });
+
var showTournament = function(num){
var words = "";
@@ -124,13 +130,17 @@ SLIDES.push({
match_header = match_header.replace(/\[B\]/g, ""+scoreB+"");
words += match_header+"
";
- // Extra info
- words += Words.get("tournament_"+(num+1));
-
// PUT IN THE WORDS
o.text.setText(words);
_hide(o.text); _fadeIn(o.text, 100);
+ // Extra info
+ o.text_extra.setTextID("tournament_"+(num+1));
+ _hide(o.text_extra); _fadeIn(o.text_extra, 100+250);
+
+ // FADE IN BUTTON
+ _hide(o.button); _fadeIn(o.button, 100+500);
+
// FINAL MATCH?
if(_matchNumber==9){
_switchButton();
@@ -138,10 +148,6 @@ SLIDES.push({
};
- // MATCH NUMBER!
- _matchNumber = 0;
- showTournament(_matchNumber);
-
// "Next Match" Button
self.add({
id:"button", type:"Button",
@@ -158,10 +164,14 @@ SLIDES.push({
publish("slideshow/next");
};
};
- _hide(o.button); _fadeIn(o.button, 100+500);
+
+ // MATCH NUMBER!
+ _matchNumber = 0;
+ showTournament(_matchNumber);
},
onend: function(self){
+ self.remove("text_extra");
self.remove("button");
}
});
diff --git a/js/slides/5_Slides_Distrust.js b/js/slides/5_Slides_Distrust.js
index d8b6180..522886e 100644
--- a/js/slides/5_Slides_Distrust.js
+++ b/js/slides/5_Slides_Distrust.js
@@ -286,104 +286,14 @@ SLIDES.push({
// Worse...
self.add({
id:"next", type:"Button",
- x:0, y:410, size:"long",
+ x:0, y:450, size:"long",
text_id:"distrust_5_btn",
- message: "slideshow/next"
+ message: "slideshow/scratch"
});
_hide(o.next); _fadeIn(o.next, 400);
},
onend: function(self){
- self.remove("text");
- self.remove("next");
- }
-});
-
-// Play with BOTH
-SLIDES.push({
- onstart: function(self){
-
- var o = self.objects;
- _.misc = {};
-
- // TOURNAMENT
- Tournament.resetGlobalVariables();
- Tournament.INITIAL_AGENTS = [
- {strategy:"all_c", count:23},
- {strategy:"all_d", count:1},
- {strategy:"tft", count:1}
- ];
- PD.PAYOFFS.P = -4;
- PD.PAYOFFS.S = -1;
- PD.PAYOFFS.R = 1;
- PD.PAYOFFS.T = 3;
- o.tournament.reset();
-
- // Words
- self.add({
- id:"text", type:"TextBox",
- x:0, y:0, width:450, height:500,
- text_id:"distrust_6"
- });
- _hide(o.text); _fadeIn(o.text, 100);
- listen(_.misc, "payoffs/onchange", function(value){
- o.tournament.reset();
- });
-
- // SLIDER
- // HAX - COPY PASTE CODE WHATEVER
- var x = 0;
- var y = 95;
- self.add({
- id:"roundsLabel", type:"TextBox",
- x:0, y:y, width:450, size:25, noSelect:true
- });
- self.add({
- id:"roundsSlider", type:"Slider",
- x:0, y:y+30, width:450,
- min:1, max:20, step:1,
- message: "rules/turns"
- });
- var _updateLabel = function(value){
- var words = (value==1) ? Words.get("sandbox_rules_1_single") : Words.get("sandbox_rules_1"); // plural?
- words = words.replace(/\[N\]/g, value+""); // replace [N] with the number value
- o.roundsLabel.setText(""+words+"");
- };
- listen(_.misc, "rules/turns", function(value){
- _updateLabel(value);
- o.tournament.reset();
- });
- o.roundsSlider.setValue(10);
- _updateLabel(10);
- _hide(o.roundsLabel); _fadeIn(o.roundsLabel, 300);
- _hide(o.roundsSlider); _fadeIn(o.roundsSlider, 300);
-
- // PAYOFFS
- self.add({
- id:"payoffs", type:"PayoffsUI",
- x:105, y:170, scale:0.8, slideshow:self
- });
- _hide(o.payoffs); _fadeIn(o.payoffs, 300);
-
- // Words
- self.add({
- id:"text2", type:"TextBox",
- x:0, y:410, width:450, height:500,
- text_id:"distrust_6_end"
- });
- _hide(o.text2); _fadeIn(o.text2, 500);
-
- // FINALLY.
- self.add({
- id:"next", type:"Button",
- x:0, y:475, size:"long",
- text_id:"distrust_6_btn",
- message: "slideshow/scratch"
- });
- _hide(o.next); _fadeIn(o.next, 700);
-
- },
- onend: function(self){
unlisten(_);
unlisten(_.misc);
self.clear();
diff --git a/js/slides/6_Slides_Noise.js b/js/slides/6_Slides_Noise.js
index 8505be3..4732af1 100644
--- a/js/slides/6_Slides_Noise.js
+++ b/js/slides/6_Slides_Noise.js
@@ -153,7 +153,9 @@ SLIDES.push({
// Tournament: simpleton wins
SLIDES.push({
+
//id:"noise",// [FOR DEBUGGING]
+
onstart: function(self){
var o = self.objects;
@@ -214,7 +216,8 @@ SLIDES.push({
var o = self.objects;
// Words
- o.text.setTextID("noise_evo_2");
+ var words = Words.get("noise_evo_2").replace(/\[CHAR\]/g, ""+Words.get("label_"+_.answer)+"");
+ o.text.setText(words);
_hide(o.text); _fadeIn(o.text, 100);
/////////////////////////////////////////
@@ -260,13 +263,35 @@ SLIDES.push({
if(step=="reproduce"){
reproduceSteps++;
if(reproduceSteps==6){
- publish("slideshow/next");
+
+ // WORDS
+ var words = (_.answer=="pavlov") ? Words.get("noise_evo_2_2_correct") : Words.get("noise_evo_2_2_incorrect");
+ words += " ";
+ words += Words.get("noise_evo_2_2");
+ self.add({
+ id:"text_next", type:"TextBox",
+ x:510, y:160, width:450,
+ text: words
+ });
+ _hide(o.text_next); _fadeIn(o.text_next, 100);
+
+ // BUTTON
+ self.add({
+ id:"btn_next", type:"Button", x:510, y:366,
+ text_id:"noise_evo_2_2_btn", size:"long",
+ message:"slideshow/next"
+ });
+ _hide(o.btn_next); _fadeIn(o.btn_next, 300);
+
+
}
}
});
},
onend: function(self){
+ self.remove("text_next");
+ self.remove("btn_next");
unlisten(_.misc);
}
});
@@ -340,7 +365,8 @@ SLIDES.push({
o.playButton.setText("label_start");
// Words
- o.text.setTextID("noise_evo_4");
+ var words = Words.get("noise_evo_4").replace(/\[CHAR\]/g, ""+Words.get("label_"+_.answer)+"");
+ o.text.setText(words);
_hide(o.text); _fadeIn(o.text, 100);
/////////////////////////////////////////
@@ -353,13 +379,34 @@ SLIDES.push({
if(step=="reproduce"){
reproduceSteps++;
if(reproduceSteps==8){
- publish("slideshow/next");
+
+ // WORDS
+ var words = (_.answer=="tf2t") ? Words.get("noise_evo_4_2_correct") : Words.get("noise_evo_4_2_incorrect");
+ words += " ";
+ words += Words.get("noise_evo_4_2");
+ self.add({
+ id:"text_next", type:"TextBox",
+ x:510, y:116, width:450,
+ text: words
+ });
+ _hide(o.text_next); _fadeIn(o.text_next, 100);
+
+ // BUTTON
+ self.add({
+ id:"btn_next", type:"Button", x:510, y:446,
+ text_id:"noise_evo_4_2_btn", size:"long",
+ message:"slideshow/next"
+ });
+ _hide(o.btn_next); _fadeIn(o.btn_next, 300);
+
}
}
});
},
onend: function(self){
+ self.remove("text_next");
+ self.remove("btn_next");
unlisten(_.misc);
}
});
@@ -368,6 +415,7 @@ SLIDES.push({
onstart: function(self){
var o = self.objects;
+ _.misc = {};
// Words
o.text.setTextID("noise_evo_5");
@@ -378,7 +426,7 @@ SLIDES.push({
// Slider!
var x = 510;
- var y = 100;
+ var y = 200;
self.add({
id:"noiseLabel", type:"TextBox",
x:x, y:y, width:450, noSelect:true
@@ -389,12 +437,11 @@ SLIDES.push({
min:0.00, max:0.50, step:0.01,
message: "rules/noise"
});
- _.misc = {};
var _updateLabel = function(value){
value = Math.round(value*100);
var words = Words.get("sandbox_rules_3");
words = words.replace(/\[N\]/g, value+""); // replace [N] with the number value
- o.noiseLabel.setText(words);
+ o.noiseLabel.setText(""+words+"");
};
listen(_.misc, "rules/noise", function(value){
_updateLabel(value);
@@ -402,22 +449,30 @@ SLIDES.push({
});
o.noiseSlider.setValue(0.05);
_updateLabel(0.05);
+ _hide(o.noiseLabel); _fadeIn(o.noiseLabel, 300);
+ _hide(o.noiseSlider); _fadeIn(o.noiseSlider, 300);
// Continue whenever you want to...
- var x = 510;
- var y = 300;
- self.add({
- id:"continueLabel", type:"TextBox",
- x:x, y:y+5, width:200, height:50,
- align:"right", color:"#aaa", size:17,
- text_id:"noise_evo_6_continue"
- });
- self.add({
- id:"continueButton", type:"Button",
- x:x+215, y:y, size:"short",
- text_id:"label_continue",
- message: "slideshow/next"
+ listen(_.misc, "tournament/autoplay/start",function(){
+ if(_showContinue) _showContinue();
});
+ var _showContinue = function(){
+ _showContinue = null;
+ self.add({
+ id:"continueLabel", type:"TextBox",
+ x:565, y:405, width:400,
+ align:"right", color:"#aaa", size:17,
+ text_id:"noise_evo_5_continue"
+ });
+ self.add({
+ id:"continueButton", type:"Button",
+ x:855, y:440, size:"short",
+ text_id:"label_continue",
+ message: "slideshow/next"
+ });
+ _hide(o.continueLabel); _fadeIn(o.continueLabel, 100);
+ _hide(o.continueButton); _fadeIn(o.continueButton, 100);
+ };
},
onend: function(self){
@@ -426,6 +481,7 @@ SLIDES.push({
self.remove("noiseSlider");
self.remove("continueLabel");
self.remove("continueButton");
+ self.remove("text");
}
});
@@ -435,7 +491,11 @@ SLIDES.push({
var o = self.objects;
// Words
- o.text.setTextID("noise_evo_6");
+ self.add({
+ id:"text", type:"TextBox",
+ x:510, y:10, width:450, height:500,
+ text_id:"noise_evo_6"
+ });
_hide(o.text); _fadeIn(o.text, 100);
// Next button
@@ -444,6 +504,7 @@ SLIDES.push({
text_id:"noise_evo_6_btn", size:"long",
message:"slideshow/scratch"
});
+ _hide(o.button); _fadeIn(o.button, 500);
},
onend: function(self){
diff --git a/js/slides/8_Slides_Conclusion.js b/js/slides/8_Slides_Conclusion.js
index c524188..92094a5 100644
--- a/js/slides/8_Slides_Conclusion.js
+++ b/js/slides/8_Slides_Conclusion.js
@@ -1,6 +1,63 @@
SLIDES.push({
id: "conclusion",
onstart: function(self){
+
+ // WORDS
+ self.add({
+ id:"text1", type:"TextBox",
+ x:3, y:6, width:800,
+ text_id:"conclusion_0"
+ });
+ self.add({
+ id:"text2", type:"TextBox",
+ x:176, y:65-10, width:760, size:30, color:"#4089DD",
+ text_id:"conclusion_1_a"
+ });
+ self.add({
+ id:"text3", type:"TextBox",
+ x:176, y:115-10, width:760,
+ text_id:"conclusion_1_a2"
+ });
+ self.add({
+ id:"text4", type:"TextBox",
+ x:176, y:192-10, width:760, size:30, color:"#efc701",
+ text_id:"conclusion_2_a"
+ });
+ self.add({
+ id:"text5", type:"TextBox",
+ x:176, y:242-10, width:760,
+ text_id:"conclusion_2_a2"
+ });
+ self.add({
+ id:"text6", type:"TextBox",
+ x:176, y:316-10, width:760, size:30, color:"#DD4040",
+ text_id:"conclusion_3_a"
+ });
+ self.add({
+ id:"text7", type:"TextBox",
+ x:176, y:366-10, width:760,
+ text_id:"conclusion_3_a2"
+ });
+ self.add({
+ id:"text8", type:"TextBox",
+ x:94, y:440, width:500, align:"right",
+ text_id:"conclusion_4"
+ });
+
+ // IMAGE
+ self.add({
+ id:"img", type:"ImageBox",
+ src: "assets/conclusion/summary.png",
+ x:10, y:60, width:140, height:350
+ });
+
+ // Button
+ self.add({
+ id:"button", type:"Button", x:615, y:481,
+ text_id:"conclusion_btn", size:"long",
+ message:"slideshow/scratch"
+ });
+
},
onend: function(self){
self.clear();
@@ -11,24 +68,25 @@ SLIDES.push({
onstart: function(self){
// Splash in background
- self.add({ id:"splash", type:"Splash" });
+ self.add({ id:"splash", type:"Splash", blush:true });
// Circular Wordbox
self.add({
id:"text", type:"TextBox",
- x:160, y:10, width:640, height:500, align:"center", size:19,
- text_id:"conclusion"
+ x:160, y:10, width:640, height:500, align:"center",
+ text_id:"outro_1"
});
// Button
self.add({
id:"button", type:"Button", x:385, y:466,
- text_id:"conclusion_button", fontSize:16, upperCase:false,
- message:"slideshow/scratch"
+ text_id:"outro_1_btn",
+ message:"slideshow/next"
});
},
onend: function(self){
+ self.remove("text");
self.remove("button");
}
});
@@ -39,16 +97,37 @@ SLIDES.push({
var o = self.objects;
// Text
- o.text.setTextID("conclusion_2");
+ self.add({
+ id:"text", type:"TextBox",
+ x:160, y:30, width:640, height:500, align:"center", size:22,
+ text_id:"outro_2"
+ });
+ _hide(o.text); _fadeIn(o.text, 100);
+
+ // Photo
+ self.add({
+ id:"img", type:"ImageBox",
+ src: "assets/conclusion/truce.jpg",
+ x:228, y:90, width:500,
+ });
+ _hide(o.img); _fadeIn(o.img, 200);
+
+ // Text 2
+ self.add({
+ id:"text2", type:"TextBox",
+ x:228, y:402, width:500,
+ align:"center", color:"#aaa", size:14,
+ text_id:"outro_2_credits"
+ });
+ _hide(o.text2); _fadeIn(o.text2, 200);
// Button
self.add({
- id:"button", type:"Button", x:385, y:466,
- text_id:"conclusion_button", fontSize:16, upperCase:false,
+ id:"button", type:"Button", x:427, y:466,
+ text_id:"outro_2_btn", size:"short",
message:"slideshow/scratch"
});
-
- // Fade In & Out
+ _hide(o.button); _fadeIn(o.button, 2000);
},
onend: function(self){
diff --git a/js/slides/9_Slides_Credits.js b/js/slides/9_Slides_Credits.js
index 75805d9..4ea8746 100644
--- a/js/slides/9_Slides_Credits.js
+++ b/js/slides/9_Slides_Credits.js
@@ -2,5 +2,12 @@ SLIDES.push({
id: "credits",
onstart: function(self){
self.add({ id:"bg", type:"Background", color:"#222" });
+
+ // Circular Wordbox
+ self.add({
+ id:"text", type:"TextBox",
+ x:160, y:70, width:640, height:500, align:"center",
+ text_id:"credits_beta", color:"#fff"
+ });
}
});
\ No newline at end of file
diff --git a/lang/en.html b/lang/en.html
index 08bc33c..f5c88ba 100644
--- a/lang/en.html
+++ b/lang/en.html
@@ -8,7 +8,7 @@ EVOLUTION
OF TRUST
-playing time: 30 min • by nicky case, july 2017 +playing time: 20 min • by nicky case, july 2017
@@ -22,32 +22,30 @@ PLAY → - - - - +
During World War I, peace broke out.
It was Christmas 1914 on the Western Front.
-Despite strict orders not to chill out with the enemy, British
+Despite strict orders not to chillax with the enemy, British
and German soldiers left their trenches, crossed No Man's Land,
-and gathered together to bury their dead, to exchange gifts, to sing.
+and gathered to bury their dead, exchange gifts, and play games.
Meanwhile: it's 2017, the West has been at peace for decades, and
-we're less trusting than ever. Fewer and fewer people say they trust their
-governments, their media, or even each other. So here's our puzzle:
+by golly, we suck at trust. Over the years,
+fewer and fewer people say they trust their
+institutions, or even each other. So here's our puzzle:
-Why & when do friends become enemies?
-or: Why & when do enemies become friends?
+Why, even in peacetime, do friends become enemies?
+And why, even in wartime, do enemies become friends?
-I think game theory can help explain our epidemic of distrust –
+I think game theory can help explain our epidemic of distrust –
and how we can fix it! So, to understand all this...
-Sure, seems like the right thing to do... OR IS IT?? +Sure, seems like the right thing to do... OR IS IT??
@@ -130,30 +128,30 @@ But if you cheat & they cooperate, you gain three coins at their cost of one
-And that's the dilemma of trust. -You'd both be better off trusting each other, but trust leaves you vulnerable. -But what happens if we can... +And that's our dilemma. +Trust is nice, but it can let others take advantage of you -- or shoot you as you come unarmed out of a trench. +Sometimes, distrust is rational! +But now, what happens if we play this game...
- -
-Now, let's play for real.
-You'll be playing against 5 different opponents, each with their own "personality".
+Now, let's play for real.
+You'll be playing against 5 different opponents, each with their own game "strategy".
With each opponent, you'll play anywhere between 3 to 7 rounds.
+(You won't know in advance when the last round is)
Can you trust them? Or rather... can they trust you?
-Choose your first, real move: +Pick your first, real move. Choose wisely.
@@ -240,8 +238,8 @@ Each character will now play against every other character:
that's 10 paired matches, and 10 rounds per match.
Who do you think will get the highest total score?
-Think carefully about it, and then
-PLACE YOUR BETS:
+Think carefully about it... and then
+PLACE YOUR BETS:
@@ -268,34 +266,41 @@ next match →
- -
-Oh, by the way...
++...You may be skeptical about that Christmas Truce story about the World War I trenches. +Surely that was just a fluke? +
-[trench live & let live stuff] +Yes, the truce was dramatic, but it was neither unique, nor unusual.
-[trench live & let live stuff] +Not every trench joined in the peace, but it was pretty widespread. +Many front-lines came up with the idea independently, and again: despite strict orders.
-[trench live & let live stuff] +And in fact, even before Christmas, several front-lines already had +established an unofficial, secret peace.
-[trench live & let live stuff] +They called it: the "live and let live" system. +Basically, you don't shoot me, I don't shoot you. And this worked, in a lot of places!
-[trench live & let live stuff] +You may still be skeptical. Most soldiers don't spontaneously form peace with the enemy. +What's so special about trench warfare?
-[trench live & let live stuff] +Well, here's what's unique about the trenches: +unlike almost every other form of war, +you have to face the same specific soliders every day.
-[trench live & let live stuff] +It's a repeated game. And that makes all the difference.
-Anyway -- and the winner is... +Anyway. And the winner is...
@@ -309,7 +314,7 @@ Anyway -- and the winner is... Congrats, you placed your bet on the right horse.
-(Sorry, [CHAR].) +(Apologies to your bet, [CHAR].)
Copycat goes by many names. @@ -399,7 +404,7 @@ and their numbers increased by 5.
Alas, Copycat did not win – but at least they didn't do as bad -as Always Cooperate, who got eaten up by Always Cheat, +as Always Cooperate. They got eaten up by Always Cheat, whose numbers have now increased by 5.
@@ -424,7 +429,6 @@ who are nice, but not naive.
-By simply copying the other player's moves, @@ -478,9 +482,6 @@ start the evolution process! stop the evolution process
- - -(Note: occasionally, a few Grudgers may stick around, because when all players except Grudger & Copycat @@ -497,7 +498,7 @@ However...
-Look around. There are jerks in the world.
+Look around. The world's full of total jerkwads.
If Copycat is the strategy in this repeated game of trust that's so powerful --
that even soldiers in World War I trenches independently "evolved" a similar strategy, called "live and let live" --
@@ -544,7 +545,7 @@ once you're done playing around, click:
-As you saw, when people play below some number of rounds,
+As you saw, if you don't play enough rounds, (here: 5 or less)
ALWAYS CHEAT dominates.
In 1985, when Americans were asked how many close friends they had,
@@ -581,31 +582,21 @@ once you're done, click:
-The same thing happens: Always Cheat dominates.
-So even if the reward for getting a "win-win" is still more
-than the punishment for a "lose-lose"...
-if the reward for mutual trust is too low, distrust evolves.
+The same thing happens:
+with a lower "win-win" reward, Always Cheat takes over.
+Game theory has two powerful ideas about this:
-I think, as a culture, we're losing the value of finding "win-wins".
-We're more interested in "win-lose", because viciousness gets views, conflict gets clicks.
-It's live and let die.
-Maybe I'm just overthinking things, maybe I'm just old and shaking my fist at a cloud...
-but don't you feel it? That we've forgotten something?...
+"Zero-sum game". This is the sadly common belief that a gain for "us"
+must come at a loss to "them", and vice versa.
+
+"Non-zero-sum game". This when people realize that by working together,
+you can create a win-win! (or at least, avoid a lose-lose)
+Without the non-zero-sum game, trust cannot evolve.
+
+Speaking of which,
+let's now look at our third & final barrier to the evolution of trust...
-...whatevs i dunno → -
- --Aaaaanyway, now you can change both rules! -(click start to see how, with weird payoffs, the sim -"swings" between Cheats & Cooperates...) -
--Once you're done experimenting with this, -let's look at our final barrier to trust... -
-
Misteaks Mistakes. →
As cool as Copycat is, it has a huge, fatal weakness I haven't mentioned yet. -To understand it, let's say two Copycats are playing against each other: +To understand the problem, let's say two Copycats are playing against each other:
Being "nice" players, both their first moves will be: @@ -638,7 +629,7 @@ But if the other person doesn't think it was an accident...
-OH NO AGAIN
+OH NO TIMES TWO
The other player, being a Copycat, had to retaliate...
-Let's meet some new faces! +Let's meet some new faces! (or, new hats, anyway)
@@ -689,38 +680,104 @@ Alright, let's see how well these peeps do when they... ...play in a tournament →
- -
-Noise Evolution, place your bets.
-At 5% noise
+Let's start with a dozen
+Always Cooperates,
+versus our old winner, the fair Copycat,
+and our three new characters:
+the forgiving Copykitten,
+the dull Simpleton, and
+the silly Random.
+
+Let's say, in each round of a match, players have a 5% chance of making a mistake.
+Who do you think will come out on top?
+Think carefully, then PLACE YOUR BETS:
-Try it, controls to the left +Alright, you bet [CHAR] wins. Let's find out! +Use the controls to your left to start the sim in quick mode, +or go through it step-by-step. +
++You were correct -- +
++Your bet was close, but no cigar --
-Simpleton wins, but let's try... +Simpleton wins! +This is because Simpleton is actually capable of +exploiting Always Cooperate. They both start cooperating, +but if Simpleton makes a mistake and cheats, +since Always Cooperate never retaliates, +it'll keep cheating them.
++Now let's try... +
+
-...different scenario, place your bets again.
+...the same thing as before, except instead of half-Always Cooperate,
+it's half-Always Cheat. It's a much less forgiving,
+more hostile environment.
+
+Who do you think will win now? Think, then PLACE YOUR BETS:
-Try it, controls to the left, again +You bet on [CHAR]. Again, go through the simulation... +
++You were right on the money -- +
++Good guess, but someone else took the prize --
-Ooh, surprising... but is that true if there's a LOT of noise?
+Copykitten wins this time!
+That's surprising that with an even meaner starting population,
+Copykitten,
+a more forgiving version of Copycat,
+was the most successful! (note: Copykitten is so forgiving
+it doesn't even entirely wipe out Copycat. it shares room)
+
+In this case, a bit of "miscommunication" (5% chance of mistake each round) could lead
+to more forgiveness. But is this true for all levels...
+...of miscommunication? +
+-GIVE A SLIDER FOR NOISE. +Use the slider below to change the amount of "miscommunication", then hit START. +At 5%, Copykitten wins. +What happens at 0%? Or 20%? Or 50%? (it only goes up to 50%, +because at that point, every move is a coin flip)
++When you're done playing around, click: +
+-Explain nonlinear barrier, and real life. Also sandbox. -
-
-Explain nonlinear barrier, and real life. Also sandbox.
+The results turn out something like this:
+At 0%, the fair Copycat wins!
+At 1% to 10%, the forgiving Copykitten wins!
+At 10% to 49%: the unfair, unforgiving Always Cheat wins.
+At 50%, nobody wins ever.
+
+This is why "miscommunication" is such an interesting barrier to trust:
+a little bit of it leads to forgiveness,
+but too much and it leads to widespread distrust!
+I think our modern media technology,
+as much as it's helped us increase communication...
+has increased our miscommunication much more.
+
+At last, let's experiment with all the numbers, the knobs and sliders.
+Let's play...
-Teaser for sandbox +...in the Sandbox Mode!
@@ -767,7 +824,7 @@ During each round, there's a [N]% chance a player makes a mistake: ...and once you're done playing around, let's recap:-what we learnt today → +what we learnt today! →
@@ -776,46 +833,73 @@ what we learnt today → -- -TRUST: -- repeated interaction: -- win-win: -- dealing with mistakes: forgive, and try to be clear and honest yourself - -DISTRUST: -- loss of social capital -- win-lose, use versus them, zero-sum -- gleefully punishing even small mistakes - -But above all, there's also... +
+Game theory has shown us the three things we need for the evolution of trust: +
++1. REPEAT INTERACTIONS +
++Trust keeps a relationship going, +but you need the knowledge of possible future repeat interactions before trust can evolve. +
++2. POSSIBLE WIN-WINS +
++You must be playing a non-zero-sum game, +a game where it's at least possible that both players can be better off -- a win-win. +
++3. LOW MISCOMMUNICATION +
++The level of miscommunication can't be too high. +And when there's a little bit of miscommunication, it pays to be more forgiving. +
++Of course, real-world trust is affected by a lot more than this. +there's reputation, moral values, contracts, cultural markers, etc, etc. +And let's not forget...
-...the bigger lesson → +...the biggest lesson. →
-
-Don't hate the player, hate the game.
-
-Game theory lesson.
-
-Short term: game changes players. But don't be cynical
-
-Long term: players change game, from the bottom up -- evolution.
-
-So if we wanna cure our epidemic of distrust,
-and rebuild a trusting & trustworthy civic society, it's up to all of us.
-Let's all learn and act to find win-wins,
-to create repeated interactions,
-(and...)
+
+If there's one big takeaway
+from all of game theory, it's this:
+
+What the game is, defines what the players do.
+Our problem today isn't just that people are losing trust,
+it's that our environment acts against the evolution of trust.
+
+That may seem cynical or naive -- that we're "merely" products of our environment --
+but as game theory reminds us, we are each others' environment.
+In the short run, the game defines the players. But in the long run,
+it's us players who define the game.
+
+So, do what you can to create the conditions necessary to evolve trust.
+Build relationships. Find win-wins. Communicate clearly.
+Maybe then, we can stop firing at each other, get out of our own trenches,
+cross No Man's Land to come together...
+
+and all learn... +
+ +...to live and let live. -
-+"A Christmas Truce between Opposing Trenches" +Illustrated by AC Michael. +Published in The Illustrated London News, January 9, 1915. +
+ +<3
@@ -823,6 +907,25 @@ to create repeated interactions, +
+END OF BETA! Please let me know what you think!
+Because I'm launching this in a few days, I'm looking first and foremost
+for low-level feedback:
+Specific parts which are unclear, confusing, or boring.
+Bad or problematic phrasing of words.
+Typos and grammatical errors.
+Opportunities to add more jokes.
+And so on.
+
+But if you have "high-level" feedback, I'd love to hear that too!
+I won't be able to put them in this time, but for my next project(s),
+I want to know how I can design stuff like this better.
+
+Thank you so much!
+
+<3,
+~ Nicky Case
+