public FrostDemon(MapSection section) : base(EnemyTypes.FrostDemon, EnemyConstants.GetFrostDemonProperties(), "Entities/FrostDemon.png", section) { _ai = new RangeAI(this, EnemyConstants.FrostDemonAggroRange, EnemyConstants.FrostDemonWanderLength, new RangeAttack(this, 14, 17, MissileTypes.FrostDemonMissile, EnemyConstants.FrostDemonMissileCooldown)); HitboxSize = 0.93f; Width = 64; Height = 64; AttackRange = 400; Animations = new AnimationList(); var spawnAnimation = new Animation(AnimationTypes.Spawn); spawnAnimation.AddFrame(new Rectangle(0, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.05), SpawnedFunc); Animations.Add(spawnAnimation); var walkAnimation = new Animation(AnimationTypes.Move); walkAnimation.AddFrame(new Rectangle(TextureSize * 0, TextureSize * 2, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); walkAnimation.AddFrame(new Rectangle(TextureSize * 1, TextureSize * 2, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); walkAnimation.AddFrame(new Rectangle(TextureSize * 2, TextureSize * 2, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); walkAnimation.AddFrame(new Rectangle(TextureSize * 3, TextureSize * 2, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); walkAnimation.AddFrame(new Rectangle(TextureSize * 4, TextureSize * 2, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); walkAnimation.AddFrame(new Rectangle(TextureSize * 5, TextureSize * 2, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); walkAnimation.AddFrame(new Rectangle(TextureSize * 6, TextureSize * 2, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); walkAnimation.AddFrame(new Rectangle(TextureSize * 7, TextureSize * 2, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); Animations.Add(walkAnimation); var attackAnimation = new Animation(AnimationTypes.Attack); attackAnimation.AddFrame(new Rectangle(TextureSize * 0, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); attackAnimation.AddFrame(new Rectangle(TextureSize * 1, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); attackAnimation.AddFrame(new Rectangle(TextureSize * 2, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); attackAnimation.AddFrame(new Rectangle(TextureSize * 3, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); attackAnimation.AddFrame(new Rectangle(TextureSize * 4, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); attackAnimation.AddFrame(new Rectangle(TextureSize * 5, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25), AttackedFunc); attackAnimation.AddFrame(new Rectangle(TextureSize * 6, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); attackAnimation.AddFrame(new Rectangle(TextureSize * 7, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); attackAnimation.AddFrame(new Rectangle(TextureSize * 7, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.05), DoneAttackingFunc); Animations.Add(attackAnimation); var dieAnimation = new Animation(AnimationTypes.Death); dieAnimation.AddFrame(new Rectangle(TextureSize * 0, TextureSize * 4, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25), OnDeath); dieAnimation.AddFrame(new Rectangle(TextureSize * 1, TextureSize * 4, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); dieAnimation.AddFrame(new Rectangle(TextureSize * 2, TextureSize * 4, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); dieAnimation.AddFrame(new Rectangle(TextureSize * 3, TextureSize * 4, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); dieAnimation.AddFrame(new Rectangle(TextureSize * 4, TextureSize * 4, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); dieAnimation.AddFrame(new Rectangle(TextureSize * 5, TextureSize * 4, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); dieAnimation.AddFrame(new Rectangle(TextureSize * 6, TextureSize * 4, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); dieAnimation.AddFrame(new Rectangle(TextureSize * 7, TextureSize * 4, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); dieAnimation.AddFrame(new Rectangle(TextureSize * 0, TextureSize * 5, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); dieAnimation.AddFrame(new Rectangle(TextureSize * 1, TextureSize * 5, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); dieAnimation.AddFrame(new Rectangle(TextureSize * 2, TextureSize * 5, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); dieAnimation.AddFrame(new Rectangle(TextureSize * 3, TextureSize * 5, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); dieAnimation.AddFrame(new Rectangle(TextureSize * 4, TextureSize * 5, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); dieAnimation.AddFrame(new Rectangle(TextureSize * 5, TextureSize * 5, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); dieAnimation.AddFrame(new Rectangle(TextureSize * 6, TextureSize * 5, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); dieAnimation.AddFrame(new Rectangle(TextureSize * 7, TextureSize * 5, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25), OnDeathFinished); Animations.Add(dieAnimation); }
public Zombie(MapSection section) : base(EnemyTypes.Zombie, EnemyConstants.GetZombieProperties(), "Entities/Zombie.png", section) { _ai = new MeleeAI(this, EnemyConstants.ZombieAggroRange, new Melee(this, EnemyConstants.ZombieMinDamage, EnemyConstants.ZombieMaxDamage), EnemyConstants.ZombieWanderLength); HitboxSize = 0.8f; Width = 64; Height = 64; AttackRange = EnemyConstants.ZombieAttackRange; Animations = new AnimationList(); var spawnAnimation = new Animation(AnimationTypes.Spawn); spawnAnimation.AddFrame(new Rectangle(TextureSize * 13, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.5)); spawnAnimation.AddFrame(new Rectangle(TextureSize * 14, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.5)); spawnAnimation.AddFrame(new Rectangle(TextureSize * 14, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.05), SpawnedFunc); Animations.Add(spawnAnimation); var walkAnimation = new Animation(AnimationTypes.Move); walkAnimation.AddFrame(new Rectangle(TextureSize * 9, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.4)); walkAnimation.AddFrame(new Rectangle(TextureSize * 10, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.4)); walkAnimation.AddFrame(new Rectangle(TextureSize * 11, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.4)); walkAnimation.AddFrame(new Rectangle(TextureSize * 12, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.4)); Animations.Add(walkAnimation); var attackAnimation = new Animation(AnimationTypes.Attack); attackAnimation.AddFrame(new Rectangle(TextureSize * 7, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.35)); attackAnimation.AddFrame(new Rectangle(TextureSize * 8, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.4), AttackedFunc); attackAnimation.AddFrame(new Rectangle(TextureSize * 8, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.1), DoneAttackingFunc); Animations.Add(attackAnimation); var dieAnimation = new Animation(AnimationTypes.Death); dieAnimation.AddFrame(new Rectangle(TextureSize * 0, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.1), OnDeath); dieAnimation.AddFrame(new Rectangle(TextureSize * 0, 1, TextureSize, TextureSize), TimeSpan.FromSeconds(0.1)); dieAnimation.AddFrame(new Rectangle(TextureSize * 0, 2, TextureSize, TextureSize), TimeSpan.FromSeconds(0.1)); dieAnimation.AddFrame(new Rectangle(TextureSize * 0, 3, TextureSize, TextureSize), TimeSpan.FromSeconds(0.1)); dieAnimation.AddFrame(new Rectangle(TextureSize * 0, 4, TextureSize, TextureSize), TimeSpan.FromSeconds(0.1)); dieAnimation.AddFrame(new Rectangle(TextureSize * 0, 5, TextureSize, TextureSize), TimeSpan.FromSeconds(0.1)); dieAnimation.AddFrame(new Rectangle(TextureSize * 0, 6, TextureSize, TextureSize), TimeSpan.FromSeconds(0.1)); dieAnimation.AddFrame(new Rectangle(TextureSize * 6, 6, TextureSize, TextureSize), TimeSpan.FromSeconds(0.1), OnDeathFinished); Animations.Add(dieAnimation); }
public Archer(MapSection section) : base(EnemyTypes.Archer, EnemyConstants.GetArcherProperties(), "Entities/Archer.png", section) { _ai = new RangeAI(this, EnemyConstants.ArcherAggroRange, EnemyConstants.ArcherWanderLength, new RangeAttack(this, 12, 18, MissileTypes.Arrow, EnemyConstants.ArcherArrowCooldown)); HitboxSize = 0.93f; Width = 64; Height = 64; AttackRange = 625; Animations = new AnimationList(); var spawnAnimation = new Animation(AnimationTypes.Spawn); spawnAnimation.AddFrame(new Rectangle(0, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.05), SpawnedFunc); Animations.Add(spawnAnimation); var walkAnimation = new Animation(AnimationTypes.Move); walkAnimation.AddFrame(new Rectangle(TextureSize * 0, TextureSize * 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); walkAnimation.AddFrame(new Rectangle(TextureSize * 1, TextureSize * 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); walkAnimation.AddFrame(new Rectangle(TextureSize * 2, TextureSize * 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); walkAnimation.AddFrame(new Rectangle(TextureSize * 3, TextureSize * 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); Animations.Add(walkAnimation); var attackAnimation = new Animation(AnimationTypes.Attack); attackAnimation.AddFrame(new Rectangle(TextureSize * 0, TextureSize * 1, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); attackAnimation.AddFrame(new Rectangle(TextureSize * 1, TextureSize * 1, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); attackAnimation.AddFrame(new Rectangle(TextureSize * 2, TextureSize * 1, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25), AttackedFunc); attackAnimation.AddFrame(new Rectangle(TextureSize * 2, TextureSize * 1, TextureSize, TextureSize), TimeSpan.FromSeconds(0.05), DoneAttackingFunc); Animations.Add(attackAnimation); var hitAnimation = new Animation(AnimationTypes.Damaged); hitAnimation.AddFrame(new Rectangle(TextureSize * 3, TextureSize * 1, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25)); Animations.Add(hitAnimation); var dieAnimation = new Animation(AnimationTypes.Death); dieAnimation.AddFrame(new Rectangle(TextureSize * 3, TextureSize * 1, TextureSize, TextureSize), TimeSpan.FromSeconds(0.35), OnDeath); dieAnimation.AddFrame(new Rectangle(TextureSize * 3, TextureSize * 1, TextureSize, TextureSize), TimeSpan.FromSeconds(0.25), OnDeathFinished); Animations.Add(dieAnimation); }
public Dog(MapSection section) : base(EnemyTypes.Dog, EnemyConstants.GetDogProperties(), "Entities/Dog.png", section) { _ai = new MeleeAI(this, EnemyConstants.DogAggroRange, new Melee(this, 6, 8), EnemyConstants.DogWanderLength); HitboxSize = 0.8f; Width = 64; Height = 64; AttackRange = 48; Animations = new AnimationList(); var spawnAnimation = new Animation(AnimationTypes.Spawn); spawnAnimation.AddFrame(new Rectangle(TextureSize * 6, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.5)); spawnAnimation.AddFrame(new Rectangle(TextureSize * 7, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.5)); spawnAnimation.AddFrame(new Rectangle(TextureSize * 7, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.05), SpawnedFunc); Animations.Add(spawnAnimation); var walkAnimation = new Animation(AnimationTypes.Move); walkAnimation.AddFrame(new Rectangle(TextureSize * 2, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.4)); walkAnimation.AddFrame(new Rectangle(TextureSize * 3, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.4)); walkAnimation.AddFrame(new Rectangle(TextureSize * 4, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.4)); walkAnimation.AddFrame(new Rectangle(TextureSize * 5, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.4)); Animations.Add(walkAnimation); var attackAnimation = new Animation(AnimationTypes.Attack); attackAnimation.AddFrame(new Rectangle(TextureSize * 0, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.35)); attackAnimation.AddFrame(new Rectangle(TextureSize * 1, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.4), AttackedFunc); attackAnimation.AddFrame(new Rectangle(TextureSize * 1, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.1), DoneAttackingFunc); Animations.Add(attackAnimation); var dieAnimation = new Animation(AnimationTypes.Death); dieAnimation.AddFrame(new Rectangle(TextureSize * 7, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.5), OnDeath); dieAnimation.AddFrame(new Rectangle(TextureSize * 6, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.5)); dieAnimation.AddFrame(new Rectangle(TextureSize * 6, 0, TextureSize, TextureSize), TimeSpan.FromSeconds(0.1), OnDeathFinished); Animations.Add(dieAnimation); }
public SkeletonKing(MapSection section) : base(EnemyTypes.SkeletonKing, EnemyConstants.GetSkeletonKingProperties(), "Entities/Zomb-King.png", section) { _ai = new SkeletonKingAI(this, new Melee(this, EnemyConstants.SkeletonKingMinDamage, EnemyConstants.SkeletonKingMaxDamage, null, EnemyConstants.SkeletonKingKnockback, EnemyConstants.SkeletonKingKnockbackMillis), new SkeletonKingBlast(this)); HitboxSize = 0.8f; Width = 312; Height = 312; AttackRange = 130; Spawned = true; Animations = new AnimationList(); var walkAnimation = new Animation(AnimationTypes.Move, new BodyPart(BodyPartType.Custom, 470, 370)); walkAnimation.AddFrame(0, 0, TimeSpan.FromSeconds(0.3)); walkAnimation.AddFrame(1, 0, TimeSpan.FromSeconds(0.3)); walkAnimation.AddFrame(2, 0, TimeSpan.FromSeconds(0.3)); walkAnimation.AddFrame(1, 0, TimeSpan.FromSeconds(0.3)); walkAnimation.AddFrame(0, 0, TimeSpan.FromSeconds(0.3)); walkAnimation.AddFrame(3, 0, TimeSpan.FromSeconds(0.3)); walkAnimation.AddFrame(4, 0, TimeSpan.FromSeconds(0.3)); walkAnimation.AddFrame(3, 0, TimeSpan.FromSeconds(0.3)); Animations.Add(walkAnimation); var attackAnimation = new Animation(AnimationTypes.Attack, new BodyPart(BodyPartType.Custom, 470, 370)); attackAnimation.AddFrame(1, 1, TimeSpan.FromSeconds(0.05)); attackAnimation.AddFrame(2, 1, TimeSpan.FromSeconds(0.05)); attackAnimation.AddFrame(3, 1, TimeSpan.FromSeconds(0.05)); attackAnimation.AddFrame(4, 1, TimeSpan.FromSeconds(0.05)); attackAnimation.AddFrame(5, 1, TimeSpan.FromSeconds(0.05), Rotate); attackAnimation.AddFrame(6, 1, TimeSpan.FromSeconds(0.05), Rotate); attackAnimation.AddFrame(7, 1, TimeSpan.FromSeconds(0.05), Rotate); attackAnimation.AddFrame(0, 2, TimeSpan.FromSeconds(0.05), Rotate); attackAnimation.AddFrame(1, 2, TimeSpan.FromSeconds(0.05), AttackedFunc); attackAnimation.AddFrame(2, 2, TimeSpan.FromSeconds(0.05), Unrotate); attackAnimation.AddFrame(3, 2, TimeSpan.FromSeconds(0.05), Unrotate); attackAnimation.AddFrame(4, 2, TimeSpan.FromSeconds(0.05), Unrotate); attackAnimation.AddFrame(5, 2, TimeSpan.FromSeconds(0.05), Unrotate); attackAnimation.AddFrame(5, 2, TimeSpan.FromSeconds(0.05), DoneAttackingFunc); Animations.Add(attackAnimation); var castingAnimation = new Animation(AnimationTypes.FireAttack, new BodyPart(BodyPartType.Custom, 470, 370)); castingAnimation.AddFrame(7, 0, TimeSpan.FromSeconds(0.15), BecomeInvulnerable); castingAnimation.AddFrame(0, 1, TimeSpan.FromSeconds(0.65)); castingAnimation.AddFrame(7, 0, TimeSpan.FromSeconds(0.15)); castingAnimation.AddFrame(5, 0, TimeSpan.FromSeconds(0.1), CastedFunc); castingAnimation.AddFrame(6, 0, TimeSpan.FromSeconds(0.3)); castingAnimation.AddFrame(5, 0, TimeSpan.FromSeconds(0.15)); castingAnimation.AddFrame(5, 0, TimeSpan.FromSeconds(0.05), DoneAttackingFunc); Animations.Add(castingAnimation); var dieAnimation = new Animation(AnimationTypes.Death, new BodyPart(BodyPartType.Custom, 470, 370)); dieAnimation.AddFrame(6, 2, TimeSpan.FromSeconds(0.1), OnDeath); dieAnimation.AddFrame(7, 2, TimeSpan.FromSeconds(0.1), OnDeathFinished); Animations.Add(dieAnimation); var walkEnragedAnimation = new Animation(AnimationTypes.MoveEnraged, new BodyPart(BodyPartType.Custom, 470, 370)); walkEnragedAnimation.AddFrame(0, 3, TimeSpan.FromSeconds(0.22)); walkEnragedAnimation.AddFrame(1, 3, TimeSpan.FromSeconds(0.22)); walkEnragedAnimation.AddFrame(2, 3, TimeSpan.FromSeconds(0.22)); walkEnragedAnimation.AddFrame(1, 3, TimeSpan.FromSeconds(0.22)); walkEnragedAnimation.AddFrame(0, 3, TimeSpan.FromSeconds(0.22)); walkEnragedAnimation.AddFrame(3, 3, TimeSpan.FromSeconds(0.22)); walkEnragedAnimation.AddFrame(4, 3, TimeSpan.FromSeconds(0.22)); walkEnragedAnimation.AddFrame(3, 3, TimeSpan.FromSeconds(0.22)); Animations.Add(walkEnragedAnimation); var attackEnragedAnimation = new Animation(AnimationTypes.AttackEnraged, new BodyPart(BodyPartType.Custom, 470, 370)); attackEnragedAnimation.AddFrame(1, 4, TimeSpan.FromSeconds(0.04)); attackEnragedAnimation.AddFrame(2, 4, TimeSpan.FromSeconds(0.04)); attackEnragedAnimation.AddFrame(3, 4, TimeSpan.FromSeconds(0.04)); attackEnragedAnimation.AddFrame(4, 4, TimeSpan.FromSeconds(0.04)); attackEnragedAnimation.AddFrame(5, 4, TimeSpan.FromSeconds(0.04), Rotate); attackEnragedAnimation.AddFrame(6, 4, TimeSpan.FromSeconds(0.04), Rotate); attackEnragedAnimation.AddFrame(7, 4, TimeSpan.FromSeconds(0.04), Rotate); attackEnragedAnimation.AddFrame(0, 5, TimeSpan.FromSeconds(0.04), Rotate); attackEnragedAnimation.AddFrame(1, 5, TimeSpan.FromSeconds(0.04), AttackedFunc); attackEnragedAnimation.AddFrame(2, 5, TimeSpan.FromSeconds(0.04), Unrotate); attackEnragedAnimation.AddFrame(3, 5, TimeSpan.FromSeconds(0.04), Unrotate); attackEnragedAnimation.AddFrame(4, 5, TimeSpan.FromSeconds(0.04), Unrotate); attackEnragedAnimation.AddFrame(5, 5, TimeSpan.FromSeconds(0.04), Unrotate); attackEnragedAnimation.AddFrame(5, 5, TimeSpan.FromSeconds(0.04), DoneAttackingFunc); Animations.Add(attackEnragedAnimation); var castingEnragedAnimation = new Animation(AnimationTypes.FireAttackEnraged, new BodyPart(BodyPartType.Custom, 470, 370)); castingEnragedAnimation.AddFrame(7, 3, TimeSpan.FromSeconds(0.12), BecomeInvulnerable); castingEnragedAnimation.AddFrame(0, 4, TimeSpan.FromSeconds(0.25)); castingEnragedAnimation.AddFrame(7, 3, TimeSpan.FromSeconds(0.1)); castingEnragedAnimation.AddFrame(5, 3, TimeSpan.FromSeconds(0.1), CastedFunc); castingEnragedAnimation.AddFrame(6, 3, TimeSpan.FromSeconds(0.2)); castingEnragedAnimation.AddFrame(5, 3, TimeSpan.FromSeconds(0.12)); castingEnragedAnimation.AddFrame(5, 3, TimeSpan.FromSeconds(0.05), DoneAttackingFunc); Animations.Add(castingEnragedAnimation); var dieEnragedAnimation = new Animation(AnimationTypes.DeathEnraged, new BodyPart(BodyPartType.Custom, 470, 370)); dieEnragedAnimation.AddFrame(6, 5, TimeSpan.FromSeconds(0.1), OnDeath); dieEnragedAnimation.AddFrame(7, 5, TimeSpan.FromSeconds(0.1), OnDeathFinished); Animations.Add(dieEnragedAnimation); // Center the boss in the middle of the section X = Globals.Map.GetSection(this).Center.X; Y = Globals.Map.GetSection(this).Center.Y; }