home *** CD-ROM | disk | FTP | other *** search
- package
- {
- import flash.display.*;
- import flash.events.*;
- import flash.text.*;
- import flash.utils.*;
-
- public class Hero extends Sprite
- {
-
- internal static const startArrows:* = 50;
-
- internal static const startHealth:* = 100;
-
-
- public var isHit:Boolean;
-
- public var maxArrows:* = 100;
-
- public var moveDown:Boolean;
-
- public var jump:Boolean;
-
- public var charwidth:Number;
-
- public var hitWallRight:Boolean;
-
- public var isSkidding:Boolean;
-
- public var moveUp:Boolean;
-
- public var isClimbing:Boolean;
-
- public var animstep:Number;
-
- public var starty:Number;
-
- public var isJumping:Boolean;
-
- public var startx:Number;
-
- public var gravity:*;
-
- public var immune:Boolean;
-
- public var walkSpeedMax:Number;
-
- public var timeDiff:int;
-
- public var dx:Number;
-
- public var dy:Number;
-
- public var isShooting:Boolean;
-
- public var numArrows:*;
-
- public var jumpSpeed:Number;
-
- public var curHealth:*;
-
- public var hasFlame:Boolean;
-
- public var moveRight:Boolean;
-
- public var alive:Boolean;
-
- public var isOpening:Boolean;
-
- public var angle:Number;
-
- public var isTouchingDoor:Boolean;
-
- public var maxHealth:*;
-
- public var damType:int;
-
- public var hasAmulet:Boolean;
-
- public var isRising:Boolean;
-
- public var animstate:String;
-
- public var hasPulledLever:Boolean;
-
- public var moveLeft:Boolean;
-
- public var direction:int;
-
- public var mc:MovieClip;
-
- public var hasRuby:Boolean;
-
- public var hitWallLeft:Boolean;
-
- public var onPlat:Boolean;
-
- public var walkAnimation:Array;
-
- public var moveCount:int;
-
- public var isPunched:Boolean;
-
- public var isCrouching:Boolean;
-
- public var inAir:Boolean;
-
- public var game:PlatformGame;
-
- public var charheight:Number;
-
- public var walkSpeed:Number;
-
- public function Hero(param1:PlatformGame)
- {
- maxArrows = 100;
- super();
- game = param1;
- mc = game.gamelevel.hero;
- mc.hero = this;
- gravity = 0.0015;
- timeDiff = 0;
- walkAnimation = new Array(2,3,4,5,6,7,8,9);
- damType = 0;
- jumpSpeed = 0.4;
- walkSpeed = 0.00147;
- walkSpeedMax = 0.2;
- charwidth = 20;
- charheight = 41;
- hasFlame = hasAmulet = hasRuby = hasPulledLever = false;
- numArrows = startArrows;
- startx = mc.x;
- starty = mc.y;
- mc.hero = this;
- mc.stop();
- init();
- }
-
- public function getPunched() : *
- {
- if(!isPunched && alive)
- {
- checkDead();
- isPunched = true;
- dy = -10;
- }
- }
-
- public function getHasFlame() : *
- {
- return hasFlame;
- }
-
- public function shoot() : *
- {
- --numArrows;
- mc.rhand.gotoAndPlay(2);
- setShooting(true);
- if(hasFlame)
- {
- game.sounds.sintashootfire.play();
- }
- else
- {
- game.sounds.sintashootnormal.play();
- }
- }
-
- public function addHealth(param1:int) : *
- {
- curHealth += param1;
- if(curHealth > maxHealth)
- {
- curHealth = maxHealth;
- }
- }
-
- public function die(param1:int) : *
- {
- var _loc2_:String = null;
- if(alive)
- {
- isPunched = false;
- --game.playerLives;
- alive = false;
- _loc2_ = "die" + param1;
- mc.gotoAndPlay(_loc2_);
- if(param1 == 1)
- {
- game.sounds.sintadienormal.play();
- }
- if(param1 == 3)
- {
- game.sounds.sintaburn.play();
- }
- if(param1 == 4)
- {
- game.sounds.sintaelectricute.play();
- }
- }
- }
-
- public function doAim() : *
- {
- var _loc1_:* = undefined;
- var _loc2_:* = undefined;
- var _loc3_:* = undefined;
- var _loc4_:* = undefined;
- var _loc5_:Number = NaN;
- var _loc6_:Number = NaN;
- var _loc7_:Number = NaN;
- var _loc8_:Number = NaN;
- var _loc9_:Number = NaN;
- if(inAir || isShooting || isOpening || isHit || !alive || mc.lhand == null)
- {
- return;
- }
- _loc1_ = mouseX;
- _loc2_ = mouseY;
- _loc3_ = mc.x + mc.lhand.x;
- _loc4_ = mc.y + mc.lhand.y;
- if(direction == 1)
- {
- if(_loc1_ < _loc3_)
- {
- direction = -1;
- }
- }
- if(direction == -1)
- {
- if(_loc1_ > _loc3_)
- {
- direction = 1;
- }
- }
- mc.scaleX = direction;
- _loc5_ = Math.sqrt(game.GetDistSq(_loc1_,_loc2_,_loc3_,_loc4_));
- _loc6_ = _loc4_ - _loc2_;
- _loc7_ = _loc3_ - _loc1_;
- angle = Math.acos(_loc6_ / _loc5_);
- angle *= 180 / Math.PI;
- if(angle > 170)
- {
- angle = 170;
- }
- if(angle < 10)
- {
- angle = 10;
- }
- if(_loc7_ > 0)
- {
- }
- if(animstate == "stand")
- {
- if(mc.lhand != null)
- {
- mc.lhand.rotation = angle - 150;
- mc.rhand.rotation = angle - 90;
- if(hasFlame)
- {
- mc.lhand.arrowinner.gotoAndStop(2);
- }
- }
- _loc9_ = ((_loc8_ = angle - 106) + mc.head.rotation) / 4;
- mc.head.rotation = _loc9_ - 8;
- }
- }
-
- public function takeDamage(param1:int, param2:int, param3:Number, param4:int) : *
- {
- var _loc5_:int = 0;
- var _loc6_:Timer = null;
- if(!alive || immune)
- {
- return;
- }
- isOpening = false;
- damType = param2;
- if((damType == 3 || damType == 4) && hasAmulet)
- {
- param1 *= 0.2;
- }
- if(param1 >= curHealth)
- {
- curHealth = 0;
- die(param2);
- }
- else
- {
- game.sounds.sintahit.play();
- mc.gotoAndPlay("hit");
- }
- isClimbing = false;
- moveUp = moveDown = moveLeft = moveRight = false;
- _loc5_ = 1;
- if(param4 > mc.x)
- {
- _loc5_ = -1;
- }
- dx += param3 * _loc5_;
- isHit = true;
- immune = true;
- (_loc6_ = new Timer(500,1)).start();
- _loc6_.addEventListener(TimerEvent.TIMER_COMPLETE,endImmune);
- if(curHealth > 0)
- {
- curHealth -= param1;
- if(curHealth < 0)
- {
- curHealth = 0;
- }
- }
- }
-
- public function setStartPos(param1:Number, param2:Number) : *
- {
- mc.x = startx = param1 + 20;
- mc.y = starty = param2 + 40;
- mc.visible = true;
- }
-
- public function init() : *
- {
- mc.gotoAndStop(1);
- immune = false;
- moveCount = 0;
- isShooting = false;
- onPlat = false;
- alive = true;
- dx = 0;
- dy = 0;
- inAir = false;
- direction = 1;
- mc.scaleX = 1;
- animstate = "stand";
- isHit = false;
- timeDiff = 0;
- curHealth = maxHealth = startHealth;
- damType = 0;
- animstep = 0;
- jump = false;
- isJumping = false;
- isSkidding = false;
- isCrouching = false;
- isRising = false;
- isShooting = false;
- isClimbing = false;
- isOpening = false;
- isTouchingDoor = false;
- isPunched = false;
- moveLeft = false;
- moveRight = false;
- moveDown = false;
- }
-
- public function endPunch() : *
- {
- isPunched = false;
- dy = 0;
- if(alive)
- {
- game.loadLevel(4,0);
- }
- else
- {
- checkDead();
- }
- }
-
- public function continueGame() : *
- {
- numArrows = startArrows;
- init();
- }
-
- public function endImmune(param1:Event) : *
- {
- immune = false;
- checkDead();
- }
-
- public function updateStats() : *
- {
- game.healthbar.bar.width = 82 * (curHealth / maxHealth);
- game.arrows_txt.text = String(numArrows);
- game.lives_txt.text = String(game.playerLives);
- }
-
- public function moveHero(param1:Number) : *
- {
- var _loc2_:* = undefined;
- var _loc3_:Number = NaN;
- var _loc4_:* = undefined;
- var _loc5_:String = null;
- var _loc6_:int = 0;
- var _loc7_:Number = NaN;
- var _loc8_:Number = NaN;
- var _loc9_:int = 0;
- var _loc10_:* = undefined;
- var _loc11_:* = undefined;
- var _loc12_:* = undefined;
- var _loc13_:* = undefined;
- var _loc14_:Boolean = false;
- var _loc15_:int = 0;
- var _loc16_:int = 0;
- if(param1 < 1 || !game.isLoaded)
- {
- return;
- }
- if(numArrows == 0 && (mc.currentFrame == 105 || mc.currentFrame == 106))
- {
- mc.lhand.arrowinner.visible = false;
- }
- else if(!isShooting && (mc.currentFrame == 105 || mc.currentFrame == 106))
- {
- mc.lhand.arrowinner.visible = true;
- }
- if(isPunched)
- {
- mc.gotoAndPlay("hit");
- if(mc.x < -50 || mc.x > 660 || mc.y > 500)
- {
- endPunch();
- }
- dy += 0.2;
- mc.x += dx;
- mc.y += dy;
- checkDead();
- return;
- }
- timeDiff = param1;
- updateStats();
- if(isOpening)
- {
- return;
- }
- _loc2_ = game.getTypeAt(game.getColFromX(mc.x),game.getRowFromY(mc.y - 50));
- if(!game.pressDown && (moveDown || isCrouching))
- {
- if(_loc2_ < 5 && _loc2_ != 0)
- {
- moveDown = true;
- isCrouching = true;
- jump = false;
- }
- else
- {
- moveDown = false;
- isCrouching = false;
- }
- }
- _loc3_ = dy * timeDiff + timeDiff * gravity;
- if(_loc3_ > 8 * (timeDiff / 17))
- {
- _loc3_ = 8 * (timeDiff / 17);
- }
- dy += timeDiff * gravity;
- _loc4_ = 0;
- _loc5_ = "stand";
- _loc6_ = direction;
- if(isHit)
- {
- moveLeft = moveRight = moveUp = moveDown = false;
- }
- if(isClimbing)
- {
- inAir = false;
- _loc3_ -= timeDiff * gravity;
- dy = 0;
- _loc5_ = "climb";
- if(moveUp)
- {
- dy = -0.085;
- if(game.getTypeAt(game.getColFromX(mc.x),game.getRowFromY(mc.y - charheight / 2)) == 0 || game.getTypeAt(game.getColFromX(mc.x),game.getRowFromY(mc.y - charheight / 2)) > 22)
- {
- isClimbing = false;
- _loc3_ -= 2;
- }
- }
- if(moveDown)
- {
- dy = 0.085;
- }
- }
- if(moveLeft || moveRight && !isHit)
- {
- ++moveCount;
- isSkidding = false;
- isClimbing = false;
- _loc5_ = "walk";
- if(moveLeft)
- {
- _loc6_ = -1;
- }
- if(moveRight)
- {
- _loc6_ = 1;
- }
- if(!inAir)
- {
- dx += _loc6_ * walkSpeed * timeDiff;
- }
- else
- {
- dx += _loc6_ * walkSpeed * 0.2 * timeDiff;
- }
- }
- else
- {
- if(!inAir && Math.abs(dy) < 0.025)
- {
- dy = 0;
- }
- if(Math.abs(dx) > 0.1 && dy == 0 && moveCount > 10)
- {
- }
- if(Math.abs(dx) < 0.05)
- {
- dx = 0;
- moveCount = 0;
- }
- }
- if(Math.abs(dx) > walkSpeedMax)
- {
- if(dx < 0)
- {
- dx = -walkSpeedMax;
- }
- else
- {
- dx = walkSpeedMax;
- }
- }
- _loc4_ = dx * timeDiff;
- if(!inAir)
- {
- dx *= 1 - 0.00882 * timeDiff;
- }
- else
- {
- isSkidding = false;
- }
- if(moveDown && !inAir && !isClimbing)
- {
- dx *= 0.5;
- _loc5_ = "crouch";
- }
- if(jump && !isTouchingDoor)
- {
- jump = false;
- if(!isClimbing)
- {
- dy = -jumpSpeed;
- _loc3_ = -jumpSpeed;
- _loc5_ = "jump";
- }
- }
- hitWallRight = false;
- hitWallLeft = false;
- inAir = true;
- _loc7_ = mc.y + _loc3_;
- _loc8_ = mc.x + _loc4_;
- _loc9_ = 0;
- while(_loc9_ < game.fixedObjects.length)
- {
- if((_loc11_ = game.fixedObjects[_loc9_]).blocktype > 10 && _loc11_.blocktype < 19)
- {
- _loc12_ = _loc11_["block" + _loc11_.blocktype].inner;
- if(mc.x + charwidth / 2 > _loc11_.leftside + _loc12_.x && mc.x - charwidth / 2 < _loc11_.rightside + _loc12_.x)
- {
- if(mc.y <= _loc11_.topside + _loc12_.y + 5 && _loc7_ > _loc11_.topside + _loc12_.y)
- {
- _loc7_ = _loc11_.topside + _loc12_.y;
- if(_loc12_.x == undefined)
- {
- }
- _loc13_ = _loc12_.x - _loc11_.prevX;
- if(Math.abs(_loc13_) > 10)
- {
- _loc13_ = 0;
- }
- _loc8_ += _loc13_;
- _loc7_ += _loc12_.y - _loc11_.prevY;
- inAir = false;
- }
- }
- _loc11_.prevX = _loc12_.x;
- _loc11_.prevY = _loc12_.y;
- }
- if(_loc11_.blocktype < 11 || (_loc11_.blocktype > 61 && _loc11_.blocktype < 66 || _loc11_.blocktype == 52 || _loc11_.blocktype == 54) && !_loc11_.open)
- {
- if(mc.x + charwidth / 2 > _loc11_.leftside && mc.x - charwidth / 2 < _loc11_.rightside)
- {
- if(mc.y - charheight > _loc11_.bottomside && _loc7_ - charheight <= _loc11_.bottomside)
- {
- _loc7_ = _loc11_.bottomside + charheight;
- dy = 0;
- break;
- }
- if(mc.y <= _loc11_.topside && _loc7_ > _loc11_.topside)
- {
- _loc7_ = Number(_loc11_.topside);
- if(dy > 0.05 && (mc.currentLabel == "jumping" || mc.currentLabel == "fall"))
- {
- _loc5_ = "skid";
- }
- dy = 0;
- if((_loc11_.blocktype == 6 || _loc11_.blocktype == 7 || _loc11_.blocktype == 8 || _loc11_.blocktype == 9 || _loc11_.blocktype == 10) && moveDown)
- {
- _loc7_ = _loc11_.topside + 10;
- inAir = false;
- if(moveDown)
- {
- _loc10_ = true;
- isClimbing = true;
- _loc5_ = "climb";
- _loc8_ = _loc11_.leftside + charwidth - 2;
- }
- }
- else
- {
- isClimbing = false;
- dy = 0;
- inAir = false;
- }
- break;
- }
- }
- }
- else if(mc.hitbit.hitTestObject(_loc11_))
- {
- if(_loc11_.blocktype == 51 && !isHit)
- {
- if(mc.hitbit.hitTestObject(_loc11_.block51.spikebit))
- {
- takeDamage(1000,1,0,_loc11_.x + _loc11_.width / 2);
- }
- else
- {
- takeDamage(30,1,0.35,_loc11_.x + _loc11_.width / 2);
- }
- }
- if(_loc11_.blocktype == 53 && !isHit)
- {
- if(mc.hitbit.hitTestObject(_loc11_.block53))
- {
- takeDamage(250,3,0,_loc11_.x + _loc11_.width / 2);
- }
- }
- }
- _loc9_++;
- }
- if(_loc7_ > 440)
- {
- _loc7_ = 440;
- if(dy > 0.05 && (mc.currentLabel == "jumping" || mc.currentLabel == "fall"))
- {
- _loc5_ = "skid";
- }
- dy = 0;
- inAir = false;
- }
- _loc10_ = false;
- isTouchingDoor = false;
- _loc9_ = 0;
- while(_loc9_ < game.fixedObjects.length)
- {
- if((_loc11_ = game.fixedObjects[_loc9_]).blocktype < 6 || (_loc11_.blocktype > 61 && _loc11_.blocktype < 66 || _loc11_.blocktype == 52 || _loc11_.blocktype == 54) && !_loc11_.open)
- {
- if(_loc7_ > _loc11_.topside && _loc7_ - charheight < _loc11_.bottomside)
- {
- if(mc.x - charwidth / 2 >= _loc11_.rightside && _loc8_ - charwidth / 2 <= _loc11_.rightside)
- {
- _loc8_ = _loc11_.rightside + charwidth / 2;
- hitWallLeft = true;
- dx = 0;
- break;
- }
- if(mc.x + charwidth / 2 <= _loc11_.leftside && _loc8_ + charwidth / 2 >= _loc11_.leftside)
- {
- _loc8_ = _loc11_.leftside - charwidth / 2;
- hitWallRight = true;
- dx = 0;
- break;
- }
- }
- }
- else if(_loc11_.isHitting(mc.hitbit))
- {
- if(_loc11_.blocktype == 19 || _loc11_.blocktype == 20 || _loc11_.blocktype == 6 || _loc11_.blocktype == 7 || _loc11_.blocktype == 8 || _loc11_.blocktype == 9 || _loc11_.blocktype == 10)
- {
- _loc10_ = true;
- inAir = false;
- _loc14_ = false;
- _loc15_ = game.getColFromX(mc.x);
- _loc16_ = game.getRowFromY(mc.y);
- if(game.getTypeAt(_loc15_,_loc16_ + 1) < 6)
- {
- _loc14_ = true;
- }
- if(moveUp || moveDown && !_loc14_)
- {
- isClimbing = true;
- _loc5_ = "climb";
- _loc8_ = _loc11_.leftside + charwidth - 2;
- }
- }
- if(_loc11_.blocktype > 40 && _loc11_.blocktype < 51)
- {
- if(_loc11_.blocktype == 41)
- {
- game.gotStars[game.curLevel][_loc11_.id] = 1;
- }
- if(_loc11_.blocktype == 42)
- {
- game.gotLives[game.curLevel][_loc11_.id] = 1;
- }
- game.getPowerup(_loc11_);
- }
- if(_loc11_.blocktype > 50 && _loc11_.blocktype < 56)
- {
- game.hitTrap(_loc11_);
- }
- if(_loc11_.blocktype > 32 && _loc11_.blocktype < 41)
- {
- if(mc.x > _loc11_.leftside + 8 && mc.x < _loc11_.rightside - 8)
- {
- isTouchingDoor = true;
- jump = false;
- if(moveUp && !isOpening && !inAir)
- {
- if(_loc11_.blocktype == 36)
- {
- if(!hasRuby)
- {
- break;
- }
- if(!game.placedRuby)
- {
- game.placedRuby = true;
- }
- _loc8_ = _loc11_.leftside + 34;
- }
- else
- {
- _loc8_ = _loc11_.leftside + 20;
- }
- _loc11_["block" + _loc11_.blocktype].play();
- mc.gotoAndPlay("open");
- _loc5_ = "open";
- isOpening = true;
- if(_loc11_.blocktype == 38 && game.curLevel == 17)
- {
- hasPulledLever = true;
- }
- break;
- }
- }
- }
- }
- _loc9_++;
- }
- if(!_loc10_)
- {
- isClimbing = false;
- }
- if(_loc8_ > 630)
- {
- _loc8_ = 630;
- hitWallRight = true;
- dx = 0;
- }
- if(_loc8_ < 10)
- {
- _loc8_ = 10;
- hitWallLeft = true;
- dx = 0;
- }
- mc.x = _loc8_;
- mc.y = _loc7_;
- if(inAir)
- {
- _loc5_ = "jump";
- }
- else
- {
- isJumping = false;
- }
- animstate = _loc5_;
- if(isHit)
- {
- animstate = "hit";
- }
- if(animstate == "walk" || animstate == "crouch" || animstate == "climb" && (moveLeft || moveRight || moveUp || moveDown) && !isHit)
- {
- animstep += timeDiff / 60;
- if(animstep > walkAnimation.length)
- {
- animstep = 0;
- }
- if(isClimbing && (moveUp || moveDown))
- {
- mc.gotoAndStop(walkAnimation[Math.floor(animstep)] + 25);
- }
- else if(moveDown && !isClimbing)
- {
- if(moveLeft || moveRight)
- {
- mc.gotoAndStop(walkAnimation[Math.floor(animstep)] + 12);
- }
- }
- else
- {
- mc.gotoAndStop(walkAnimation[Math.floor(animstep)]);
- }
- }
- else if(animstate == "jump" && !isJumping && !isClimbing && !isHit)
- {
- isJumping = true;
- mc.gotoAndPlay("jump");
- }
- if(animstate == "skid" && !isSkidding && !isHit)
- {
- isSkidding = true;
- game.sounds.sintaland.play();
- mc.gotoAndPlay(animstate);
- }
- if(animstate == "stand" && !isSkidding && !isHit)
- {
- if(mc.currentLabel != "stand")
- {
- mc.gotoAndPlay("stand");
- }
- }
- if(moveDown && !isCrouching && !inAir && !isHit)
- {
- isCrouching = true;
- charheight = 30;
- mc.gotoAndPlay(animstate);
- }
- if(!isCrouching)
- {
- charheight = 41;
- }
- if(!moveDown && animstate == "crouch" && !isRising && !isHit)
- {
- isRising = true;
- animstate = "rise";
- mc.gotoAndPlay(animstate);
- }
- if(_loc6_ != direction)
- {
- direction = _loc6_;
- mc.scaleX = direction;
- }
- }
-
- public function resetLevel(param1:Event) : *
- {
- if(game.playerLives <= 0)
- {
- game.gameOver();
- }
- else
- {
- init();
- game.resetLevel();
- }
- }
-
- public function addArrows(param1:int) : *
- {
- numArrows += param1;
- if(numArrows > maxArrows)
- {
- numArrows = maxArrows;
- }
- }
-
- public function endDie() : *
- {
- var _loc1_:Timer = null;
- _loc1_ = new Timer(1500,1);
- _loc1_.start();
- _loc1_.addEventListener(TimerEvent.TIMER_COMPLETE,resetLevel);
- }
-
- public function checkDead() : *
- {
- if(curHealth <= 0)
- {
- isPunched = false;
- die(damType);
- }
- else
- {
- isHit = false;
- if(game.pressDown)
- {
- moveDown = true;
- }
- if(game.pressUp)
- {
- moveUp = true;
- }
- if(game.pressLeft)
- {
- moveLeft = true;
- }
- if(game.pressRight)
- {
- moveRight = true;
- }
- }
- }
-
- public function setShooting(param1:Boolean) : *
- {
- isShooting = param1;
- mc.lhand.arrowinner.visible = param1;
- }
- }
- }
-