forked from sent/waves
225 lines
6.2 KiB
JavaScript
225 lines
6.2 KiB
JavaScript
Game.addToManifest({
|
|
|
|
face_snobby: "sprites/peeps/face_snobby.json",
|
|
face_snobby_hmph: "sprites/peeps/face_snobby_hmph.json",
|
|
|
|
peep_huh: "sounds/peep_huh.mp3",
|
|
peep_hmph: "sounds/peep_hmph.mp3"
|
|
|
|
});
|
|
|
|
/****
|
|
|
|
FRAMES:
|
|
00-03: disbelief at screen
|
|
04-07: grouch face (07 is resting)
|
|
09-14: SMUG
|
|
15-20: HMPH. (LOOP HMPH at 16)
|
|
22-25: POP.
|
|
26-29: Go Away. FLIP, then go to 07.
|
|
|
|
****/
|
|
|
|
function SnobbyPeep(scene){
|
|
|
|
var self = this;
|
|
Peep.apply(self, [scene]);
|
|
self._CLASS_ = "SnobbyPeep";
|
|
|
|
// Add the body & face sprites
|
|
self.bodyMC = self.addMovieClip("body");
|
|
self.bodyMC.gotoAndStop(1);
|
|
self.faceMC = self.addMovieClip("face_snobby");
|
|
self.faceMC.anchor.y = 1.25;
|
|
self.faceMC.gotoAndStop(0);
|
|
self.wordMC = self.addMovieClip("face_snobby_hmph");
|
|
self.wordMC.anchor.y = 1.25;
|
|
self.wordMC.gotoAndStop(0);
|
|
|
|
// IS SMUG?
|
|
self.isSmug = false;
|
|
|
|
// Animate on triples
|
|
var doubles = 0;
|
|
var MODE = -1;
|
|
var MODE_STARE = 0;
|
|
var MODE_BLINK = 1;
|
|
var MODE_SMUG = 2;
|
|
var MODE_HMPH = 3;
|
|
var MODE_POP = 4;
|
|
var MODE_AWAY = 5;
|
|
self.gracePeriod = -1;
|
|
|
|
// HACK
|
|
self.HACK_JUMPSTART = function(){
|
|
MODE = MODE_BLINK;
|
|
};
|
|
|
|
self.callbacks.update = function(){
|
|
|
|
// Animate on doubles! ...or... TRIPLES?
|
|
doubles = (doubles+1)%3;
|
|
|
|
// stay within game frame
|
|
self.stayWithinRect({
|
|
l:100, r:860, t:100, b:480
|
|
},0.05);
|
|
|
|
// FRAMES: MANUALLY
|
|
var face = self.faceMC;
|
|
var frame = face.currentFrame;
|
|
self.wordMC.scale.x = self.flip*self.DRAWING_SCALE;
|
|
if(doubles==0){
|
|
switch(MODE){
|
|
case MODE_STARE:
|
|
if(frame<3) face.gotoAndStop(frame+1);
|
|
break;
|
|
case MODE_BLINK:
|
|
if(frame<7) face.gotoAndStop(frame+1);
|
|
break;
|
|
case MODE_SMUG:
|
|
if(frame<14) face.gotoAndStop(frame+1);
|
|
break;
|
|
case MODE_HMPH:
|
|
if(frame<20){
|
|
frame = frame+1;
|
|
face.gotoAndStop(frame);
|
|
if(frame>=18){
|
|
if(self.wordMC.currentFrame==0){
|
|
self.wordMC.gotoAndStop(1);
|
|
}else{
|
|
var nextFrame = self.wordMC.currentFrame+1;
|
|
if(nextFrame>3) nextFrame=1;
|
|
self.wordMC.gotoAndStop(nextFrame);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case MODE_POP:
|
|
self.wordMC.gotoAndStop(0);
|
|
if(frame<25) face.gotoAndStop(frame+1);
|
|
break;
|
|
case MODE_AWAY:
|
|
if(frame<29){
|
|
face.gotoAndStop(frame+1);
|
|
}else{
|
|
|
|
// Loop back
|
|
face.gotoAndStop(7);
|
|
MODE = MODE_BLINK;
|
|
self.isSmug = false;
|
|
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
///////////////////////////
|
|
///////////////////////////
|
|
///////////////////////////
|
|
|
|
// Shocked by a square!
|
|
if(!self.isSmug){
|
|
|
|
if(self.gracePeriod<=0){
|
|
var closeTo = self.touchingPeeps(90, function(peep){
|
|
return(!peep.offended && peep.type=="circle");
|
|
});
|
|
if(closeTo.length>0 && self.isWalking){
|
|
|
|
// Bounce back
|
|
self.flip = (closeTo[0].x>self.x) ? 1 : -1;
|
|
self.bounce = 1.5;
|
|
|
|
// BE SHOCKED
|
|
MODE = MODE_SMUG;
|
|
self.isWalking = false;
|
|
|
|
// Sound!
|
|
Game.sounds.peep_huh.play();
|
|
|
|
// They get confused!
|
|
closeTo.forEach(function(other){
|
|
if(other.offended) return;
|
|
other.beOffended(self);
|
|
});
|
|
|
|
// HMPH!
|
|
self.setTimeout(function(){
|
|
|
|
MODE = MODE_HMPH;
|
|
self.isSmug = true;
|
|
|
|
// Sound!
|
|
Game.sounds.peep_hmph.play();
|
|
|
|
// POP!
|
|
self.setTimeout(function(){
|
|
MODE = MODE_POP;
|
|
|
|
// Then stop
|
|
self.setTimeout(function(){
|
|
|
|
// Turn around & walk
|
|
self.flip *= -1;
|
|
self.startWalking();
|
|
self.direction = (self.flip>0) ? 0 : Math.PI; // override!
|
|
self.direction += Math.random()*0.2-0.1;
|
|
|
|
// Move away...
|
|
MODE = MODE_AWAY;
|
|
self.gracePeriod = 60;
|
|
|
|
},_s(0.8));
|
|
|
|
},_s(1.4));
|
|
|
|
},_s(0.9));
|
|
|
|
}
|
|
}else{
|
|
self.gracePeriod--;
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
// AT FIRST...
|
|
self.watchTV = function(){
|
|
|
|
self.clearAnims(); // just in case...
|
|
|
|
// 0) Stop & look
|
|
var tv = scene.tv;
|
|
self.stopWalking(true);
|
|
self.flip = (tv.x>self.x) ? 1 : -1;
|
|
var OFFSET = 0; // (Math.abs(self.x-tv.x)-60)/100;
|
|
var WAIT = Director.ZOOM_OUT_1_TIME + Director.SEE_VIEWERS_TIME;
|
|
|
|
// 1) Become nervous
|
|
self.setTimeout(function(){
|
|
|
|
self.bounce = 1.6;
|
|
MODE = MODE_STARE;
|
|
|
|
// SQUEAK
|
|
Game.sounds.squeak.play();
|
|
|
|
},_s(OFFSET+BEAT*2));
|
|
|
|
// 2) Blink...
|
|
self.setTimeout(function(){
|
|
self.bounce = 1.3;
|
|
MODE = MODE_BLINK;
|
|
},_s(OFFSET+WAIT));
|
|
|
|
// 3) And go on.
|
|
self.setTimeout(function(){
|
|
// self.bounce = 1.2;
|
|
self.startWalking();
|
|
},_s(OFFSET+WAIT+1));
|
|
|
|
};
|
|
|
|
} |