Team:AUC TURKEY/HumanPractices/FlashGame

From 2013hs.igem.org

(Difference between revisions)
(Flash Game)
 
(4 intermediate revisions not shown)
Line 2: Line 2:
==Flash Game==
==Flash Game==
-
This year's flash game from our last year's flash game maker, Alihan Çelikcan. Graphics were drawn by Fatih Gül.
+
This year's flash game is "BactoCooler".
-
We will give awards to high scorers in the Jamboree. High scores are stored on your computer so you will have to play the game again in the Jamboree. Train hard and have fun.
+
 
 +
 
 +
''At the end, Bactofuse had lost the fight. He was lying on the floor, as a body without a soul. With him gone, the time has come to cure the wounds. With all the G-Men in pain and none of them suitable for the job, it is BactoCooler’s turn to cool the world. Someone must put out the fire BactoFuse lit up. So run and carry your cooling aura, run to save the world. Run, Run like the wind!''
 +
 
 +
 
 +
 
 +
Programming, music, animation and graphics by Alihan Çelikcan. The running BactoCooler guy was drawn by Fatih Gül.
 +
 
 +
We will give awards to high scorers in the Jamboree. High scores are stored on your computer so <s>you will have to play the game again in the Jamboree</s> you can tweet your high scores [http://twitter.com/AUC_TURKEY @AUC_TURKEY] and/or improve your score at the Jamboree. Train hard and have fun.
<html>
<html>
<center>
<center>
Line 471: Line 479:
</div>
</div>
</html>
</html>
-
 
-
<forum_subtle/>
 

Latest revision as of 04:36, 22 June 2013



Flash Game

This year's flash game is "BactoCooler".


At the end, Bactofuse had lost the fight. He was lying on the floor, as a body without a soul. With him gone, the time has come to cure the wounds. With all the G-Men in pain and none of them suitable for the job, it is BactoCooler’s turn to cool the world. Someone must put out the fire BactoFuse lit up. So run and carry your cooling aura, run to save the world. Run, Run like the wind!


Programming, music, animation and graphics by Alihan Çelikcan. The running BactoCooler guy was drawn by Fatih Gül.

We will give awards to high scorers in the Jamboree. High scores are stored on your computer so you will have to play the game again in the Jamboree you can tweet your high scores [http://twitter.com/AUC_TURKEY @AUC_TURKEY] and/or improve your score at the Jamboree. Train hard and have fun.


Here's the source code of the game if you're interested:
//platform
var platform:MovieClip = _root.createEmptyMovieClip("platform", _root.getNextHighestDepth());
var pID:Number = 20;
var pLeft:Number = 0;
var pRight:Number = pID * 40;
var pFall:Number = 57;
var pInc:Number = 3;
//speed
var speedTimer:Number = 0;
var speedWait:Number = 48;
var speedInc:Number = .2;
var speed:Number = 7;
var minSpeed:Number = 5;
//jump
var fallSpeed:Number = 0;
var jumpSpeed:Number = 10;
var floor:Number = 250;
var jump:Number = 0;
var doubleJump:Boolean = false;
var gravity:Number = .5;
var plat_arr:Array = [pLeft, 250, pRight];
var signal:Boolean = true;
//animation
var animFrame:Number = 0;
igeman_mc.stop();
igeman_mc.run.stop();
//fps
var fps:Number = 48;
var frames:Number = 0;
var startTime:Number = 0;
//fire
var nextFire:Number = random(5) + 20;
//ice
var ices:MovieClip = _root.createEmptyMovieClip("ices", _root.getNextHighestDepth());
var iceUse:Number = 1;
var iceGiven:Number = 1;
var iceReady:Boolean = true;
var iceCooldown:Number = 0;
var iceFloor:Number = 0;
var iceRight:Number = 0;
var iceWait:Number = 120;
//music
var doMute:Boolean = true;
var firstMute:Number = mute_mc.getDepth();
mute_mc.swapDepths(_root.getNextHighestDepth());
if (snd)
{
	mute_mc.gotoAndStop(1);
}
else
{
	mute_mc.gotoAndStop(2);
}
var loop_snd:Sound = new Sound(this);
var pauseTime:Number = 2000;
var pause:Number;
loop_snd.onSoundComplete = processPause;
loop_snd.attachSound("music");
function loopSound()
{
	clearInterval(pause);
	loop_snd.start(0,1);
}
function processPause()
{
	pause = setInterval(loopSound, pauseTime);
}
if (snd)
{
	loopSound();
}
mute_btn.onPress = function()
{
	if (snd)
	{
		pos = loop_snd.position / 1000;
		loop_snd.stop();
		mute_mc.gotoAndStop(2);
	}
	else
	{
		loop_snd.start(pos);
		mute_mc.gotoAndStop(1);
	}
	snd = !snd;
};
//pause
var doPause:Boolean = true;
var firstPause:Number = pause_mc.getDepth();
pause_mc.swapDepths(_root.getNextHighestDepth());
var paused:Boolean = false;
pause_btn.onPress = function()
{
	if (paused)
	{
		pause_mc.gotoAndStop(1);
	}
	else
	{
		pause_mc.gotoAndStop(2);
	}
	paused = !paused;
};

//game over
var over:Boolean = false;
var score:Number = 0;
var minTemp:Number = Infinity;
//the Code
for (var i:Number = 0; i < pID; i++)
{
	var newPlat:MovieClip = platform.attachMovie("platform", "platform_" + i + "_mc",
platform.getNextHighestDepth());
	newPlat._x = i * 40;
	newPlat._y = 250;
	if (--nextFire == 0)
	{
		var newFire:MovieClip = platform.attachMovie("fire", "fire_" + pID + "_mc",
platform.getNextHighestDepth());
		nextFire = random(12) + 3;
		newFire._x = newPlat._x + 20;
		newFire._y = newPlat._y + 10;
		newFire.onEnterFrame = function()
		{
			if (paused)
			{
				return;
			}
			if (igeman_mc.hitTest(this._x + platform._x, this._y - 50, true))
			{
				speed -= .4;
			}
			if (platform._x < -this._x - 80)
			{
				this.removeMovieClip();
			}
		};
	}
	newPlat.onEnterFrame = function()
	{
		if (paused)
		{
			return;
		}
		this.gotoAndStop(Math.max(1, (200 - (int(speed * 8)))));
		if (platform._x < -this._x - 80)
		{
			this.removeMovieClip();
		}
	};
}
onEnterFrame = function ()
{
	//mute 
	if (Key.isDown(77))
	{
		if (doMute)
		{
			mute_btn.onPress();
			doMute = false;
		}
	}
	else
	{
		doMute = true;
	}
	//pause
	if (Key.isDown(80))
	{
		if (doPause)
		{
			pause_btn.onPress();
			doPause = false;
		}
	}
	else
	{
		doPause = true;
	}
	if (paused)
	{
		return;
	}
	var currentTime:Number = (getTimer() - startTime) / 1000;
	frames++;
	if (currentTime > 1)
	{
		fps = Math.floor((frames / currentTime) * 10.0) / 10.0;
		startTime = getTimer();
		frames = 0;
	}
	if (signal && igeman_mc._x - platform._x + 20 > plat_arr[0])
	{
		floor = plat_arr[1];
		plat_arr = plat_arr.slice(2);
		signal = !signal;
		realFloor = floor;
	}
	if (!signal && igeman_mc._x - platform._x - 20 > plat_arr[0])
	{
		floor = 800;
		plat_arr = plat_arr.slice(1);
		signal = !signal;
		realFloor = floor;
	}
	if (igeman_mc._x - platform._x - 10 < iceRight)
	{
		floor = Math.min(realFloor, iceFloor);
		if (floor == iceFloor && !jump)
		{
			speedInc = 1.2;
		}
		else
		{
			speedInc = .2;
		}
	}
	else
	{
		speedInc = .2;
		floor = realFloor;
	}
	if (!over)
	{
		if (platform._x <= -pLeft + 550)
		{
			addPlatform();
			pFall += pInc;
		}
		if (++speedTimer >= speedWait)
		{
			speedTimer = 0;
			speed += speedInc;
		}
		if (speed < minSpeed)
		{
			speed = minSpeed;
		}
		platform._x -= speed * 12 / 25;
		ices._x -= speed * 12 / 25;
		animFrame = (animFrame + speed * 25 / 120) % igeman_mc.run._totalframes;
		igeman_mc.run.gotoAndStop(int(animFrame));
		if (!jump && floor > igeman_mc._y + 95 / 2)
		{
			fallSpeed = 0;
			jump = 1;
		}
		if (Key.isDown(Key.UP))
		{
			if (jump == 0)
			{
				fallSpeed = -jumpSpeed;
				jump++;
			}
			if (doubleJump == true)
			{
				fallSpeed = -jumpSpeed;
				jump++;
				doubleJump = false;
			}
		}
		else if (jump == 1)
		{
			doubleJump = true;
		}
		if (floor + 1 < igeman_mc._y + 95 / 2)
		{
			over = true;
			ices.removeMovieClip();
		}
	}
	if (jump || over)
	{
		igeman_mc._y += fallSpeed += gravity;
		if (igeman_mc._y > floor - 95 / 2 && !over)
		{
			jump = 0;
			doubleJump = false;
			igeman_mc._y = floor - 95 / 2;
		}
	}
	if (jump)
	{
		igeman_mc.gotoAndStop(2);
		animFrame = 25;
	}
	else
	{
		igeman_mc.gotoAndStop(1);
	}
	var dist:Number = Math.floor((-platform._x) / 50);
	//ice
	if (dist >= iceGiven * iceWait)
	{
		iceGiven++;
		iceUse++;
	}
	if (iceCooldown > 0)
	{
		iceCooldown--;
	}
	if (Key.isDown(Key.SPACE))
	{
		if (iceReady && iceUse && !iceCooldown)
		{
			iceCooldown = 24;
			iceReady = false;
			iceUse--;
			iceRight = -platform._x + igeman_mc._x + 300;
			var newIce:MovieClip = ices.attachMovie("ice", "ice", ices.getNextHighestDepth());
			newIce._x = -platform._x + igeman_mc._x;
			newIce._y = igeman_mc._y + 95 / 2;
			iceFloor = newIce._y;
			newIce.onEnterFrame = function()
			{
				if (paused)
				{
					return;
				}
				if (this._x < -300 - ices._x)
				{
					this.removeMovieClip();
				}
			};
		}
	}
	else
	{
		iceReady = true;
	}
	//ui
	//fps_txt.text = (Math.round(fps * 10) / 10);
	speed_txt.text = (Math.round(speed * 10) / 10);
	dist_txt.text = dist;
	special_txt.text = iceUse;
	special_mc._xscale = 100 - (iceGiven * iceWait - dist) / iceWait * 100;
	//temp_txt.text = (200 - (int(speed * 8)));
	var temp:Number = (200 - (int(speed * 8)));
	minTemp = Math.min(minTemp, temp);
	thermometer_mc.gotoAndStop(Math.max(1, temp));
	bg_mc.gotoAndStop(Math.max(1, temp));
	if (igeman_mc._y > 400)
	{
		over = true;
		loop_snd.stop();
		platform.removeMovieClip();
		ices.removeMovieClip();
		score = dist * 25 + Math.pow(Math.min(Math.max(0, 144 - minTemp), 144), 2);
		mute_mc.swapDepths(firstMute);
		pause_mc.swapDepths(firstPause);
		nextFrame();
		delete onEnterFrame;
	}
};
function addPlatform()
{
	var h:Number = random(150) + 200;
	var len:Number = random(10) + 1;
	var moving:Boolean = false;
	pLeft = pRight + pFall;
	pRight = pLeft + len * 40;
	plat_arr.push(pLeft);
	plat_arr.push(h);
	plat_arr.push(pRight);
	if (len > 4 && !(random(5)))
	{
		moving = true;
	}
	for (var i:Number = 0; i < len; i++)
	{
		var newPlat:MovieClip = platform.attachMovie("platform", "platform_" + pID + "_mc",
platform.getNextHighestDepth());
		newPlat._x = i * 40 + pLeft;
		newPlat._y = h;
		if (!moving && --nextFire == 0)
		{
			var newFire:MovieClip = platform.attachMovie("fire", "fire_" + pID + "_mc",
platform.getNextHighestDepth());
			nextFire = random(12) + 3;
			newFire._x = newPlat._x + 20;
			newFire._y = newPlat._y + 10;
			newFire.onEnterFrame = function()
			{
				if (paused)
				{
					return;
				}
				if (this.hitTest(ices))
				{
					this.removeMovieClip();
				}
				if (igeman_mc.hitTest(this._x + platform._x, this._y - 50, true))
				{
					speed -= .4;
				}
				if (platform._x < -this._x - 80)
				{
					this.removeMovieClip();
				}
			};
			pID++;
		}
		newPlat.onEnterFrame = function()
		{
			if (paused)
			{
				return;
			}
			this.gotoAndStop(Math.max(1, (200 - (int(speed * 8)))));
			if (platform._x < -this._x - 80)
			{
				this.removeMovieClip();
			}
		};
	}
	if (moving)
	{
		var newFire:MovieClip = platform.attachMovie("fire", "fire_" + pID + "_mc",
platform.getNextHighestDepth());
		newFire._x = pLeft + random(len) * 40 + 20;
		newFire._y = h + 10;
		newFire.left = pLeft + 20;
		newFire.right = pRight - 20;
		newFire.speed = 2;
		newFire.onEnterFrame = function()
		{
			if (paused)
			{
				return;
			}
			if (this.hitTest(ices))
			{
				this.removeMovieClip();
			}
			if (this._x < this.left || this._x > this.right)
			{
				this.speed *= -1;
			}
			this._x += this.speed;
			if (igeman_mc.hitTest(this._x + platform._x, this._y - 50, true))
			{
				speed -= .4;
			}
			if (platform._x < -this._x - pRight + pLeft - 80)
			{
				this.removeMovieClip();
			}
		};
	}
}