/// <summary> /// Builds main character with its base spritesheet and animations. /// </summary> public Slime() : base(spriteSheetPath, new Point(32, 42)) { Category = "Enemy"; TimeSpan stoppedFrameDuration = TimeSpan.FromMilliseconds(300); SpriteSheet.AddAnimation("stopped", "left", line: 3, frameDuration: stoppedFrameDuration); SpriteSheet.AddAnimation("stopped", "down", line: 2, frameDuration: stoppedFrameDuration); SpriteSheet.AddAnimation("stopped", "right", line: 1, frameDuration: stoppedFrameDuration); SpriteSheet.AddAnimation("stopped", "up", line: 0, frameDuration: stoppedFrameDuration); TimeSpan walkFrameDuration = TimeSpan.FromMilliseconds(100); SpriteSheet.AddAnimation("walking", "left", line: 3, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "down", line: 2, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "right", line: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "up", line: 0, frameDuration: walkFrameDuration); Padding = new Rectangle(6, 11, 6, 6); Speed = 32 * 3; Health = new Container(1); Look(new Vector2(0, 1), true); AddBehavior( new HitOnTouchBehavior(e => e.Category == "Player"), new FollowBehavior("Player", 5) { MaxDistance = 32 * 4 }, new WalkAroundBehavior() ); }
public SavePoint() : base(@"sprites/Objects/SavePoint.png", new Point(32, 32)) { OverlapEntities = true; Health = null; SpriteSheet.AddAnimation("stopped", "down", line: 0, frameDuration: TimeSpan.FromMilliseconds(500)); }
/// <summary> /// Builds main character with its base spritesheet and animations. /// </summary> public Crab() : base(spriteSheetPath, new Point(32, 32)) { Category = "Enemy"; TimeSpan walkFrameDuration = TimeSpan.FromMilliseconds(100); SpriteSheet.AddAnimation("stopped", "down", line: 0, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped", "left", line: 1, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped", "right", line: 2, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped", "up", line: 3, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "down", line: 0, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "left", line: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "right", line: 2, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "up", line: 3, frameDuration: walkFrameDuration); Padding = new Rectangle(6, 11, 6, 6); Speed = 100; Health = new Container(2); Look(new Vector2(0, 1), true); AddBehavior( new HitOnTouchBehavior(), new FollowBehavior("Player", 5) { MaxDistance = 32 * 3 } ); }
public Entrance(int dungeon) : base(@"sprites/Objects/Empty.png", new Point(32, 32)) { IsInvisible = true; Dungeon = dungeon; OverlapEntities = true; Health = null; SpriteSheet.AddAnimation("stopped", "down", line: 0, count: 1, frameDuration: TimeSpan.FromDays(1)); }
public Bow() : base(@"sprites\Objects\bow.png", new Point(30, 30)) { OverlapEntities = true; Origin = new Vector2(Size.X / 2, Size.Y / 2); SpriteSheet.AddAnimation("unloaded", "default", line: 0, frameDuration: TimeSpan.Zero); SpriteSheet.AddAnimation("loaded", "default", line: 1, frameDuration: TimeSpan.Zero); }
public Poltergeist() : base("sprites/characters/oldman.png", 4, 1) { TimeSpan stoppedFrameDuration = TimeSpan.FromMilliseconds(300); SpriteSheet.AddAnimation("stopped", "down", frameIndexes: new int[] { 0 }, frameDuration: stoppedFrameDuration); SpriteSheet.AddAnimation("stopped", "left", frameIndexes: new int[] { 1 }, frameDuration: stoppedFrameDuration); SpriteSheet.AddAnimation("stopped", "right", frameIndexes: new int[] { 2 }, frameDuration: stoppedFrameDuration); SpriteSheet.AddAnimation("stopped", "top", frameIndexes: new int[] { 3 }, frameDuration: stoppedFrameDuration); Padding = new Rectangle(0, 11, 0, 0); Health = new Container(10); Look(new Vector2(0, 1), true); }
/// <summary> /// Builds main character with its base spritesheet and animations. /// </summary> public Player() : base(spriteSheetPath, 9, 13) { Category = "Player"; TimeSpan walkFrameDuration = TimeSpan.FromMilliseconds(100); SpriteSheet.AddAnimation("stopped", "up", line: 0, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped", "left", line: 1, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped", "down", line: 2, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped", "right", line: 3, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "up", line: 0, skipFrames: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "left", line: 1, skipFrames: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "down", line: 2, skipFrames: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "right", line: 3, skipFrames: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("dying", "default", line: 12, count: 6, frameDuration: walkFrameDuration, repeat: false); Padding = new Rectangle(22, 32, 22, 2); Speed = 32 * 5; Health = new Container(8); Look(new Vector2(0, 1), true); GetBehavior <BlinkBehavior>().BlinkDuration = TimeSpan.FromSeconds(1); _controller1Behavior = new InputBehavior(InputType.Controller, 0); _controller2Behavior = new InputBehavior(InputType.Controller, 1); _controller2Behavior.OnEnter += controllerBehavior_OnEnter; _keyboardBehavior = new InputBehavior(InputType.Keyboard); _keyboardBehavior.OnEnter += controllerBehavior_OnEnter; AddBehavior( _controller1Behavior, _keyboardBehavior ); Arrows = new Container(50); Magic = new Container(10); DisplayName = "Player 1"; }
public BoomerangSkeleton() : base(spriteSheetPath, 3, 4) { Category = "Enemy"; TimeSpan walkFrameDuration = TimeSpan.FromMilliseconds(100); SpriteSheet.AddAnimation("stopped", "down", line: 0, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped", "left", line: 1, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped", "right", line: 2, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped", "up", line: 3, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "down", line: 0, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "left", line: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "right", line: 2, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "up", line: 3, frameDuration: walkFrameDuration); Padding = new Rectangle(4, 38, 4, 2); Speed = 32 * 3; Health = new Container(10); Magic = new Container(10); CurrentDirection = new Vector2(0, 1); AddBehavior( new HitOnTouchBehavior(e => e.Category == "Player"), new SwordAttackBehavior("Player") { MaxDistance = 32 * 2 }, new AvoidBehavior(e => e.Category == "Player", 32 * 4), new BoomerangAttackBehavior("Player", shootDistance: 32 * 30, maxDistance: 32 * 32),// { MinDistance = 5 * 32 }, new FollowBehavior("Player", 5) { MaxDistance = float.MaxValue } ); AddWeapon(new Boomerang()); AddWeapon(new Sword()); GetBehavior <DropItemsBehavior>().AutomaticAllowWeapons = true; }
public WaterDragon() : base(spriteSheetPath, new Point(149, 129)) { Category = "Enemy"; TimeSpan walkFrameDuration = TimeSpan.FromMilliseconds(100); SpriteSheet.AddAnimation("stopped", "down", line: 0, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped", "left", line: 1, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped", "right", line: 2, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped", "up", line: 3, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "down", line: 0, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "left", line: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "right", line: 2, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "up", line: 3, frameDuration: walkFrameDuration); Padding = new Rectangle(23, 50, 23, 20); _baseSpeed = 32 * 4; Speed = 32 * 4; Health = new Container(10); Magic = new Container(1); Health.ValueChanged += Health_ValueChanged; Magic.ValueChanged += Magic_ValueChanged; Look(new Vector2(0, 1), true); AddBehavior( new HitOnTouchBehavior(e => e.Category == "Player"), new FireWandAttackBehavior("Player", 32 * 5, 32 * 10), new WalkAroundBehavior { MaxStoppedTime = TimeSpan.Zero, SpeedMultiplier = 1 } ); AddWeapon(new FireWand { MaxFireBallFlyTime = TimeSpan.FromSeconds(2) }); Hold(new HealthContainer("WaterDragon")); }
public Goon() : base(spriteSheetPath, new Point(64, 64)) { Category = "Enemy"; TimeSpan walkFrameDuration = TimeSpan.FromMilliseconds(100); SpriteSheet.AddAnimation("stopped", "up", line: 8, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped", "left", line: 9, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped", "down", line: 10, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped", "right", line: 11, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "up", line: 8, count: 6, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "left", line: 9, count: 6, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "down", line: 10, count: 6, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "right", line: 11, count: 6, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("dying", "default", line: 20, count: 6, frameDuration: walkFrameDuration, repeat: false); Padding = new Rectangle(28, 36, 28, 2); Speed = 32 * 3; Health = new Container(4); Look(new Vector2(0, 1), true); AddBehavior( new AttackTheAttackerBehavior(), new HitOnTouchBehavior(e => e.Category == "Player"), new FollowBehavior("Player", 5) { MaxDistance = 32 * 3 }, new BowAttackBehavior("Player", shootDistance: 32 * 30, maxDistance: 32 * 32), new WalkAroundBehavior() ); AddWeapon(new Bow()); Arrows = new Container(20); }
/// <summary> /// Builds main character with its base spritesheet and animations. /// </summary> public Bat() : base(spriteSheetPath, new Point(18, 16)) { Category = "Enemy"; TimeSpan walkFrameDuration = TimeSpan.FromMilliseconds(50); SpriteSheet.AddAnimation("default", "default", line: 0, frameDuration: walkFrameDuration); Padding = new Rectangle(1, 2, 1, 6); Speed = 32 * 4; Health = new Container(1); CurrentDirection = new Vector2(0, 1); AddBehavior( new HitOnTouchBehavior(e => e.Category == "Player"), new TouchAndDodgeBehavior("Player", 32 * 2) ); }
public Skeleton() : base(spriteSheetPath, new Point(32, 64)) { Category = "Enemy"; TimeSpan walkFrameDuration = TimeSpan.FromMilliseconds(100); SpriteSheet.AddAnimation("stopped", "down", line: 0, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped", "left", line: 1, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped", "right", line: 2, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped", "up", line: 3, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "down", line: 0, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "left", line: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "right", line: 2, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "up", line: 3, frameDuration: walkFrameDuration); Padding = new Rectangle(4, 38, 4, 2); Speed = 32 * 3; Health = new Container(5); CurrentDirection = new Vector2(0, 1); AddBehavior( new HitOnTouchBehavior(e => e.Category == "Player"), new SwordAttackBehavior("Player") { MaxDistance = 300 }, new FollowBehavior("Player", 5) { MaxDistance = float.MaxValue } //, //new WalkAroundBehavior { MaxStoppedTime = TimeSpan.FromSeconds(2) } ); AddWeapon(new Sword()); }
public Knight() : base(spriteSheetPath, 9, 13) { Category = "Enemy"; TimeSpan walkFrameDuration = TimeSpan.FromMilliseconds(100); SpriteSheet.AddAnimation("stopped", "up", line: 0, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped", "left", line: 1, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped", "down", line: 2, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped", "right", line: 3, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "up", line: 0, skipFrames: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "left", line: 1, skipFrames: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "down", line: 2, skipFrames: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "right", line: 3, skipFrames: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("dying", "default", line: 12, count: 6, frameDuration: walkFrameDuration, repeat: false); Padding = new Rectangle(4, 20, 4, 2); Speed = 32 * 2.5f; Look(new Vector2(0, 1), true); AddBehavior( new HitOnTouchBehavior(e => e.Category == "Player"), new SwordAttackBehavior("Player") { MaxDistance = 300 }, new WalkAroundBehavior() ); AddWeapon(new Sword()); Hold(new HealthContainer("Knight")); }
public MasterGoon() : base(spriteSheetPath, new Point(96, 96)) { Category = "Enemy"; TimeSpan walkFrameDuration = TimeSpan.FromMilliseconds(100); SpriteSheet.AddAnimation("stopped", "up", line: 8, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped", "left", line: 9, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped", "down", line: 10, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped", "right", line: 11, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "up", line: 8, count: 6, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "left", line: 9, count: 6, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "down", line: 10, count: 6, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "right", line: 11, count: 6, frameDuration: walkFrameDuration); Padding = new Rectangle(28, 36, 28, 2); Speed = 32 * 3.5f; Health = new Container(8); Look(new Vector2(0, 1), true); AddBehavior( new HitOnTouchBehavior(e => e.Category == "Player"), new AvoidBehavior(e => e.Category == "Player", 32 * 4), new BowAttackBehavior("Player", shootDistance: 32 * 30, maxDistance: 32 * 32), new WalkAroundBehavior() ); AddWeapon(new Bow()); GetBehavior <DropItemsBehavior>().AutomaticAllowWeapons = true; Arrows = new Container(20); }
public Zombie() : base(spriteSheetPath, new Point(32, 64)) { Category = "Enemy"; TimeSpan walkFrameDuration = TimeSpan.FromMilliseconds(100); SpriteSheet.AddAnimation("stopped", "down", line: 0, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped", "left", line: 1, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped", "right", line: 2, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped", "up", line: 3, count: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "down", line: 0, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "left", line: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "right", line: 2, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "up", line: 3, frameDuration: walkFrameDuration); Padding = new Rectangle(4, 38, 4, 2); Speed = 32 * 3; Health = new Container(3); Look(new Vector2(0, 1), true); AddBehavior( new HitOnTouchBehavior(e => e.Category == "Player"), new FollowBehavior("Player", 5) { MaxDistance = 32 * 10 }, new WalkAroundBehavior { MaxStoppedTime = TimeSpan.Zero } ); }
public Item() : base(@"sprites/Objects/Empty.png", new Point(32, 32)) { OverlapEntities = false; Health = null; SpriteSheet.AddAnimation("stopped", "down", line: 0, count: 1, frameDuration: TimeSpan.FromDays(1)); }
/// <summary> /// Builds main character with its base spritesheet and animations. /// </summary> public SlimeWorm() : base(spriteSheetPath, new Point(40, 34)) { Category = "Enemy"; TimeSpan stoppedFrameDuration = TimeSpan.FromMilliseconds(300); SpriteSheet.AddAnimation("stopped", "left", line: 3, frameDuration: stoppedFrameDuration); SpriteSheet.AddAnimation("stopped", "down", line: 2, frameDuration: stoppedFrameDuration); SpriteSheet.AddAnimation("stopped", "right", line: 1, frameDuration: stoppedFrameDuration); SpriteSheet.AddAnimation("stopped", "up", line: 0, frameDuration: stoppedFrameDuration); TimeSpan walkFrameDuration = TimeSpan.FromMilliseconds(100); SpriteSheet.AddAnimation("walking", "left", line: 3, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "down", line: 2, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "right", line: 1, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking", "up", line: 0, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("stopped-front", "left", line: 7, frameDuration: stoppedFrameDuration); SpriteSheet.AddAnimation("stopped-front", "down", line: 6, frameDuration: stoppedFrameDuration); SpriteSheet.AddAnimation("stopped-front", "right", line: 5, frameDuration: stoppedFrameDuration); SpriteSheet.AddAnimation("stopped-front", "up", line: 4, frameDuration: stoppedFrameDuration); SpriteSheet.AddAnimation("walking-front", "left", line: 7, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking-front", "down", line: 6, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking-front", "right", line: 5, frameDuration: walkFrameDuration); SpriteSheet.AddAnimation("walking-front", "up", line: 4, frameDuration: walkFrameDuration); //Padding = new Rectangle(6, 11, 6, 6); Speed = 32 * 6; _frontHealth = new Container(8); _normalHealth = new Container(2); Health = _normalHealth; Look(new Vector2(0, 1), true); var chainBehavior = new ChainBehavior <SlimeWorm> { MaxDistance = 32 * 7 }; AddBehavior( new HitOnTouchBehavior(e => e.Category == "Player"), chainBehavior, new AvoidBehavior(e => { if (e == this || chainBehavior.Following != e) { return(false); } var beh = e.GetBehavior <ChainBehavior <SlimeWorm> >(); return(beh != null && beh.Following == null); }), new SpiralAttackBehavior("Player", 32 * 8) { MaxDistance = 32 * 12 }, new WalkAroundBehavior { MaxStoppedTime = TimeSpan.Zero, MaxWalkingTime = TimeSpan.MaxValue, SpeedMultiplier = 1 } ); GetBehavior <DropItemsBehavior>().DropOnDeath((gameTime, level) => { if (!level.GetEntities <SlimeWorm>().Any(e => e != this)) { return(new HealthContainer("SlimeWorm")); } return(null); }); }