1
0
forked from sent/waves
waves/public/assets/g/wbwwb/js/scenes/Act_II.js
2025-04-09 17:11:14 -05:00

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();
}
};
}