ALL THE WORDS
This commit is contained in:
parent
de0e0e8c95
commit
403be5177e
16 changed files with 477 additions and 255 deletions
BIN
assets/conclusion/summary.png
Normal file
BIN
assets/conclusion/summary.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 35 KiB |
BIN
assets/conclusion/truce.jpg
Normal file
BIN
assets/conclusion/truce.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 318 KiB |
BIN
assets/sounds/evil_laugh.mp3
Normal file
BIN
assets/sounds/evil_laugh.mp3
Normal file
Binary file not shown.
|
@ -7,13 +7,21 @@
|
||||||
"trimmed": false,
|
"trimmed": false,
|
||||||
"spriteSourceSize": {"x":0,"y":0,"w":302,"h":402},
|
"spriteSourceSize": {"x":0,"y":0,"w":302,"h":402},
|
||||||
"sourceSize": {"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": {
|
"meta": {
|
||||||
"app": "Adobe Animate",
|
"app": "Adobe Animate",
|
||||||
"version": "15.2.0.66",
|
"version": "15.2.0.66",
|
||||||
"image": "splash_peep.png",
|
"image": "splash_peep.png",
|
||||||
"format": "RGBA8888",
|
"format": "RGBA8888",
|
||||||
"size": {"w":512,"h":512},
|
"size": {"w":512,"h":1024},
|
||||||
"scale": "1"
|
"scale": "1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 13 KiB |
|
@ -97,11 +97,14 @@ window.onload = function(){
|
||||||
slideSelect.dom.style.display = "block";
|
slideSelect.dom.style.display = "block";
|
||||||
|
|
||||||
// [FOR DEBUGGING]
|
// [FOR DEBUGGING]
|
||||||
//publish("slideshow/next");
|
publish("slideshow/next");
|
||||||
publish("slideshow/scratch", ["noise"]);
|
//publish("slideshow/scratch", ["conclusion"]);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// DEBUGGING
|
||||||
|
//Howler.mute(true);
|
||||||
|
|
||||||
// LOAD REAL THINGS
|
// LOAD REAL THINGS
|
||||||
Loader.loadAssets(
|
Loader.loadAssets(
|
||||||
Loader.manifest,
|
Loader.manifest,
|
||||||
|
|
|
@ -8,6 +8,7 @@ Loader.addToManifest(Loader.manifest,{
|
||||||
// SFX
|
// SFX
|
||||||
coin_insert: "assets/sounds/coin_insert.mp3",
|
coin_insert: "assets/sounds/coin_insert.mp3",
|
||||||
coin_get: "assets/sounds/coin_get.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(){
|
self.remove = function(){
|
||||||
app.destroy();
|
app.destroy();
|
||||||
unlisten(self);
|
unlisten(self);
|
||||||
|
self.playerA.kill();
|
||||||
|
self.playerB.kill();
|
||||||
_remove(self);
|
_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.P) self.face.gotoAndStop(7); // Punishment Face
|
||||||
if(self.payoff==PD.PAYOFFS.T) self.face.gotoAndStop(10); // Temptation 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){
|
if(self.payoff==PD.PAYOFFS.T){
|
||||||
_isHopping = true;
|
_isHopping = true;
|
||||||
}
|
}
|
||||||
|
@ -584,6 +595,16 @@ function IteratedPeep(config){
|
||||||
self.animationDeferred.resolve();
|
self.animationDeferred.resolve();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// KILL
|
||||||
|
self.kill = function(){
|
||||||
|
// Remove ALL tweens
|
||||||
|
Tween.removeTweens(self.animated);
|
||||||
|
Tween.removeTweens(self.coin);
|
||||||
|
for(var i=0;i<self.payoffCoins.length;i++){
|
||||||
|
Tween.removeTweens(self.payoffCoins[i]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -268,12 +268,26 @@ function SandboxUI(config){
|
||||||
}
|
}
|
||||||
// If positive, add one starting from TOP, skipping anchor.
|
// If positive, add one starting from TOP, skipping anchor.
|
||||||
// (UNLESS IT'S ZERO)
|
// (UNLESS IT'S ZERO)
|
||||||
|
var everyoneElseWasZero = true;
|
||||||
if(diff>0){
|
if(diff>0){
|
||||||
for(var i=0; i<Tournament.INITIAL_AGENTS.length && diff>0; i++){
|
for(var i=0; i<Tournament.INITIAL_AGENTS.length && diff>0; i++){
|
||||||
// do NOT adjust anchor.
|
// do NOT adjust anchor.
|
||||||
var conf = Tournament.INITIAL_AGENTS[i];
|
var conf = Tournament.INITIAL_AGENTS[i];
|
||||||
if(conf.strategy==peepID) continue;
|
if(conf.strategy==peepID) continue;
|
||||||
if(conf.count==0) continue; // DO NOT ADD IF ZERO
|
if(conf.count==0) continue; // DO NOT ADD IF ZERO
|
||||||
|
everyoneWasZero = false;
|
||||||
|
conf.count++; // ADD
|
||||||
|
diff--; // yay
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ...edge case. fine w/e
|
||||||
|
if(everyoneElseWasZero){
|
||||||
|
for(var i=0; i<Tournament.INITIAL_AGENTS.length && diff>0; i++){
|
||||||
|
// do NOT adjust anchor.
|
||||||
|
var conf = Tournament.INITIAL_AGENTS[i];
|
||||||
|
if(conf.strategy==peepID) continue;
|
||||||
|
// if(conf.count==0) continue; // DO NOT ADD IF ZERO
|
||||||
|
// everyoneWasZero = false;
|
||||||
conf.count++; // ADD
|
conf.count++; // ADD
|
||||||
diff--; // yay
|
diff--; // yay
|
||||||
}
|
}
|
||||||
|
@ -302,12 +316,12 @@ function SandboxUI(config){
|
||||||
page.appendChild(_makeLabel("sandbox_payoffs", {x:0, y:0, w:433}));
|
page.appendChild(_makeLabel("sandbox_payoffs", {x:0, y:0, w:433}));
|
||||||
|
|
||||||
// PAYOFFS
|
// PAYOFFS
|
||||||
var payoffsUI = new PayoffsUI({x:64, y:47, slideshow:self});
|
var payoffsUI = new PayoffsUI({x:84, y:41, scale:0.9, slideshow:self});
|
||||||
page.appendChild(payoffsUI.dom);
|
page.appendChild(payoffsUI.dom);
|
||||||
|
|
||||||
// Reset
|
// Reset
|
||||||
var resetPayoffs = new Button({
|
var resetPayoffs = new Button({
|
||||||
x:320, y:300, text_id:"sandbox_reset_payoffs", size:"short",
|
x:240, y:300, text_id:"sandbox_reset_payoffs",
|
||||||
message:"pd/defaultPayoffs"
|
message:"pd/defaultPayoffs"
|
||||||
});
|
});
|
||||||
page.appendChild(resetPayoffs.dom);
|
page.appendChild(resetPayoffs.dom);
|
||||||
|
|
|
@ -35,7 +35,7 @@ function Splash(config){
|
||||||
// PEEPS
|
// PEEPS
|
||||||
var peeps = [];
|
var peeps = [];
|
||||||
self.addPeep = function(x, y){
|
self.addPeep = function(x, y){
|
||||||
var peep = new SplashPeep({ x:x, y:y, app:app });
|
var peep = new SplashPeep({ x:x, y:y, app:app, blush:config.blush });
|
||||||
peeps.push(peep);
|
peeps.push(peep);
|
||||||
peepsContainer.addChild(peep.graphics);
|
peepsContainer.addChild(peep.graphics);
|
||||||
};
|
};
|
||||||
|
@ -121,6 +121,7 @@ function SplashPeep(config){
|
||||||
// Graphics!
|
// Graphics!
|
||||||
var g = _makeMovieClip("splash_peep", {scale:0.3});
|
var g = _makeMovieClip("splash_peep", {scale:0.3});
|
||||||
self.graphics = g;
|
self.graphics = g;
|
||||||
|
if(config.blush) g.gotoAndStop(1);
|
||||||
if(Math.random()<0.5) g.scale.x*=-1; // Flip?
|
if(Math.random()<0.5) g.scale.x*=-1; // Flip?
|
||||||
|
|
||||||
// Them variables...
|
// Them variables...
|
||||||
|
|
|
@ -79,6 +79,9 @@ SLIDES.push({
|
||||||
_hide(o.btnCheat); _fadeIn(o.btnCheat, 150+1200);
|
_hide(o.btnCheat); _fadeIn(o.btnCheat, 150+1200);
|
||||||
_hide(o.btnCooperate); _fadeIn(o.btnCooperate, 150+1200);
|
_hide(o.btnCooperate); _fadeIn(o.btnCooperate, 150+1200);
|
||||||
|
|
||||||
|
},
|
||||||
|
onend: function(self){
|
||||||
|
self.remove("btmWords");
|
||||||
}
|
}
|
||||||
|
|
||||||
},{
|
},{
|
||||||
|
@ -92,19 +95,21 @@ SLIDES.push({
|
||||||
|
|
||||||
// Text
|
// Text
|
||||||
var t = o.topWords;
|
var t = o.topWords;
|
||||||
var b = o.btmWords;
|
|
||||||
if(_.answer=="COOPERATE"){
|
if(_.answer=="COOPERATE"){
|
||||||
t.setText(Words.get("oneoff_2_cooperated")+"<br>"+Words.get("oneoff_2_top"));
|
t.setText(Words.get("oneoff_2_cooperated")+"<br>"+Words.get("oneoff_2_top"));
|
||||||
}else{
|
}else{
|
||||||
t.setText(Words.get("oneoff_2_cheated")+"<br>"+Words.get("oneoff_2_top"));
|
t.setText(Words.get("oneoff_2_cheated")+"<br>"+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
|
// Replace button
|
||||||
self.remove("btnCheat");
|
self.remove("btnCheat");
|
||||||
self.remove("btnCooperate");
|
self.remove("btnCooperate");
|
||||||
self.add({
|
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",
|
text_id:"oneoff_button_next",
|
||||||
message:"slideshow/next"
|
message:"slideshow/next"
|
||||||
});
|
});
|
||||||
|
|
|
@ -84,6 +84,12 @@ SLIDES.push({
|
||||||
|
|
||||||
var o = self.objects;
|
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 showTournament = function(num){
|
||||||
|
|
||||||
var words = "";
|
var words = "";
|
||||||
|
@ -124,13 +130,17 @@ SLIDES.push({
|
||||||
match_header = match_header.replace(/\[B\]/g, "<span class='"+charB+"'>"+scoreB+"</span>");
|
match_header = match_header.replace(/\[B\]/g, "<span class='"+charB+"'>"+scoreB+"</span>");
|
||||||
words += match_header+"<br><br><br>";
|
words += match_header+"<br><br><br>";
|
||||||
|
|
||||||
// Extra info
|
|
||||||
words += Words.get("tournament_"+(num+1));
|
|
||||||
|
|
||||||
// PUT IN THE WORDS
|
// PUT IN THE WORDS
|
||||||
o.text.setText(words);
|
o.text.setText(words);
|
||||||
_hide(o.text); _fadeIn(o.text, 100);
|
_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?
|
// FINAL MATCH?
|
||||||
if(_matchNumber==9){
|
if(_matchNumber==9){
|
||||||
_switchButton();
|
_switchButton();
|
||||||
|
@ -138,10 +148,6 @@ SLIDES.push({
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// MATCH NUMBER!
|
|
||||||
_matchNumber = 0;
|
|
||||||
showTournament(_matchNumber);
|
|
||||||
|
|
||||||
// "Next Match" Button
|
// "Next Match" Button
|
||||||
self.add({
|
self.add({
|
||||||
id:"button", type:"Button",
|
id:"button", type:"Button",
|
||||||
|
@ -158,10 +164,14 @@ SLIDES.push({
|
||||||
publish("slideshow/next");
|
publish("slideshow/next");
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
_hide(o.button); _fadeIn(o.button, 100+500);
|
|
||||||
|
// MATCH NUMBER!
|
||||||
|
_matchNumber = 0;
|
||||||
|
showTournament(_matchNumber);
|
||||||
|
|
||||||
},
|
},
|
||||||
onend: function(self){
|
onend: function(self){
|
||||||
|
self.remove("text_extra");
|
||||||
self.remove("button");
|
self.remove("button");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -286,104 +286,14 @@ SLIDES.push({
|
||||||
// Worse...
|
// Worse...
|
||||||
self.add({
|
self.add({
|
||||||
id:"next", type:"Button",
|
id:"next", type:"Button",
|
||||||
x:0, y:410, size:"long",
|
x:0, y:450, size:"long",
|
||||||
text_id:"distrust_5_btn",
|
text_id:"distrust_5_btn",
|
||||||
message: "slideshow/next"
|
message: "slideshow/scratch"
|
||||||
});
|
});
|
||||||
_hide(o.next); _fadeIn(o.next, 400);
|
_hide(o.next); _fadeIn(o.next, 400);
|
||||||
|
|
||||||
},
|
},
|
||||||
onend: function(self){
|
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("<b>"+words+"</b>");
|
|
||||||
};
|
|
||||||
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(_);
|
||||||
unlisten(_.misc);
|
unlisten(_.misc);
|
||||||
self.clear();
|
self.clear();
|
||||||
|
|
|
@ -153,7 +153,9 @@ SLIDES.push({
|
||||||
|
|
||||||
// Tournament: simpleton wins
|
// Tournament: simpleton wins
|
||||||
SLIDES.push({
|
SLIDES.push({
|
||||||
|
|
||||||
//id:"noise",// [FOR DEBUGGING]
|
//id:"noise",// [FOR DEBUGGING]
|
||||||
|
|
||||||
onstart: function(self){
|
onstart: function(self){
|
||||||
|
|
||||||
var o = self.objects;
|
var o = self.objects;
|
||||||
|
@ -214,7 +216,8 @@ SLIDES.push({
|
||||||
var o = self.objects;
|
var o = self.objects;
|
||||||
|
|
||||||
// Words
|
// Words
|
||||||
o.text.setTextID("noise_evo_2");
|
var words = Words.get("noise_evo_2").replace(/\[CHAR\]/g, "<span class='"+_.answer+"'>"+Words.get("label_"+_.answer)+"</span>");
|
||||||
|
o.text.setText(words);
|
||||||
_hide(o.text); _fadeIn(o.text, 100);
|
_hide(o.text); _fadeIn(o.text, 100);
|
||||||
|
|
||||||
/////////////////////////////////////////
|
/////////////////////////////////////////
|
||||||
|
@ -260,13 +263,35 @@ SLIDES.push({
|
||||||
if(step=="reproduce"){
|
if(step=="reproduce"){
|
||||||
reproduceSteps++;
|
reproduceSteps++;
|
||||||
if(reproduceSteps==6){
|
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){
|
onend: function(self){
|
||||||
|
self.remove("text_next");
|
||||||
|
self.remove("btn_next");
|
||||||
unlisten(_.misc);
|
unlisten(_.misc);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -340,7 +365,8 @@ SLIDES.push({
|
||||||
o.playButton.setText("label_start");
|
o.playButton.setText("label_start");
|
||||||
|
|
||||||
// Words
|
// Words
|
||||||
o.text.setTextID("noise_evo_4");
|
var words = Words.get("noise_evo_4").replace(/\[CHAR\]/g, "<span class='"+_.answer+"'>"+Words.get("label_"+_.answer)+"</span>");
|
||||||
|
o.text.setText(words);
|
||||||
_hide(o.text); _fadeIn(o.text, 100);
|
_hide(o.text); _fadeIn(o.text, 100);
|
||||||
|
|
||||||
/////////////////////////////////////////
|
/////////////////////////////////////////
|
||||||
|
@ -353,13 +379,34 @@ SLIDES.push({
|
||||||
if(step=="reproduce"){
|
if(step=="reproduce"){
|
||||||
reproduceSteps++;
|
reproduceSteps++;
|
||||||
if(reproduceSteps==8){
|
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){
|
onend: function(self){
|
||||||
|
self.remove("text_next");
|
||||||
|
self.remove("btn_next");
|
||||||
unlisten(_.misc);
|
unlisten(_.misc);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -368,6 +415,7 @@ SLIDES.push({
|
||||||
onstart: function(self){
|
onstart: function(self){
|
||||||
|
|
||||||
var o = self.objects;
|
var o = self.objects;
|
||||||
|
_.misc = {};
|
||||||
|
|
||||||
// Words
|
// Words
|
||||||
o.text.setTextID("noise_evo_5");
|
o.text.setTextID("noise_evo_5");
|
||||||
|
@ -378,7 +426,7 @@ SLIDES.push({
|
||||||
|
|
||||||
// Slider!
|
// Slider!
|
||||||
var x = 510;
|
var x = 510;
|
||||||
var y = 100;
|
var y = 200;
|
||||||
self.add({
|
self.add({
|
||||||
id:"noiseLabel", type:"TextBox",
|
id:"noiseLabel", type:"TextBox",
|
||||||
x:x, y:y, width:450, noSelect:true
|
x:x, y:y, width:450, noSelect:true
|
||||||
|
@ -389,12 +437,11 @@ SLIDES.push({
|
||||||
min:0.00, max:0.50, step:0.01,
|
min:0.00, max:0.50, step:0.01,
|
||||||
message: "rules/noise"
|
message: "rules/noise"
|
||||||
});
|
});
|
||||||
_.misc = {};
|
|
||||||
var _updateLabel = function(value){
|
var _updateLabel = function(value){
|
||||||
value = Math.round(value*100);
|
value = Math.round(value*100);
|
||||||
var words = Words.get("sandbox_rules_3");
|
var words = Words.get("sandbox_rules_3");
|
||||||
words = words.replace(/\[N\]/g, value+""); // replace [N] with the number value
|
words = words.replace(/\[N\]/g, value+""); // replace [N] with the number value
|
||||||
o.noiseLabel.setText(words);
|
o.noiseLabel.setText("<i>"+words+"</i>");
|
||||||
};
|
};
|
||||||
listen(_.misc, "rules/noise", function(value){
|
listen(_.misc, "rules/noise", function(value){
|
||||||
_updateLabel(value);
|
_updateLabel(value);
|
||||||
|
@ -402,22 +449,30 @@ SLIDES.push({
|
||||||
});
|
});
|
||||||
o.noiseSlider.setValue(0.05);
|
o.noiseSlider.setValue(0.05);
|
||||||
_updateLabel(0.05);
|
_updateLabel(0.05);
|
||||||
|
_hide(o.noiseLabel); _fadeIn(o.noiseLabel, 300);
|
||||||
|
_hide(o.noiseSlider); _fadeIn(o.noiseSlider, 300);
|
||||||
|
|
||||||
// Continue whenever you want to...
|
// Continue whenever you want to...
|
||||||
var x = 510;
|
listen(_.misc, "tournament/autoplay/start",function(){
|
||||||
var y = 300;
|
if(_showContinue) _showContinue();
|
||||||
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"
|
|
||||||
});
|
});
|
||||||
|
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){
|
onend: function(self){
|
||||||
|
@ -426,6 +481,7 @@ SLIDES.push({
|
||||||
self.remove("noiseSlider");
|
self.remove("noiseSlider");
|
||||||
self.remove("continueLabel");
|
self.remove("continueLabel");
|
||||||
self.remove("continueButton");
|
self.remove("continueButton");
|
||||||
|
self.remove("text");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -435,7 +491,11 @@ SLIDES.push({
|
||||||
var o = self.objects;
|
var o = self.objects;
|
||||||
|
|
||||||
// Words
|
// 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);
|
_hide(o.text); _fadeIn(o.text, 100);
|
||||||
|
|
||||||
// Next button
|
// Next button
|
||||||
|
@ -444,6 +504,7 @@ SLIDES.push({
|
||||||
text_id:"noise_evo_6_btn", size:"long",
|
text_id:"noise_evo_6_btn", size:"long",
|
||||||
message:"slideshow/scratch"
|
message:"slideshow/scratch"
|
||||||
});
|
});
|
||||||
|
_hide(o.button); _fadeIn(o.button, 500);
|
||||||
|
|
||||||
},
|
},
|
||||||
onend: function(self){
|
onend: function(self){
|
||||||
|
|
|
@ -1,6 +1,63 @@
|
||||||
SLIDES.push({
|
SLIDES.push({
|
||||||
id: "conclusion",
|
id: "conclusion",
|
||||||
onstart: function(self){
|
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){
|
onend: function(self){
|
||||||
self.clear();
|
self.clear();
|
||||||
|
@ -11,24 +68,25 @@ SLIDES.push({
|
||||||
onstart: function(self){
|
onstart: function(self){
|
||||||
|
|
||||||
// Splash in background
|
// Splash in background
|
||||||
self.add({ id:"splash", type:"Splash" });
|
self.add({ id:"splash", type:"Splash", blush:true });
|
||||||
|
|
||||||
// Circular Wordbox
|
// Circular Wordbox
|
||||||
self.add({
|
self.add({
|
||||||
id:"text", type:"TextBox",
|
id:"text", type:"TextBox",
|
||||||
x:160, y:10, width:640, height:500, align:"center", size:19,
|
x:160, y:10, width:640, height:500, align:"center",
|
||||||
text_id:"conclusion"
|
text_id:"outro_1"
|
||||||
});
|
});
|
||||||
|
|
||||||
// Button
|
// Button
|
||||||
self.add({
|
self.add({
|
||||||
id:"button", type:"Button", x:385, y:466,
|
id:"button", type:"Button", x:385, y:466,
|
||||||
text_id:"conclusion_button", fontSize:16, upperCase:false,
|
text_id:"outro_1_btn",
|
||||||
message:"slideshow/scratch"
|
message:"slideshow/next"
|
||||||
});
|
});
|
||||||
|
|
||||||
},
|
},
|
||||||
onend: function(self){
|
onend: function(self){
|
||||||
|
self.remove("text");
|
||||||
self.remove("button");
|
self.remove("button");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -39,16 +97,37 @@ SLIDES.push({
|
||||||
var o = self.objects;
|
var o = self.objects;
|
||||||
|
|
||||||
// Text
|
// 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
|
// Button
|
||||||
self.add({
|
self.add({
|
||||||
id:"button", type:"Button", x:385, y:466,
|
id:"button", type:"Button", x:427, y:466,
|
||||||
text_id:"conclusion_button", fontSize:16, upperCase:false,
|
text_id:"outro_2_btn", size:"short",
|
||||||
message:"slideshow/scratch"
|
message:"slideshow/scratch"
|
||||||
});
|
});
|
||||||
|
_hide(o.button); _fadeIn(o.button, 2000);
|
||||||
// Fade In & Out
|
|
||||||
|
|
||||||
},
|
},
|
||||||
onend: function(self){
|
onend: function(self){
|
||||||
|
|
|
@ -2,5 +2,12 @@ SLIDES.push({
|
||||||
id: "credits",
|
id: "credits",
|
||||||
onstart: function(self){
|
onstart: function(self){
|
||||||
self.add({ id:"bg", type:"Background", color:"#222" });
|
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"
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
333
lang/en.html
333
lang/en.html
|
@ -8,7 +8,7 @@ EVOLUTION<br>
|
||||||
<span style="font-size:0.75em">OF TRUST</span>
|
<span style="font-size:0.75em">OF TRUST</span>
|
||||||
</p>
|
</p>
|
||||||
<p id="subtitle">
|
<p id="subtitle">
|
||||||
playing time: 30 min • by nicky case, july 2017
|
playing time: 20 min • by nicky case, july 2017
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p id="loading">
|
<p id="loading">
|
||||||
|
@ -22,32 +22,30 @@ PLAY →
|
||||||
<!-- - - - - - INTRO! - - - - - - - - -->
|
<!-- - - - - - INTRO! - - - - - - - - -->
|
||||||
<!-- - - - - - - - - - - - - - - - - -->
|
<!-- - - - - - - - - - - - - - - - - -->
|
||||||
|
|
||||||
<!-- TODO: Focus ONLY on social trust, not governments -->
|
|
||||||
<!-- TODO: Also, strong early humor. -->
|
<!-- TODO: Also, strong early humor. -->
|
||||||
<!-- TODO: "You guys, it's time for some game theory". -->
|
<!-- TODO: mention "game theory" early again... -->
|
||||||
<!-- TODO: "live and let live". -->
|
|
||||||
<!-- TODO: it's sometimes RATIONAL to distrust: loop of trust & trustworthiness. -->
|
|
||||||
|
|
||||||
<p id="intro">
|
<p id="intro">
|
||||||
During World War I, peace broke out.
|
During World War I, peace broke out.
|
||||||
<br><br>
|
<br><br>
|
||||||
|
|
||||||
It was Christmas 1914 on the Western Front.<br>
|
It was Christmas 1914 on the Western Front.<br>
|
||||||
Despite strict orders <i>not</i> to chill out with the enemy, British<br>
|
Despite strict orders <i>not</i> to chillax with the enemy, British<br>
|
||||||
and German soldiers left their trenches, crossed No Man's Land,<br>
|
and German soldiers left their trenches, crossed No Man's Land,<br>
|
||||||
and gathered together to bury their dead, to exchange gifts, to sing.
|
and gathered to bury their dead, exchange gifts, and play games.
|
||||||
<br><br>
|
<br><br>
|
||||||
|
|
||||||
Meanwhile: it's 2017, the West has been at peace for decades, and<br>
|
Meanwhile: it's 2017, the West has been at peace for decades, and<br>
|
||||||
we're less trusting than ever. Fewer and fewer people say they trust their<br>
|
by golly, we <i>suck</i> at trust. Over the years,
|
||||||
governments, their media, or even <i>each other</i>. So here's our puzzle:
|
fewer and fewer people say they trust their
|
||||||
|
institutions, or even <i>each other</i>. So here's our puzzle:
|
||||||
<br><br>
|
<br><br>
|
||||||
|
|
||||||
<b>Why & when do friends become enemies?<br>
|
<b>Why, even in peacetime, do friends become enemies?<br>
|
||||||
or: Why & when do enemies become friends?</b>
|
And why, even in wartime, do enemies become friends?</b>
|
||||||
<br><br>
|
<br><br>
|
||||||
|
|
||||||
I think game theory can help explain our epidemic of distrust –<br>
|
I think <b>game theory</b> can help explain our epidemic of distrust –<br>
|
||||||
and how we can fix it! So, to understand all this...
|
and how we can fix it! So, to understand all this...
|
||||||
</p>
|
</p>
|
||||||
<p id="intro_button">
|
<p id="intro_button">
|
||||||
|
@ -120,7 +118,7 @@ Wow, that's mean... and also the correct answer!
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p id="oneoff_2_cooperated">
|
<p id="oneoff_2_cooperated">
|
||||||
Sure, seems like the right thing to do... <i>OR IS IT??</i>
|
Sure, seems like the right thing to do... <b>OR IS IT??</b>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p id="oneoff_2_top">
|
<p id="oneoff_2_top">
|
||||||
|
@ -130,30 +128,30 @@ But if you cheat & they cooperate, you gain three coins at their cost of one
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p id="oneoff_2_btm">
|
<p id="oneoff_2_btm">
|
||||||
And <i>that's</i> the dilemma of trust.
|
And <i>that's</i> our dilemma.
|
||||||
You'd both be better off trusting each other, but trust leaves you vulnerable.
|
Trust is nice, but it can let others take advantage of you -- or shoot you as you come unarmed out of a trench.
|
||||||
But what happens if we can...
|
Sometimes, distrust <i>is</i> rational!
|
||||||
|
But now, what happens if we play this game...
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p id="oneoff_button_next">
|
<p id="oneoff_button_next">
|
||||||
...play more than once? →
|
...more than once? →
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<!-- - - - - - - - - - - - - - - - - -->
|
<!-- - - - - - - - - - - - - - - - - -->
|
||||||
<!-- - - - - - ITERATED - - - - - - - -->
|
<!-- - - - - - ITERATED - - - - - - - -->
|
||||||
<!-- - - - - - - - - - - - - - - - - -->
|
<!-- - - - - - - - - - - - - - - - - -->
|
||||||
|
|
||||||
<!-- TO DO: WEAVE IN MORE ABOUT TRENCHES. "CHOOSE WISELY" -->
|
|
||||||
|
|
||||||
<p id="iterated_intro_top">
|
<p id="iterated_intro_top">
|
||||||
<b>Now, let's play for real.</b><br>
|
<b>Now, let's play for real.</b>
|
||||||
You'll be playing against 5 different opponents, each with their own "personality".
|
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.
|
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 <i>you?</i>
|
Can you trust them? Or rather... can they trust <i>you?</i>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p id="iterated_intro_btm">
|
<p id="iterated_intro_btm">
|
||||||
Choose your first, <b>real</b> move:
|
Pick your first, <i>real</i> move. <b>Choose wisely.</b>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p id="iterated_info_1">
|
<p id="iterated_info_1">
|
||||||
|
@ -240,8 +238,8 @@ Each character will now play against every other character:
|
||||||
that's 10 paired matches, and 10 rounds per match.
|
that's 10 paired matches, and 10 rounds per match.
|
||||||
<br><br>
|
<br><br>
|
||||||
Who do you think will get the highest <i>total</i> score?
|
Who do you think will get the highest <i>total</i> score?
|
||||||
Think carefully about it, and then<br>
|
<b>Think carefully about it... and then
|
||||||
<b>PLACE YOUR BETS:</b>
|
PLACE YOUR BETS:</b>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p id="tournament_intro">
|
<p id="tournament_intro">
|
||||||
|
@ -268,34 +266,41 @@ next match →
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p id="tournament_1">
|
<p id="tournament_1">
|
||||||
|
|
||||||
</p>
|
|
||||||
<p id="tournament_2">
|
|
||||||
Oh, by the way...
|
Oh, by the way...
|
||||||
</p>
|
</p>
|
||||||
|
<p id="tournament_2">
|
||||||
|
...You may be skeptical about that Christmas Truce story about the World War I trenches.
|
||||||
|
Surely that was just a fluke?
|
||||||
|
</p>
|
||||||
<p id="tournament_3">
|
<p id="tournament_3">
|
||||||
[trench live & let live stuff]
|
Yes, the truce was dramatic, but it was <i>neither unique, nor unusual</i>.
|
||||||
</p>
|
</p>
|
||||||
<p id="tournament_4">
|
<p id="tournament_4">
|
||||||
[trench live & let live stuff]
|
Not <i>every</i> trench joined in the peace, but it was pretty widespread.
|
||||||
|
Many front-lines came up with the idea independently, and again: <i>despite</i> strict orders.
|
||||||
</p>
|
</p>
|
||||||
<p id="tournament_5">
|
<p id="tournament_5">
|
||||||
[trench live & let live stuff]
|
And in fact, even <i>before</i> Christmas, several front-lines already <i>had</i>
|
||||||
|
established an unofficial, secret peace.
|
||||||
</p>
|
</p>
|
||||||
<p id="tournament_6">
|
<p id="tournament_6">
|
||||||
[trench live & let live stuff]
|
They called it: <b>the "live and let live" system.</b>
|
||||||
|
Basically, you don't shoot me, I don't shoot you. And this worked, in a lot of places!
|
||||||
</p>
|
</p>
|
||||||
<p id="tournament_7">
|
<p id="tournament_7">
|
||||||
[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 <i>trench</i> warfare?
|
||||||
</p>
|
</p>
|
||||||
<p id="tournament_8">
|
<p id="tournament_8">
|
||||||
[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 <i>specific soliders</i> every day.
|
||||||
</p>
|
</p>
|
||||||
<p id="tournament_9">
|
<p id="tournament_9">
|
||||||
[trench live & let live stuff]
|
<b>It's a repeated game.</b> And that makes <i>all</i> the difference.
|
||||||
</p>
|
</p>
|
||||||
<p id="tournament_10">
|
<p id="tournament_10">
|
||||||
Anyway -- and the winner is...
|
Anyway. And the winner is...
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p id="the_winner_is">
|
<p id="the_winner_is">
|
||||||
|
@ -309,7 +314,7 @@ Anyway -- and the winner is...
|
||||||
Congrats, you placed your bet on the right horse.
|
Congrats, you placed your bet on the right horse.
|
||||||
</p>
|
</p>
|
||||||
<p id="tournament_winner_2_nay">
|
<p id="tournament_winner_2_nay">
|
||||||
(Sorry, [CHAR].)
|
(Apologies to your bet, [CHAR].)
|
||||||
</p>
|
</p>
|
||||||
<p id="tournament_winner_3">
|
<p id="tournament_winner_3">
|
||||||
<span class="tft">Copycat</span> goes by many names.
|
<span class="tft">Copycat</span> goes by many names.
|
||||||
|
@ -399,7 +404,7 @@ and their numbers increased by 5.
|
||||||
</p>
|
</p>
|
||||||
<p id="evo_3_tft">
|
<p id="evo_3_tft">
|
||||||
Alas, <span class="tft">Copycat</span> did not win – but at least they didn't do as bad
|
Alas, <span class="tft">Copycat</span> did not win – but at least they didn't do as bad
|
||||||
as <span class="all_c">Always Cooperate</span>, who got eaten up by <span class="all_d">Always Cheat</span>,
|
as <span class="all_c">Always Cooperate</span>. They got eaten up by <span class="all_d">Always Cheat</span>,
|
||||||
whose numbers have now increased by 5.
|
whose numbers have now increased by 5.
|
||||||
</p>
|
</p>
|
||||||
<p id="evo_3">
|
<p id="evo_3">
|
||||||
|
@ -424,7 +429,6 @@ who <i>are</i> nice, but not naive.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<!-- TODO: Freeman-Dyson???? -->
|
<!-- TODO: Freeman-Dyson???? -->
|
||||||
<!-- TODO: (other strategies will be introduced later) -->
|
|
||||||
|
|
||||||
<p id="evo_7">
|
<p id="evo_7">
|
||||||
By simply copying the other player's moves,
|
By simply copying the other player's moves,
|
||||||
|
@ -478,9 +482,6 @@ start the evolution process!
|
||||||
stop the evolution process
|
stop the evolution process
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<!-- More reference to game theory earlier? -->
|
|
||||||
<!-- TODO: More "me" and "I"??? -->
|
|
||||||
|
|
||||||
<p id="evo_10_followup">
|
<p id="evo_10_followup">
|
||||||
(Note: occasionally, a few <span class="grudge">Grudgers</span> may stick around,
|
(Note: occasionally, a few <span class="grudge">Grudgers</span> may stick around,
|
||||||
because when all players except <span class="grudge">Grudger</span> & <span class="tft">Copycat</span>
|
because when all players except <span class="grudge">Grudger</span> & <span class="tft">Copycat</span>
|
||||||
|
@ -497,7 +498,7 @@ However...
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p id="evo_11">
|
<p id="evo_11">
|
||||||
Look around. There are jerks in the world.
|
Look around. The world's full of total jerkwads.
|
||||||
<br><br>
|
<br><br>
|
||||||
If <span class="tft">Copycat</span> is the strategy in this repeated game of trust that's so powerful --
|
If <span class="tft">Copycat</span> 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" --
|
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:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p id="distrust_3">
|
<p id="distrust_3">
|
||||||
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)
|
||||||
<span class="all_d">ALWAYS CHEAT</span> dominates.
|
<span class="all_d">ALWAYS CHEAT</span> dominates.
|
||||||
<br><br>
|
<br><br>
|
||||||
In 1985, when Americans were asked how many close friends they had,
|
In 1985, when Americans were asked how many close friends they had,
|
||||||
|
@ -581,31 +582,21 @@ once you're done, click:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p id="distrust_5">
|
<p id="distrust_5">
|
||||||
The same thing happens: <span class="all_d">Always Cheat</span> dominates.
|
The same thing happens:
|
||||||
So even if the reward for getting a "win-win" is still <i>more</i>
|
with a lower "win-win" reward, <span class="all_d">Always Cheat</span> takes over.
|
||||||
than the punishment for a "lose-lose"...
|
Game theory has two powerful ideas about this:
|
||||||
<b>if the reward for mutual trust is <i>too</i> low, distrust evolves.</b>
|
|
||||||
<br><br>
|
<br><br>
|
||||||
I think, as a culture, we're losing the value of finding "win-wins".
|
<b>"Zero-sum game".</b> This is the sadly common belief that a gain for "us"
|
||||||
We're more interested in "win-lose", because viciousness gets views, conflict gets clicks.
|
<i>must</i> come at a loss to "them", and vice versa.
|
||||||
It's live and let <i>die.</i>
|
<br><br>
|
||||||
Maybe I'm just overthinking things, maybe I'm just old and shaking my fist at a cloud...
|
<b>"Non-zero-sum game".</b> This when people realize that by working together,
|
||||||
but don't you feel it? That we've forgotten something?...
|
you can create a win-win! (or at least, avoid a lose-lose)
|
||||||
|
Without the non-zero-sum game, <i>trust cannot evolve.</i>
|
||||||
|
<br><br>
|
||||||
|
Speaking of which,
|
||||||
|
let's now look at our third & final barrier to the evolution of trust...
|
||||||
</p>
|
</p>
|
||||||
<p id="distrust_5_btn">
|
<p id="distrust_5_btn">
|
||||||
...whatevs i dunno →
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p id="distrust_6">
|
|
||||||
Aaaaanyway, now you can change <i>both</i> rules!
|
|
||||||
(click <b>start</b> to see how, with weird payoffs, the sim
|
|
||||||
"swings" between <span class="all_d">Cheats</span> & <span class="all_c">Cooperates</span>...)
|
|
||||||
</p>
|
|
||||||
<p id="distrust_6_end">
|
|
||||||
Once you're done experimenting with this,
|
|
||||||
let's look at our final barrier to trust...
|
|
||||||
</p>
|
|
||||||
<p id="distrust_6_btn">
|
|
||||||
<s>Misteaks</s> Mistakes. →
|
<s>Misteaks</s> Mistakes. →
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -615,7 +606,7 @@ let's look at our final barrier to trust...
|
||||||
|
|
||||||
<p id="noise_1">
|
<p id="noise_1">
|
||||||
As cool as <span class="tft">Copycat</span> is, it has a huge, fatal weakness I haven't mentioned yet.
|
As cool as <span class="tft">Copycat</span> is, it has a huge, fatal weakness I haven't mentioned yet.
|
||||||
To understand it, let's say two <span class="tft">Copycats</span> are playing against each other:
|
To understand the problem, let's say two <span class="tft">Copycats</span> are playing against each other:
|
||||||
</p>
|
</p>
|
||||||
<p id="noise_1_end">
|
<p id="noise_1_end">
|
||||||
Being "nice" players, both their first moves will be:
|
Being "nice" players, both their first moves will be:
|
||||||
|
@ -638,7 +629,7 @@ But if the other person doesn't <i>think</i> it was an accident...
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p id="noise_4">
|
<p id="noise_4">
|
||||||
<b>OH NO AGAIN</b>
|
<b>OH NO TIMES TWO</b>
|
||||||
<br>
|
<br>
|
||||||
The other player, being a <span class="tft">Copycat</span>, <i>had</i> to retaliate...
|
The other player, being a <span class="tft">Copycat</span>, <i>had</i> to retaliate...
|
||||||
</p>
|
</p>
|
||||||
|
@ -659,7 +650,7 @@ Tragic. But now, are there <i>other</i> types of players who can...
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p id="noise_characters">
|
<p id="noise_characters">
|
||||||
Let's meet some new faces!
|
Let's meet some new faces! (or, new hats, anyway)
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p id="character_tf2t">
|
<p id="character_tf2t">
|
||||||
|
@ -689,38 +680,104 @@ Alright, let's see how well these peeps do when they...
|
||||||
...play in a tournament →
|
...play in a tournament →
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<!-- fixed 5% chance: winner simpleton, then copykitten -->
|
|
||||||
<!-- Need to simulate first to write words, i dunno -->
|
|
||||||
<p id="noise_evo_1">
|
<p id="noise_evo_1">
|
||||||
Noise Evolution, place your bets.
|
Let's start with a dozen
|
||||||
At <b>5% noise</b>
|
<span class="all_c">Always Cooperates</span>,
|
||||||
|
versus our old winner, the fair <span class="tft">Copycat</span>,
|
||||||
|
and our three new characters:
|
||||||
|
the forgiving <span class="tf2t">Copykitten</span>,
|
||||||
|
the dull <span class="pavlov">Simpleton</span>, and
|
||||||
|
the silly <span class="random">Random</span>.
|
||||||
|
<br><br>
|
||||||
|
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?
|
||||||
|
<b>Think carefully, then PLACE YOUR BETS:</b>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p id="noise_evo_2">
|
<p id="noise_evo_2">
|
||||||
Try it, controls to the left
|
Alright, you bet [CHAR] wins. Let's find out!
|
||||||
|
Use the controls to your left to <b>start</b> the sim in quick mode,
|
||||||
|
or go through it <b>step-by-step</b>.
|
||||||
|
</p>
|
||||||
|
<p id="noise_evo_2_2_correct">
|
||||||
|
You were correct --
|
||||||
|
</p>
|
||||||
|
<p id="noise_evo_2_2_incorrect">
|
||||||
|
Your bet was close, but no cigar --
|
||||||
</p>
|
</p>
|
||||||
<p id="noise_evo_2_2">
|
<p id="noise_evo_2_2">
|
||||||
Simpleton wins, but let's try...
|
<span class="pavlov">Simpleton</span> wins!
|
||||||
|
This is because <span class="pavlov">Simpleton</span> is actually capable of
|
||||||
|
exploiting <span class="all_c">Always Cooperate</span>. They both start cooperating,
|
||||||
|
but if <span class="pavlov">Simpleton</span> makes a mistake and cheats,
|
||||||
|
since <span class="all_c">Always Cooperate</span> never retaliates,
|
||||||
|
<i>it'll keep cheating them</i>.
|
||||||
</p>
|
</p>
|
||||||
|
<p id="noise_evo_2_2_btn">
|
||||||
|
Now let's try...
|
||||||
|
</p>
|
||||||
|
|
||||||
<p id="noise_evo_3">
|
<p id="noise_evo_3">
|
||||||
...different scenario, place your bets again.
|
...the same thing as before, except instead of half-<span class="all_c">Always Cooperate</span>,
|
||||||
|
it's half-<span class="all_d">Always Cheat</span>. It's a much <i>less</i> forgiving,
|
||||||
|
<i>more</i> hostile environment.
|
||||||
|
<br><br>
|
||||||
|
Who do you think will win now? <b>Think, then PLACE YOUR BETS:</b>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p id="noise_evo_4">
|
<p id="noise_evo_4">
|
||||||
Try it, controls to the left, again
|
You bet on [CHAR]. Again, go through the simulation...
|
||||||
|
</p>
|
||||||
|
<p id="noise_evo_4_2_correct">
|
||||||
|
You were right on the money --
|
||||||
|
</p>
|
||||||
|
<p id="noise_evo_4_2_incorrect">
|
||||||
|
Good guess, but someone else took the prize --
|
||||||
</p>
|
</p>
|
||||||
<p id="noise_evo_4_2">
|
<p id="noise_evo_4_2">
|
||||||
Ooh, surprising... but is that true if there's a LOT of noise?
|
<span class="tf2t">Copykitten</span> wins this time!
|
||||||
|
That's surprising that with an even <i>meaner</i> starting population,
|
||||||
|
<span class="tf2t">Copykitten</span>,
|
||||||
|
a <i>more forgiving</i> version of <span class="tft">Copycat</span>,
|
||||||
|
was the most successful! (note: <span class="tf2t">Copykitten</span> is so forgiving
|
||||||
|
it doesn't even <i>entirely</i> wipe out <span class="tft">Copycat</span>. it shares room)
|
||||||
|
<br><br>
|
||||||
|
In this case, a bit of "miscommunication" (5% chance of mistake each round) could lead
|
||||||
|
to more <i>forgiveness</i>. But is this true for <i>all</i> levels...
|
||||||
</p>
|
</p>
|
||||||
|
<p id="noise_evo_4_2_btn">
|
||||||
|
...of miscommunication?
|
||||||
|
</p>
|
||||||
|
|
||||||
<p id="noise_evo_5">
|
<p id="noise_evo_5">
|
||||||
GIVE A SLIDER FOR NOISE.
|
<b>Use the slider below to change the amount of "miscommunication", then hit START.</b>
|
||||||
|
At 5%, <span class="tf2t">Copykitten</span> wins.
|
||||||
|
What happens at 0%? Or 20%? Or 50%? (it only goes up to 50%,
|
||||||
|
because at that point, <i>every</i> move is a coin flip)
|
||||||
</p>
|
</p>
|
||||||
|
<p id="noise_evo_5_continue">
|
||||||
|
When you're done playing around, click:
|
||||||
|
</p>
|
||||||
|
|
||||||
<p id="noise_evo_6">
|
<p id="noise_evo_6">
|
||||||
Explain nonlinear barrier, and real life. Also sandbox.
|
The results turn out something like this:<br>
|
||||||
</p>
|
<b>At 0%,</b> the fair <span class="tft">Copycat</span> wins!
|
||||||
<p id="noise_evo_6_continue">
|
<b>At 1% to 10%,</b> the forgiving <span class="tf2t">Copykitten</span> wins!
|
||||||
Explain nonlinear barrier, and real life. Also sandbox.
|
<b>At 10% to 49%:</b> the unfair, unforgiving <span class="all_d">Always Cheat</span> wins.
|
||||||
|
<b>At 50%,</b> <i>nobody wins ever.</i>
|
||||||
|
<br><br>
|
||||||
|
This is why "miscommunication" is such an interesting barrier to trust:
|
||||||
|
a <i>little</i> bit of it leads to forgiveness,
|
||||||
|
but <i>too much</i> and it leads to widespread distrust!
|
||||||
|
I think our modern media technology,
|
||||||
|
as much as it's helped us <i>increase</i> communication...
|
||||||
|
has increased our <i>miscommunication</i> much more.
|
||||||
|
<br><br>
|
||||||
|
At last, let's experiment with <i>all</i> the numbers, the knobs and sliders.
|
||||||
|
Let's play...
|
||||||
</p>
|
</p>
|
||||||
<p id="noise_evo_6_btn">
|
<p id="noise_evo_6_btn">
|
||||||
Teaser for sandbox
|
...in the Sandbox Mode!
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
@ -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:
|
...and once you're done playing around, let's recap:
|
||||||
</p>
|
</p>
|
||||||
<p id="sandbox_end_btn">
|
<p id="sandbox_end_btn">
|
||||||
what we learnt today →
|
what we learnt today! →
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
@ -776,46 +833,73 @@ what we learnt today →
|
||||||
<!-- - - - - CONCLUSION! - - - - - - -->
|
<!-- - - - - CONCLUSION! - - - - - - -->
|
||||||
<!-- - - - - - - - - - - - - - - - - -->
|
<!-- - - - - - - - - - - - - - - - - -->
|
||||||
|
|
||||||
<p id="conclusion_1">
|
<p id="conclusion_0">
|
||||||
|
Game theory has shown us the three things we need for the evolution of trust:
|
||||||
TRUST:
|
</p>
|
||||||
- repeated interaction:
|
<p id="conclusion_1_a">
|
||||||
- win-win:
|
1. REPEAT INTERACTIONS
|
||||||
- dealing with mistakes: forgive, and try to be clear and honest yourself
|
</p>
|
||||||
|
<p id="conclusion_1_a2">
|
||||||
DISTRUST:
|
Trust keeps a relationship going,
|
||||||
- loss of social capital
|
but you need the knowledge of possible future repeat interactions <i>before</i> trust can evolve.
|
||||||
- win-lose, use versus them, zero-sum
|
</p>
|
||||||
- gleefully punishing even small mistakes
|
<p id="conclusion_2_a">
|
||||||
|
2. POSSIBLE WIN-WINS
|
||||||
But above all, there's also...
|
</p>
|
||||||
|
<p id="conclusion_2_a2">
|
||||||
|
You must be playing a non-zero-sum game,
|
||||||
|
a game where it's at least possible that <i>both</i> players can be better off -- a win-win.
|
||||||
|
</p>
|
||||||
|
<p id="conclusion_3_a">
|
||||||
|
3. LOW MISCOMMUNICATION
|
||||||
|
</p>
|
||||||
|
<p id="conclusion_3_a2">
|
||||||
|
The level of miscommunication can't be <i>too</i> high.
|
||||||
|
And when there's a little bit of miscommunication, it pays to be <i>more</i> forgiving.
|
||||||
|
</p>
|
||||||
|
<p id="conclusion_4">
|
||||||
|
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...
|
||||||
</p>
|
</p>
|
||||||
<p id="conclusion_btn">
|
<p id="conclusion_btn">
|
||||||
...the bigger lesson →
|
...the <i>biggest</i> lesson. →
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p id="conclusion_2">
|
<p id="outro_1">
|
||||||
Don't hate the player, hate the game.
|
If there's one big takeaway<br>
|
||||||
<br>
|
from <i>all</i> of game theory, it's this:
|
||||||
Game theory lesson.
|
<br><br>
|
||||||
<br>
|
<b>What the game is, defines what the players do.</b><br>
|
||||||
Short term: game changes players. But don't be cynical
|
Our problem today isn't just that people are losing trust,<br>
|
||||||
<br>
|
it's that our <i>environment</i> acts against the evolution of trust.
|
||||||
Long term: players change game, from the bottom up -- evolution.
|
<br><br>
|
||||||
<br>
|
That may seem cynical or naive -- that we're "merely" products of our environment --
|
||||||
So if we wanna cure our epidemic of distrust,
|
but as game theory reminds us, we <i>are</i> each others' environment.
|
||||||
and rebuild a trusting & trustworthy civic society, it's up to all of <i>us.</i>
|
<b>In the short run, the game defines the players. But in the long run,
|
||||||
Let's all learn and act to find win-wins,
|
it's us players who define the game.</b>
|
||||||
to create repeated interactions,
|
<br><br>
|
||||||
(and...)
|
So, do what <i>you</i> 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...
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p id="conclusion_2">
|
<p id="outro_1_btn">
|
||||||
|
and all learn...
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p id="outro_2">
|
||||||
...to live and let live.
|
...to live and let live.
|
||||||
<!-- the christmas truce pic/photo(?) circular pic... words overlaid -->
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p id="conclusion_button">
|
<p id="outro_2_credits">
|
||||||
|
"A Christmas Truce between Opposing Trenches"
|
||||||
|
Illustrated by AC Michael.
|
||||||
|
Published in <i>The Illustrated London News</i>, January 9, 1915.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p id="outro_2_btn">
|
||||||
<3
|
<3
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -823,6 +907,25 @@ to create repeated interactions,
|
||||||
<!-- - - - - - CREDITS! - - - - - - -->
|
<!-- - - - - - CREDITS! - - - - - - -->
|
||||||
<!-- - - - - - - - - - - - - - - - - -->
|
<!-- - - - - - - - - - - - - - - - - -->
|
||||||
|
|
||||||
|
<p id="credits_beta">
|
||||||
|
<b>END OF BETA!</b> 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.
|
||||||
|
<br><br>
|
||||||
|
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.
|
||||||
|
<br><br>
|
||||||
|
Thank you so much!
|
||||||
|
<br><br>
|
||||||
|
<3,<br>
|
||||||
|
~ Nicky Case
|
||||||
|
</p>
|
||||||
|
|
||||||
<!-- - - - - - - - - - - - - - - - - -->
|
<!-- - - - - - - - - - - - - - - - - -->
|
||||||
<!-- - - - - FEETNOTES - - - - - - -->
|
<!-- - - - - FEETNOTES - - - - - - -->
|
||||||
|
|
Loading…
Reference in a new issue