home *** CD-ROM | disk | FTP | other *** search
- package
- {
- import flash.display.*;
- import flash.events.*;
- import flash.text.*;
- import flash.utils.*;
-
- [Embed(source="/_assets/assets.swf", symbol="Monster")]
- public class Monster extends MovieClip
- {
-
-
- public var moveDown:Boolean;
-
- public var stopCount:int;
-
- public var hitWallRight:Boolean;
-
- public var charwidth:Number;
-
- public var monsterType:int;
-
- public var sleepTime:int;
-
- public var moveUp:Boolean;
-
- public var gravity:Number;
-
- public var inner:*;
-
- public var roared:Boolean;
-
- public var finished:Boolean;
-
- public var isAttacking:Boolean;
-
- public var dx:Number;
-
- public var dy:Number;
-
- public var wizdirection:String;
-
- public var oneFrame:*;
-
- public var moveRight:Boolean;
-
- public var alive:Boolean;
-
- public var generator:MonsterGenerator;
-
- public var curHealth:*;
-
- public var damType:*;
-
- public var animstate:String;
-
- public var testID:int;
-
- public var theTimer:Timer;
-
- public var startHealth:*;
-
- public var damage:*;
-
- public var moveLeft:Boolean;
-
- public var direction:int;
-
- public var col:int;
-
- public var hitWallLeft:Boolean;
-
- public var hidden:Boolean;
-
- public var stopped:Boolean;
-
- public var row:int;
-
- public var inAir:Boolean;
-
- public var game:PlatformGame;
-
- public var charheight:Number;
-
- public var walkSpeed:Number;
-
- public function Monster(param1:PlatformGame)
- {
- super();
- addFrameScript(0,frame1,1,frame2,2,frame3,3,frame4,4,frame5,5,frame6,6,frame7,7,frame8,8,frame9,9,frame10,10,frame11);
- game = param1;
- finished = false;
- }
-
- public function startTimer() : *
- {
- if(finished)
- {
- return;
- }
- sleepTime = Math.ceil(Math.random() * 3) + 3;
- stopCount = 0;
- if(theTimer == null)
- {
- theTimer = new Timer(1000,0);
- theTimer.start();
- theTimer.addEventListener(TimerEvent.TIMER,timerTick);
- }
- }
-
- public function shootCheck() : *
- {
- var _loc1_:Boolean = false;
- if(finished)
- {
- return;
- }
- if(stopped && game.hero.alive)
- {
- _loc1_ = false;
- if(game.getRowFromY(game.hero.mc.y) == game.getRowFromY(y))
- {
- if(direction == 1)
- {
- if(x < game.hero.mc.x)
- {
- _loc1_ = true;
- }
- }
- if(direction == -1)
- {
- if(x > game.hero.mc.x)
- {
- _loc1_ = true;
- }
- }
- if(_loc1_)
- {
- inner.gotoAndPlay("attack");
- isAttacking = true;
- game.throwAxe(this);
- }
- }
- }
- }
-
- internal function frame10() : *
- {
- stop();
- }
-
- public function regen() : *
- {
- endTimer();
- init();
- stopped = false;
- }
-
- internal function frame3() : *
- {
- stop();
- }
-
- internal function frame4() : *
- {
- stop();
- }
-
- internal function frame7() : *
- {
- stop();
- }
-
- internal function frame1() : *
- {
- stop();
- }
-
- internal function frame6() : *
- {
- stop();
- }
-
- internal function frame9() : *
- {
- stop();
- }
-
- internal function frame2() : *
- {
- stop();
- }
-
- internal function frame5() : *
- {
- stop();
- }
-
- public function die() : *
- {
- if(finished)
- {
- return;
- }
- alive = false;
- dx = dy = 0;
- if(monsterType == 25 || monsterType == 27)
- {
- moveUp = false;
- moveDown = true;
- gravity = 0.02;
- }
- if(monsterType == 28)
- {
- game.wizardDead = true;
- inner.movewiz.gotoAndPlay("die");
- game.sounds.wizarddie.play();
- inner.stop();
- }
- else
- {
- inner.gotoAndPlay("die");
- }
- if(monsterType == 27)
- {
- game.sounds.barbdie.play();
- }
- endTimer();
- }
-
- internal function frame8() : *
- {
- stop();
- }
-
- internal function frame11() : *
- {
- stop();
- }
-
- public function timerTick(param1:Event) : *
- {
- if(finished)
- {
- return;
- }
- stopped = true;
- if(alive)
- {
- shootCheck();
- if(stopped)
- {
- ++stopCount;
- if(stopCount >= sleepTime && !isAttacking)
- {
- stopCount = 0;
- stopped = false;
- inner.gotoAndPlay("walk");
- }
- }
- else
- {
- stopped = true;
- }
- return;
- }
- }
-
- public function resetBarboolia() : *
- {
- x = 4000;
- y = 200;
- if(game.diff == 0)
- {
- x = 5000;
- }
- roared = false;
- alive = true;
- }
-
- public function update(param1:Number) : *
- {
- var _loc2_:* = undefined;
- var _loc3_:Number = NaN;
- var _loc4_:Number = NaN;
- var _loc5_:Number = NaN;
- var _loc6_:int = 0;
- var _loc7_:* = undefined;
- var _loc8_:int = 0;
- var _loc9_:int = 0;
- if(finished)
- {
- return;
- }
- if(!alive && monsterType == 24)
- {
- dy = 0;
- }
- if((moveLeft || moveRight) && alive && !stopped)
- {
- if(monsterType != 26 && monsterType != 27)
- {
- isAttacking = false;
- }
- dx = direction * walkSpeed;
- }
- if(monsterType == 28)
- {
- if(oneFrame == 0)
- {
- ++oneFrame;
- }
- else if(oneFrame == 1)
- {
- ++oneFrame;
- visible = true;
- inner.gotoAndPlay(100);
- }
- }
- if(stopped && alive)
- {
- dx = 0;
- if(!isAttacking)
- {
- if(monsterType != 28)
- {
- inner.gotoAndStop(1);
- }
- else
- {
- inner.movewiz.gotoAndStop(1);
- }
- }
- }
- _loc2_ = dx * param1;
- dy += gravity;
- _loc3_ = dy * param1;
- if(_loc3_ > 10)
- {
- _loc3_ = 10;
- }
- hitWallRight = false;
- hitWallLeft = false;
- inAir = true;
- _loc4_ = y + _loc3_;
- _loc5_ = x + _loc2_;
- if(monsterType != 24 && monsterType != 25 && monsterType != 27 && monsterType != 28)
- {
- _loc6_ = 0;
- while(_loc6_ < game.fixedObjects.length)
- {
- if((_loc7_ = game.fixedObjects[_loc6_]).blocktype < 11 || (_loc7_.blocktype > 61 && _loc7_.blocktype < 66 || _loc7_.blocktype == 52 || _loc7_.blocktype == 54) && !_loc7_.open)
- {
- if(x + charwidth / 2 > _loc7_.leftside && x - charwidth / 2 < _loc7_.rightside)
- {
- if((monsterType == 22 || monsterType == 23) && Math.abs(_loc7_.topside - y) < 10)
- {
- if(direction == 1)
- {
- if(game.getTypeAt(_loc7_.col + direction,_loc7_.row) == 0 || game.getTypeAt(_loc7_.col + direction,_loc7_.row) > 10)
- {
- hitWallRight = true;
- }
- }
- else if(game.getTypeAt(game.getColFromX(x - charwidth / 2),_loc7_.row) == 0 || game.getTypeAt(game.getColFromX(x - charwidth / 2),_loc7_.row) > 10)
- {
- hitWallLeft = true;
- }
- }
- if(y <= _loc7_.topside && _loc4_ > _loc7_.topside)
- {
- _loc4_ = Number(_loc7_.topside);
- dy = 0;
- inAir = false;
- break;
- }
- }
- }
- _loc6_++;
- }
- if(_loc4_ > 440)
- {
- _loc4_ = 440;
- dy = 0;
- inAir = false;
- }
- _loc6_ = 0;
- while(_loc6_ < game.fixedObjects.length)
- {
- if((_loc7_ = game.fixedObjects[_loc6_]).blocktype < 6 || _loc7_.blocktype == 53 || _loc7_.blocktype == 51 && monsterType != 26 || _loc7_.blocktype == 62 && !_loc7_.open)
- {
- if(_loc4_ > _loc7_.topside && _loc4_ - charheight * 0.9 < _loc7_.bottomside)
- {
- if(x - charwidth / 2 >= _loc7_.rightside && _loc5_ - charwidth / 2 <= _loc7_.rightside)
- {
- _loc5_ = _loc7_.rightside + charwidth / 2;
- hitWallLeft = true;
- dx = 0;
- break;
- }
- if(x + charwidth / 2 <= _loc7_.leftside && _loc5_ + charwidth / 2 >= _loc7_.leftside)
- {
- _loc5_ = _loc7_.leftside - charwidth / 2;
- hitWallRight = true;
- dx = 0;
- break;
- }
- }
- }
- if(_loc7_.blocktype == 53)
- {
- if(inner.hitbitbite.hitTestObject(_loc7_.block53))
- {
- takeDamage(150);
- }
- }
- _loc6_++;
- }
- if(_loc5_ > 630)
- {
- _loc5_ = 630;
- hitWallRight = true;
- dx = 0;
- }
- if(_loc5_ < 10)
- {
- _loc5_ = 10;
- hitWallLeft = true;
- dx = 0;
- }
- x = _loc5_;
- y = _loc4_;
- if(hitWallRight)
- {
- moveLeft = true;
- direction = -1;
- moveRight = false;
- }
- else if(hitWallLeft)
- {
- direction = 1;
- moveLeft = false;
- moveRight = true;
- }
- }
- if(monsterType == 24)
- {
- if(!alive)
- {
- return;
- }
- dx = dy = 0;
- _loc8_ = Math.abs(game.getColFromX(game.hero.mc.x) - game.getColFromX(x));
- _loc9_ = Math.abs(game.getRowFromY(game.hero.mc.y) - game.getRowFromY(y));
- if(_loc8_ <= 2 && _loc9_ <= 2 && hidden)
- {
- show();
- }
- else if((_loc8_ > 2 || _loc9_ > 2) && !hidden && !isAttacking)
- {
- hide();
- }
- if(!hidden && !isAttacking)
- {
- if(_loc8_ <= 1 && _loc9_ <= 1 && game.hero.alive)
- {
- isAttacking = true;
- inner.gotoAndPlay("bite");
- }
- }
- if(game.hero.mc.x > x && !hidden)
- {
- direction = 1;
- }
- if(game.hero.mc.x <= x && !hidden)
- {
- direction = -1;
- }
- }
- if(monsterType == 25)
- {
- if(!alive)
- {
- inner.thread.visible = false;
- }
- else
- {
- visible = true;
- inner.thread.scaleY = (440 - generator.y) / 440 * ((y - generator.y) / (440 - generator.y));
- }
- if(moveDown)
- {
- if(alive)
- {
- inner.gotoAndStop(4);
- }
- }
- if(moveUp)
- {
- dy = -walkSpeed;
- }
- if(moveDown && y > 420 && alive)
- {
- inner.gotoAndPlay("walk");
- moveUp = true;
- dy = 0;
- moveDown = false;
- }
- if(moveUp && y < generator.y + 20)
- {
- moveUp = false;
- dy = 0;
- moveDown = true;
- }
- x = _loc5_;
- y = _loc4_;
- }
- if(monsterType == 26)
- {
- _loc8_ = Math.abs(game.getColFromX(game.hero.mc.x) - game.getColFromX(x));
- if((_loc9_ = Math.abs(game.getRowFromY(game.hero.mc.y) - game.getRowFromY(y))) == 0 && game.hero.alive)
- {
- if(game.hero.mc.x > x)
- {
- direction = 1;
- }
- else
- {
- direction = -1;
- }
- }
- if(!isAttacking && alive)
- {
- if(_loc8_ <= 1 && _loc9_ <= 1 && game.hero.alive)
- {
- isAttacking = true;
- inner.gotoAndPlay("attack");
- }
- }
- }
- if(monsterType == 27 && !game.wizardDead)
- {
- if(x > 1200 && x < 1400 && !roared)
- {
- roared = true;
- game.sounds.barbroar.play();
- }
- _loc8_ = Math.abs(game.getColFromX(game.hero.mc.x) - game.getColFromX(x));
- _loc9_ = game.getRowFromY(game.hero.mc.y) - game.getRowFromY(y);
- if(alive && !game.hero.isPunched && !game.wizardDead)
- {
- if(_loc8_ > 1)
- {
- dx = 0.2 * direction;
- }
- if(_loc9_ > 0)
- {
- dy = 0.2;
- }
- if(_loc9_ < 0)
- {
- dy = -0.2;
- }
- if(_loc9_ == 0)
- {
- dy = 0;
- }
- if(game.hero.alive)
- {
- if(game.hero.mc.x > x)
- {
- direction = 1;
- moveRight = true;
- moveLeft = false;
- }
- else
- {
- direction = -1;
- moveLeft = true;
- moveRight = false;
- }
- }
- }
- if(!isAttacking && alive)
- {
- if(_loc8_ <= 3 && game.hero.alive)
- {
- isAttacking = true;
- inner.gotoAndPlay("attack");
- }
- }
- if(game.hero.isPunched)
- {
- dy = 0;
- }
- x += dx * param1;
- y += dy * param1;
- }
- if(monsterType == 28)
- {
- _loc8_ = Math.abs(game.getColFromX(game.hero.mc.x) - game.getColFromX(inner.movewiz.x + x));
- _loc9_ = game.getRowFromY(game.hero.mc.y) - game.getRowFromY(inner.movewiz.y + y);
- if(alive)
- {
- if(game.hero.alive)
- {
- if(game.hero.mc.x > inner.movewiz.x + x)
- {
- direction = 1;
- wizdirection = "right";
- }
- else
- {
- direction = -1;
- wizdirection = "left";
- }
- }
- }
- }
- else
- {
- scaleX = direction;
- }
- }
-
- public function takeDamage(param1:int) : *
- {
- if(monsterType == 28)
- {
- inner.movewiz.gotoAndPlay("hit" + wizdirection);
- inner.stop();
- }
- if(alive && !hidden)
- {
- if(monsterType == 27)
- {
- game.sounds.barbhit.play();
- }
- curHealth -= param1;
- if(curHealth <= 0)
- {
- curHealth = 0;
- die();
- }
- }
- }
-
- public function startWizardTimer() : *
- {
- if(finished)
- {
- return;
- }
- if(theTimer == null)
- {
- theTimer = new Timer(3000,0);
- theTimer.start();
- theTimer.addEventListener(TimerEvent.TIMER,wizShoot);
- }
- }
-
- public function show() : *
- {
- if(finished)
- {
- return;
- }
- isAttacking = false;
- hidden = false;
- inner.gotoAndPlay("show");
- }
-
- public function bite() : *
- {
- if(finished)
- {
- return;
- }
- if(inner.hitbitbite.hitTestObject(game.hero.mc))
- {
- game.hero.takeDamage(1000,1,0.3,x);
- }
- }
-
- public function init() : *
- {
- var _loc1_:* = undefined;
- dx = dy = 0;
- gravity = 0.03;
- alive = true;
- stopped = false;
- stopCount = 0;
- hidden = false;
- moveDown = moveUp = false;
- switch(monsterType)
- {
- case 22:
- direction = 1;
- moveLeft = false;
- moveRight = true;
- _loc1_ = Math.random();
- if(_loc1_ < 0.5)
- {
- direction = -1;
- moveLeft = true;
- moveRight = false;
- }
- walkSpeed = 0.04;
- startHealth = 20;
- charwidth = 30;
- charheight = 20;
- damage = 20;
- damType = 1;
- break;
- case 23:
- stopped = true;
- direction = 1;
- moveLeft = false;
- moveRight = true;
- _loc1_ = Math.random();
- if(_loc1_ < 0.5)
- {
- direction = -1;
- moveLeft = true;
- moveRight = false;
- }
- walkSpeed = 0.16;
- startHealth = 20;
- charwidth = 40;
- charheight = 40;
- damage = 15;
- damType = 1;
- startTimer();
- break;
- case 24:
- direction = 1;
- moveLeft = false;
- moveRight = false;
- walkSpeed = 0;
- startHealth = 40;
- charwidth = 40;
- charheight = 40;
- damage = 40;
- damType = 1;
- hidden = true;
- break;
- case 25:
- direction = 1;
- moveLeft = false;
- moveRight = false;
- moveDown = true;
- walkSpeed = 0.1;
- startHealth = 20;
- charwidth = 40;
- charheight = 40;
- damage = 15;
- damType = 1;
- gravity = 0.02;
- visible = false;
- break;
- case 26:
- direction = 1;
- moveLeft = false;
- moveRight = true;
- _loc1_ = Math.random();
- if(_loc1_ < 0.5)
- {
- direction = -1;
- moveLeft = true;
- moveRight = false;
- }
- walkSpeed = 0.06;
- startHealth = 120;
- if(game.diff == 0)
- {
- startHealth = 80;
- }
- charwidth = 30;
- charheight = 40;
- damage = 10;
- damType = 1;
- break;
- case 27:
- direction = 1;
- moveLeft = false;
- moveRight = true;
- walkSpeed = 1.3;
- startHealth = 90;
- charwidth = 30;
- charheight = 40;
- damage = 20;
- damType = 1;
- resetBarboolia();
- break;
- case 28:
- direction = 1;
- moveLeft = moveRight = false;
- walkSpeed = 0;
- startHealth = 300;
- if(game.diff == 0)
- {
- startHealth = 300;
- }
- damType = 4;
- charwidth = 120;
- charheight = 100;
- damage = 40;
- oneFrame = 0;
- visible = false;
- wizdirection = "right";
- startWizardTimer();
- break;
- case 29:
- case 30:
- case 31:
- case 32:
- }
- curHealth = startHealth;
- }
-
- public function wizShoot(param1:Event) : *
- {
- if(finished)
- {
- return;
- }
- if(!isAttacking && alive && game.hero.alive)
- {
- isAttacking = true;
- game.sounds.wizardpreattack.play();
- if(Math.abs(game.hero.mc.x - (inner.movewiz.x + x)) < 100)
- {
- inner.movewiz.gotoAndPlay("attackdown" + wizdirection);
- }
- else
- {
- inner.movewiz.gotoAndPlay("attackside" + wizdirection);
- }
- }
- }
-
- public function endTimer() : *
- {
- if(theTimer != null)
- {
- theTimer.stop();
- theTimer = null;
- }
- }
-
- public function punch() : *
- {
- if(finished)
- {
- return;
- }
- if(hitTestObject(game.hero.mc))
- {
- game.hero.takeDamage(20,1,14,x);
- game.hero.getPunched();
- }
- }
-
- public function hide() : *
- {
- if(finished)
- {
- return;
- }
- isAttacking = false;
- hidden = true;
- inner.gotoAndPlay("hide");
- }
-
- public function endIt() : *
- {
- endTimer();
- finished = true;
- }
-
- public function shootLightning(param1:*) : *
- {
- game.shootLightning(this,param1);
- }
-
- public function endDie() : *
- {
- game.removeMonster(this);
- if(generator != null)
- {
- --generator.monsterCount;
- generator.resetTimer();
- }
- if(monsterType == 28)
- {
- game.killAllMonsters();
- game.winGame();
- }
- }
- }
- }
-