forked from sent/waves
558 lines
16 KiB
JavaScript
558 lines
16 KiB
JavaScript
/*****************************
|
|
|
|
ACT II: THE ESCALATION
|
|
1. Weird square screams at others
|
|
2. Circle becomes fearful
|
|
3. Square becomes snobby
|
|
4. Circle becomes angry...
|
|
5. Angry escalates... until...
|
|
|
|
******************************/
|
|
|
|
function Stage_Screamer(self){
|
|
|
|
// The crazy one
|
|
var crazy = new CrazyPeep(self);
|
|
self.world.addPeep(crazy);
|
|
|
|
// Director
|
|
self.director.callbacks = {
|
|
takePhoto: function(d){
|
|
|
|
// IMPORTANCE:
|
|
// 1. Screamer Dude
|
|
// 2. Lovers
|
|
// 3. Hats
|
|
// 4. Shocked Peeps
|
|
// 5. Everything else.
|
|
d.tryChyron(function(d){
|
|
var p = d.photoData;
|
|
var caught = d.caught({
|
|
shocked: {_CLASS_:"NormalPeep", shocked:true},
|
|
crazy: {_CLASS_:"CrazyPeep"}
|
|
});
|
|
if(caught.crazy){
|
|
if(crazy.isScreaming()){
|
|
p.HIJACK = true;
|
|
p.audienceCircles = 1;
|
|
p.audienceSquares = 0;
|
|
p.caughtCrazy = caught.crazy;
|
|
d.chyron = "CRAZED SQUARE ATTACKS";
|
|
}else{
|
|
if(caught.shocked) d.chyron = "oooooh just missed it";
|
|
else d.chyron = "(ya gotta catch 'em doing *something* interesting...)";
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
})
|
|
.otherwise(_chyLovers)
|
|
.otherwise(_chyHats)
|
|
.otherwise(function(d){
|
|
var p = d.photoData;
|
|
var caught = d.caught({
|
|
shocked: {_CLASS_:"NormalPeep", shocked:true}
|
|
});
|
|
if(caught.shocked) d.chyron = "(ya gotta catch who's screaming at 'em)";
|
|
return caught.shocked;
|
|
})
|
|
.otherwise(_chyPeeps);
|
|
|
|
},
|
|
movePhoto: function(d){
|
|
d.audience_movePhoto();
|
|
},
|
|
cutToTV: function(d){
|
|
|
|
// Importance:
|
|
// 1. Crazy
|
|
// 2. Lovers
|
|
// 3. Hats
|
|
// 4. Everything Else
|
|
d.tryCut2TV(function(d){
|
|
var p = d.photoData;
|
|
if(p.caughtCrazy){
|
|
self.world.addBalancedPeeps(1); // Add with moar!
|
|
d.audience_cutToTV(); // Show audience watching!
|
|
p.caughtCrazy.kill(); // Get rid of crazy
|
|
self.world.replaceWatcher("circle", new NervousPeep(self)); // Replace with nervous
|
|
Stage_Nervous(self); // Next stage
|
|
return true;
|
|
}
|
|
return false;
|
|
})
|
|
.otherwise(_cutLovers)
|
|
.otherwise(_cutHats)
|
|
.otherwise(_cutPeeps);
|
|
|
|
}
|
|
};
|
|
|
|
}
|
|
|
|
function Stage_Nervous(self, HACK){
|
|
|
|
// Also, get rid of the lovers if they're still here.
|
|
self.world.peeps.filter(function(peep){
|
|
return peep._CLASS_=="LoverPeep";
|
|
}).forEach(function(lover){
|
|
lover.kill();
|
|
});
|
|
|
|
// HACK - The nervous one
|
|
if(HACK){
|
|
var nervous = new NervousPeep(self);
|
|
self.world.addPeep(nervous);
|
|
nervous.HACK_JUMPSTART();
|
|
}
|
|
|
|
// Director
|
|
self.director.callbacks = {
|
|
takePhoto: function(d){
|
|
|
|
// IMPORTANCE:
|
|
// 1. Nervous
|
|
// 2. Hats
|
|
// 3. Everything else.
|
|
d.tryChyron(function(d){
|
|
var p = d.photoData;
|
|
var caught = d.caught({
|
|
confused: {_CLASS_:"NormalPeep", confused:true},
|
|
nervous: {_CLASS_:"NervousPeep"}
|
|
});
|
|
if(caught.nervous){
|
|
if(caught.nervous.isScared()){
|
|
if(caught.confused){
|
|
p.HIJACK = true;
|
|
p.audienceCircles = 0;
|
|
p.audienceSquares = 1;
|
|
p.caughtNervous = caught.nervous;
|
|
d.chyron = "CIRCLE FEARS SQUARES";
|
|
}else{
|
|
d.chyron = "(ya gotta also catch *who* they're scared by)";
|
|
}
|
|
}else{
|
|
d.chyron = "(ya gotta catch 'em doing *something* interesting...)";
|
|
// d.chyron = "(ya gotta catch 'em *being* scared by a square)";
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
})
|
|
.otherwise(_chyHats)
|
|
.otherwise(_chyPeeps);
|
|
|
|
},
|
|
movePhoto: function(d){
|
|
d.audience_movePhoto();
|
|
},
|
|
cutToTV: function(d){
|
|
|
|
// IMPORTANCE:
|
|
// 1. Nervous
|
|
// 2. Hats
|
|
// 3. Everything else.
|
|
|
|
d.tryCut2TV(function(d){
|
|
var p = d.photoData;
|
|
if(p.caughtNervous){
|
|
self.world.addBalancedPeeps(1); // Add with moar!
|
|
d.audience_cutToTV(); // Show audience watching!
|
|
p.caughtNervous.kill(); // Get rid of nervous
|
|
self.world.replaceWatcher("square", new SnobbyPeep(self)); // Replace with snpb
|
|
Stage_Snobby(self); // Next stage
|
|
return true;
|
|
}
|
|
return false;
|
|
})
|
|
.otherwise(_cutHats)
|
|
.otherwise(_cutPeeps);
|
|
|
|
}
|
|
};
|
|
|
|
}
|
|
|
|
function Stage_Snobby(self, HACK){
|
|
|
|
// HACK - The snobby one
|
|
if(HACK){
|
|
var snobby = new SnobbyPeep(self);
|
|
self.world.addPeep(snobby);
|
|
snobby.HACK_JUMPSTART();
|
|
}
|
|
|
|
// Director
|
|
self.director.callbacks = {
|
|
takePhoto: function(d){
|
|
|
|
// Importance:
|
|
// 1. Snobby
|
|
// 2. Hats
|
|
// 3. Everything else
|
|
|
|
d.tryChyron(function(d){
|
|
var p = d.photoData;
|
|
var caught = d.caught({
|
|
offended: {_CLASS_:"NormalPeep", offended:true},
|
|
snobby: {_CLASS_:"SnobbyPeep"}
|
|
});
|
|
if(caught.snobby){
|
|
if(caught.snobby.isSmug){
|
|
p.HIJACK = true;
|
|
p.audienceCircles = 1;
|
|
p.audienceSquares = 0;
|
|
p.caughtSnobby = caught.snobby;
|
|
d.chyron = "SQUARES SNUB CIRCLES";
|
|
}else{
|
|
//d.chyron = "(ya gotta catch 'em *while* snubbing a circle)";
|
|
d.chyron = "(ya gotta catch 'em doing *something* interesting...)";
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
})
|
|
.otherwise(_chyHats)
|
|
.otherwise(_chyPeeps);
|
|
|
|
},
|
|
movePhoto: function(d){
|
|
d.audience_movePhoto();
|
|
},
|
|
cutToTV: function(d){
|
|
|
|
// Importance:
|
|
// 1. Snobby
|
|
// 2. Hats
|
|
// 3. Everything else
|
|
|
|
d.tryCut2TV(function(d){
|
|
var p = d.photoData;
|
|
if(p.caughtSnobby){
|
|
|
|
// self.world.addBalancedPeeps(1); // Add with moar!
|
|
|
|
// Get rid of all hats
|
|
self.world.peeps.slice(0).filter(function(peep){
|
|
return peep.wearingHat;
|
|
}).forEach(function(hatPeep){
|
|
hatPeep.takeOffHat(true);
|
|
});
|
|
|
|
d.audience_cutToTV(); // Show audience watching!
|
|
p.caughtSnobby.kill(); // Get rid of snob
|
|
|
|
// Replace with angry
|
|
var angry = new AngryPeep(self, "circle");
|
|
self.world.replaceWatcher("circle",angry);
|
|
|
|
Stage_Angry_Escalation(self); // Next stage
|
|
|
|
return true;
|
|
|
|
}
|
|
return false;
|
|
})
|
|
.otherwise(_cutHats)
|
|
.otherwise(_cutPeeps);
|
|
|
|
}
|
|
};
|
|
|
|
}
|
|
|
|
function Stage_Angry_Escalation(self, HACK){
|
|
|
|
// HACK - ONE angry one
|
|
if(HACK){
|
|
var angry = new AngryPeep(self, "circle");
|
|
self.world.addPeep(angry);
|
|
angry.HACK_JUMPSTART();
|
|
}
|
|
|
|
// HELPING.
|
|
var helping = new HelpingAnim(self);
|
|
self.world.addProp(helping);
|
|
|
|
// PROTESTERS!
|
|
var protest = null;
|
|
var _addProtesters = function(){
|
|
|
|
// ONCE
|
|
if(protest) return;
|
|
protest = new ProtestAnim(self);
|
|
|
|
self.world.addProp(protest);
|
|
|
|
}
|
|
|
|
// Director
|
|
self.director.callbacks = {
|
|
takePhoto: function(d){
|
|
|
|
// IMPORTANCE:
|
|
// 1. Helping
|
|
// 2. Protest
|
|
// 3. Angry
|
|
// 4. Weirdo
|
|
// 5. Shocked
|
|
// 6. Everything Else
|
|
|
|
d.tryChyron(_chyHelping)
|
|
.otherwise(_chyProtest)
|
|
.otherwise(_chyAngry)
|
|
.otherwise(_chyWeirdo)
|
|
.otherwise(_chyShocked)
|
|
.otherwise(_chyPeeps)
|
|
|
|
},
|
|
movePhoto: function(d){
|
|
d.audience_movePhoto();
|
|
},
|
|
cutToTV: function(d){
|
|
|
|
// IMPORTANCE:
|
|
// 1. Helping
|
|
// 2. Protest
|
|
// 3. Angry
|
|
// 4. Weirdo
|
|
// 5. Shocked
|
|
// 6. Everything Else
|
|
|
|
d.tryChyron(_cutHelping)
|
|
.otherwise(_cutProtest)
|
|
.otherwise(_cutAngry)
|
|
.otherwise(_cutWeirdo)
|
|
.otherwise(_cutShocked)
|
|
.otherwise(_cutPeeps)
|
|
|
|
// WHAT PERCENT OF PEEPS ARE NOW ANGRY???
|
|
var peeps = d.scene.world.peeps;
|
|
var angry = peeps.filter(function(peep){
|
|
return(peep._CLASS_=="AngryPeep");
|
|
});
|
|
var angryRatio = angry.length/(peeps.length-1);
|
|
// angryRatio = 0.95; // HACK TO SKIP
|
|
|
|
// MORE THAN 66%: BRING IN THE PEACE PROTESTERS
|
|
if(angryRatio>0.5){
|
|
_addProtesters();
|
|
}
|
|
|
|
// ONCE (ALMOST) EVERYONE IS ANGRY, IT'S TIME FOR MURDER
|
|
if(angryRatio==1.00){ // EXACTLY 1.
|
|
Stage_Evil(self); // Next stage
|
|
}
|
|
|
|
}
|
|
};
|
|
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////
|
|
////////////////////////////////////////////////
|
|
///////////// THE FINAL MANIFESTO //////////////
|
|
////////////////////////////////////////////////
|
|
////////////////////////////////////////////////
|
|
|
|
var _manifestoIndex = -1;
|
|
var _manifesto = [
|
|
//"as if you viewers want GOOD news",
|
|
"who tunes in to watch *people get along?*",
|
|
"peace is boring. violence goes viral.",
|
|
//"peace is boring. conflict gets clicks.",
|
|
"and every story needs a conflict, so...",
|
|
//"...GIVE THE AUDIENCE WHAT THEY WANT.",
|
|
"GIVE THE AUDIENCE WHAT THEY WANT."
|
|
];
|
|
function _spoutManifesto(){
|
|
if(_manifestoIndex<_manifesto.length-1){
|
|
_manifestoIndex++;
|
|
}
|
|
return _manifesto[_manifestoIndex];
|
|
}
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////
|
|
////////////////////////////////////////////
|
|
///////////// THE FINAL THANG //////////////
|
|
////////////////////////////////////////////
|
|
////////////////////////////////////////////
|
|
|
|
function _chyAngry(d){
|
|
var p = d.photoData;
|
|
var caught = d.caught({
|
|
shocked: {_CLASS_:"NormalPeep", shocked:true},
|
|
angry: {_CLASS_:"AngryPeep", returnAll:true},
|
|
angryCircleShouting: {_CLASS_:"AngryPeep", type:"circle", isShouting:true, returnAll:true},
|
|
angrySquareShouting: {_CLASS_:"AngryPeep", type:"square", isShouting:true, returnAll:true},
|
|
});
|
|
if(caught.angry.length>0){
|
|
|
|
if(caught.angryCircleShouting.length+caught.angrySquareShouting.length>0){
|
|
|
|
p.audience = 2;
|
|
p.caughtAngry = true;
|
|
|
|
// How many angrys? (*AFTER* you add 4 more...)
|
|
var peeps = d.scene.world.peeps;
|
|
var angry = peeps.filter(function(peep){
|
|
return(peep._CLASS_=="AngryPeep");
|
|
});
|
|
var angriesAfterwards = angry.length+4;
|
|
var angryRatio = angriesAfterwards/(peeps.length-1);
|
|
|
|
if(angryRatio>=1){
|
|
d.chyron = "EVERYONE HATES EVERYONE!!1!";
|
|
}else if(angryRatio>=0.75){
|
|
d.chyron = "ALMOST EVERYONE HATES EVERYONE...";
|
|
}else{
|
|
|
|
// Who was caught angry & shouting?
|
|
if(caught.angryCircleShouting.length>0) p.caughtAngryCircle=true;
|
|
if(caught.angrySquareShouting.length>0) p.caughtAngrySquare=true;
|
|
|
|
if(caught.angryCircleShouting.length==0){
|
|
d.chyron = "SQUARES HATE CIRCLES"; // must be a square
|
|
}else{
|
|
d.chyron = "CIRCLES HATE SQUARES"; // must be a circle, or both
|
|
}
|
|
|
|
}
|
|
|
|
}else{
|
|
if(caught.shocked){
|
|
d.chyron = "oooooh just missed it";
|
|
}else{
|
|
// d.chyron = "(ya gotta catch 'em *yelling* at others)";
|
|
d.chyron = "(ya gotta catch 'em doing *something* interesting...)";
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function _chyHelping(d){
|
|
var p = d.photoData;
|
|
var caught = d.caught({
|
|
helping: {_CLASS_:"HelpingAnim"}
|
|
});
|
|
if(caught.helping){
|
|
if(caught.helping.hasHelped){
|
|
d.chyron = _spoutManifesto();
|
|
}else{
|
|
d.chyron = "what are these nerds doing now";
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function _chyProtest(d){
|
|
var p = d.photoData;
|
|
var caught = d.caught({
|
|
protest: {_CLASS_:"ProtestAnim"}
|
|
});
|
|
if(caught.protest) d.chyron = _spoutManifesto();
|
|
return caught.protest;
|
|
}
|
|
|
|
function _chyWeirdo(d){
|
|
var p = d.photoData;
|
|
var caught = d.caught({
|
|
happyWeirdo: {_CLASS_:"HappyWeirdoPeep"},
|
|
lovers: {_CLASS_:"LoverPeep"}
|
|
});
|
|
if(caught.happyWeirdo){
|
|
d.chyron = _spoutManifesto();
|
|
return true;
|
|
}
|
|
if(caught.lovers){
|
|
d.chyron = _spoutManifesto();
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function _chyShocked(d){
|
|
var p = d.photoData;
|
|
var caught = d.caught({
|
|
shocked: {_CLASS_:"NormalPeep", shocked:true}
|
|
});
|
|
if(caught.shocked) d.chyron = "why's this peep shocked?";
|
|
return caught.shocked;
|
|
}
|
|
|
|
function _cutAngry(d){
|
|
|
|
var p = d.photoData;
|
|
if(p.caughtAngry){
|
|
|
|
d.audience_cutToTV();
|
|
|
|
// Make ALL the watching normal peeps angry
|
|
var world = d.scene.world;
|
|
var peeps = world.peeps;
|
|
peeps.filter(function(p){
|
|
return (p._CLASS_=="NormalPeep" && p.isWatching);
|
|
}).forEach(function(peep){
|
|
var newPeep = new AngryPeep(d.scene, peep.type);
|
|
world.replacePeep(peep, newPeep);
|
|
newPeep.watchTV();
|
|
});
|
|
|
|
return true;
|
|
}
|
|
return false;
|
|
|
|
}
|
|
function _cutHelping(d){
|
|
return false;
|
|
}
|
|
function _cutProtest(d){
|
|
return false;
|
|
}
|
|
function _cutWeirdo(d){
|
|
return false;
|
|
}
|
|
function _cutShocked(d){
|
|
return false;
|
|
}
|
|
|
|
////////////////////////////////////////////
|
|
////////////////////////////////////////////
|
|
////////////////////////////////////////////
|
|
////////////////////////////////////////////
|
|
////////////////////////////////////////////
|
|
////////////////////////////////////////////
|
|
|
|
|
|
function Stage_Whatever(self){
|
|
|
|
// HACK - The snobby one
|
|
/*
|
|
if(HACK){
|
|
var snobby = new SnobbyPeep(self);
|
|
self.world.addPeep(snobby);
|
|
snobby.HACK_JUMPSTART();
|
|
}
|
|
*/
|
|
|
|
// Director
|
|
self.director.callbacks = {
|
|
takePhoto: function(d){
|
|
d.chyron = "whatever";
|
|
},
|
|
movePhoto: function(d){
|
|
d.audience_movePhoto();
|
|
},
|
|
cutToTV: function(d){
|
|
d.audience_cutToTV();
|
|
}
|
|
};
|
|
|
|
} |