Frame 1
function DoFrame() {
MouthHandler();
if (base_x > 50) {
MouthHandler();
MouthHandler();
}
p_charge = p_charge - 1;
txtNote.text = (("#: " + blob_chains.length) + ", full: ") + mouth_full;
if (p_charge > 0) {
var _local1 = Math.random();
if (base_dx < 0) {
point = {x:bod.mov_lowmouth._x, y:bod.mov_lowmouth._y};
bod.localToGlobal(point);
base_x = point.x;
base_y = point.y;
} else {
base_dx = base_dx - (_local1 / 2);
base_x = base_x - (_local1 / 2);
}
CreateBlob();
while (Math.random() < 0.5) {
CreateBlob();
}
} else {
prev_blob = null;
if (cycles > 0) {
if (p_charge < (-p_recycle)) {
cycles--;
p_charge = 1 + (Math.random() * 10);
if (mouth_full > (Math.random() * 10)) {
if (bod._currentFrame > 20) {
mouth_open = 10;
} else {
mouth_open = 40;
}
var point;
point = {x:bod.mov_lowmouth._x, y:bod.mov_lowmouth._y};
bod.localToGlobal(point);
base_x = point.x;
base_y = point.y;
base_dy = -Math.random();
base_dx = -Math.random();
base_z = 5;
mouth_full = mouth_full - 2;
p_recycle = 10;
cycles = cycles + 1;
breath = -1;
} else {
p_recycle = 4;
base_x = 0;
base_dy = -3;
base_dx = 3 + Math.random();
base_z = Math.random();
}
}
} else if (((p_charge < -200) && (blob_chains.length < 50)) || (mouth_full > 10)) {
base_y = 70 + (Math.random() * 100);
cycles = 2 + (Math.random() * 2);
}
}
BlobPhysics();
Draw();
}
function Draw() {
splatter.clear();
var _local1 = 0;
while (_local1 < blob_chains.length) {
DrawBlob(blob_chains[_local1]);
_local1++;
}
}
function DrawBlob(blob) {
var _local2 = 16777215 /* 0xFFFFFF */;
splatter.lineStyle(5, _local2, opacity);
blob.ox = (blob.ox + blob._x) / 2;
blob.oy = (blob.oy + blob._y) / 2;
dx = blob._x - blob.prev_blob._x;
dy = blob._y - blob.prev_blob._y;
dist = (dx * dx) + (dy * dy);
opacity = 100;
if ((dist > 100) || (dist <= 0)) {
splatter.moveTo(blob._x, blob._y);
splatter.lineTo(blob._x, blob._y + 2);
blob.dy = blob.dy + 0.1;
return(undefined);
}
splatter.moveTo(blob._x, blob._y);
splatter.lineTo(blob.prev_blob._x, blob.prev_blob._y);
splatter.moveTo(blob.ox, blob.oy);
splatter.lineTo(blob.prev_blob._x, blob.prev_blob._y);
}
function CreateBlob() {
var _local1 = new Object();
if (blobnum > 0) {
_local1.prev_blob = prev_blob;
} else {
_local1.prev_blob = _local1;
}
_local1.noise_blob = null;
blobnum++;
prev_blob = _local1;
blob_chains.push(_local1);
_local1._width = 4;
_local1._height = 6;
_local1._x = (base_x + (Math.random() * 4)) - 2;
_local1._y = (base_y + (Math.random() * 4)) - 2;
_local1.ox = _local1._x;
_local1.oy = _local1._y;
_local1._z = base_z + ((Math.random() - 0.5) / 2);
_local1.dx = base_dx;
_local1.dy = base_dy;
if (base_dx > 0) {
_local1.stuck_on = "virgin";
}
}
function BlobPhysics() {
var _local2 = new Array();
var _local1;
while (blob_chains.length > 0) {
_local1 = blob_chains.pop();
if (SoloBlobPhysics(_local1)) {
_local2.push(_local1);
}
}
blob_chains = _local2;
}
function SoloBlobPhysics(blob) {
blob.ox = blob._x;
blob.oy = blob._y;
blob._x = blob._x + blob.dx;
blob._y = blob._y + blob.dy;
if (((blob.stuck_on == bod.mov_tongue) || (blob.stuck_on == bod.mov_lowmouth)) || (blob.stuck_on == bod.mov_upmouth)) {
if (blob.dx > -1) {
blob.dx = blob.dx + ((Math.random() / 5) * breath);
}
}
blob.dy = blob.dy + (Math.random() / 5);
if (blob.stuck_on.hitTest(blob._x, blob._y)) {
BlobCatch(blob, blob.stuck_on);
} else if (bod.hitTest(blob._x, blob._y)) {
var _local2 = 0;
for ( ; _local2 < hittable.length ; _local2++) {
if (hittable[_local2].hitTest(blob._x, blob._y)) {
if (hittable[_local2] == bod.mov_lowlip) {
if (!hittable[_local2].hitTest(blob._x - 10, blob._y)) {
continue;
}
} else if (hittable[_local2] == bod.mov_jaw) {
if (!hittable[_local2].hitTest(blob._x, blob._y + 15)) {
continue;
}
} else {
if (blob.stuck_on == "virgin") {
if ((hittable[_local2] == bod.mov_upmouth) || (hittable[_local2] == bod.mov_lowmouth)) {
if (blob.dx > 0) {
mouth_full = mouth_full + 0.1;
if (breath > -1) {
mouth_open = Math.ceil(Math.random() * 20) + 80;
}
blob.dx = blob.dx - -0.1;
blob.dy = blob.dy - -0.1;
}
}
}
if (blob._z > 0) {
blob._z = blob._z - 0.1;
break;
}
BlobCatch(blob, hittable[_local2]);
break;
}
}
}
}
if (blob._y > 400) {
blob.removeMovieClip();
return(false);
}
if ((blob.stuck_on == bod.mov_tongue) || (blob.stuck_on == bod.mov_upmouth)) {
if (Math.random() < 0.02) {
mouth_full = mouth_full + 0.1;
mouth_open = mouth_open + 3;
}
}
Attract(blob, blob.prev_blob);
if ((blob.noise_blob == null) || (Math.random() < 0.01)) {
blob.noise_blob == blob_chains[Math.floor(Math.random() * blob_chains.length)];
}
Attract(blob, blob.noise_blob);
return(true);
}
function BlobCatch(blob, hitter) {
blob.dx = blob.dx / 2;
blob.dy = blob.dy / 2;
if (blob.stuck_on != hitter) {
blob.stuck_on = hitter;
var _local2 = {x:blob._x, y:blob._y};
hitter.globalToLocal(_local2);
blob.stuckx = _local2.x;
blob.stucky = _local2.y;
if (hitter == bod.mov_eye) {
bod.mov_eye.impact++;
blob.dx = blob.dx + 1;
mouth_open = mouth_open - 1;
}
} else {
var _local2 = {x:blob.ox, y:blob.oy};
hitter.globalToLocal(_local2);
if (_local2.y > 0) {
blob._x = blob._x - (_local2.x - blob.stuckx);
blob._y = blob._y - (_local2.y - blob.stucky);
_local2 = {x:blob._x, y:blob._y};
hitter.globalToLocal(_local2);
blob.stuckx = _local2.x;
blob.stucky = _local2.y;
}
}
}
function Attract(blob, blob2) {
if ((!blob2._x) > 0) {
return(undefined);
}
if ((!blob._x) > 0) {
return(undefined);
}
if (blob == blob2) {
return(undefined);
}
var _local4 = blob._x - blob2._x;
var _local3 = blob._y - blob2._y;
var _local5 = (_local4 * _local4) + (_local3 * _local3);
multiple = 0.03;
if (blob.stuck_on != "virgin") {
if (_local5 > 200) {
return(undefined);
}
multiple = 0.01;
}
if (_local5 > 1000) {
return(undefined);
}
if (_local5 < 10) {
return(undefined);
}
blob.dx = blob.dx - (_local4 * multiple);
blob.dy = blob.dy - (_local3 * multiple);
blob2.dx = blob2.dx + (_local4 * multiple);
blob2.dy = blob2.dy + (_local3 * multiple);
}
function MouthHandler() {
breathcounter--;
if (breathcounter <= 0) {
breathcounter = 100;
if (breath == -1) {
breath = 1;
} else if (breath == 1) {
breath = 0;
} else {
breath = -1;
}
}
rotlevel = bod._currentframe + (mouth_full * 20);
rotlevel = rotlevel / 10;
if (breath > 0) {
bod._rotation = (rotlevel + (bod._rotation * 99)) / 100;
} else if (breath < 0) {
bod._rotation = ((-rotlevel) + (bod._rotation * 99)) / 100;
}
if (Math.random() < 0.02) {
eyebrow_tweak = (Math.random() * 30) - 15;
}
browframe = (eyebrow_tweak + (mouth_full * 5)) + bod.mov_eye.impact;
browframe = browframe * 3;
if (bod.mov_eyebrow._currentframe < (browframe - 3)) {
bod.mov_eyebrow.gotoAndStop(bod.mov_eyebrow._currentframe + 1);
}
if (bod.mov_eyebrow._currentframe > (browframe + 3)) {
bod.mov_eyebrow.gotoAndStop(bod.mov_eyebrow._currentframe - 1);
}
if (bod.mov_eye.impact > 0) {
bod.mov_eye.impact = bod.mov_eye.impact - (Math.random() / 10);
}
ideal = 100 - (bod.mov_eye.impact * 10);
if (ideal < 10) {
ideal = 10;
}
if (ideal < bod.mov_eye.yscale) {
bod.mov_eye._yscale = ideal;
} else {
bod.mov_eye._yscale = (bod.mov_eye._yscale + ideal) / 2;
}
if (Math.random() < 0.01) {
mouth_open = Math.floor(Math.random() * 101);
}
mdx = bod._currentframe - mouth_open;
mdx = Math.floor(mdx / 5);
bod.gotoAndStop(bod._currentframe - mdx);
if (Math.random() < 0.1) {
tongue_pos = Math.floor(Math.random() * 101);
}
if (bod.mov_tongue._currentframe < (tongue_pos - 1)) {
bod.mov_tongue.gotoAndStop(bod.mov_tongue._currentframe + 2);
}
if (bod.mov_tongue._currentframe > (tongue_pos + 1)) {
bod.mov_tongue.gotoAndStop(bod.mov_tongue._currentframe - 2);
}
}
var blobnum = 0;
var base_dx = 3;
var base_dy = -3;
var base_x = 0;
var base_y = 150;
var base_z = Math.random();
var prev_blob;
var mouth_open = Math.floor(Math.random() * 101);
var tongue_pos = Math.floor(Math.random() * 101);
var mouth_full = 0;
var eyebrow_tweak = Math.random();
var breath = 1;
var breathcounter = 100;
var p_charge = 3.1;
var cycles = (2 + (Math.random() * 2));
var p_recycle = 4;
var blob_chains = new Array();
var hittable = new Array();
bod.gotoAndStop(1);
bod.mov_eyebrow.gotoAndStop(0);
hittable.push(bod.mov_jaw);
hittable.push(bod.mov_nose);
hittable.push(bod.mov_uplip);
hittable.push(bod.mov_lowlip);
hittable.push(bod.mov_tongue);
hittable.push(bod.mov_eye);
hittable.push(bod.mov_face);
hittable.push(bod.mov_upmouth);
hittable.push(bod.mov_lowmouth);
bod.mov_eye.impact = 0;
Instance of Symbol 36 MovieClip [empty] "movStars" in Frame 1
onClipEvent (enterFrame) {
_root.DoFrame();
}
Symbol 33 MovieClip [body] Frame 1
mov_tongue.gotoAndStop(0);