public void GetMessages(Character player, ref Battle battle, ref bool allowedToWalk, ref List<Shop> shops) { switch (character.NpcKind) { case NPCKind.Trainer: if (!character.BattleMessage.Said) { character.BattleMessage.Visible = true; character.Talking = true; } if (!character.Talking) { battle = new Battle(player, character); allowedToWalk = true; } break; case NPCKind.Healer: if (!character.IntroMessage.Said) { character.IntroMessage.Visible = true; character.Talking = true; } if (!character.Talking) { if (character.ByeMessage.Said == false) { HealMonsters(player); character.ByeMessage.Visible = true; } else { character.Talking = false; } } break; case NPCKind.Shop: if (!character.IntroMessage.Said) { character.IntroMessage.Visible = true; character.Talking = true; } if (!character.Talking) { if (character.ByeMessage.Said == false) { if (!shopAdded) { shops.Add( new Shop("Best shop around TM", character, player)); shopAdded = true; } } else { character.Talking = false; } } break; } }
public void Update(GameTime gameTime, KeyboardState currentKeyboardState, KeyboardState previousKeyboardState, MouseState currentMouseState, MouseState previousMouseState, Character player, ref Battle currentBattle) { if (OpponentList == null) return; if (OpponentList.Count == 0) return; foreach (var opponent in OpponentList) { opponent.UpdateMessages(currentKeyboardState, previousKeyboardState, player); opponent.Update(gameTime, currentKeyboardState, previousKeyboardState); opponent.AI.Update(player, ref currentBattle, ref shopList, currentMouseState, previousMouseState); } foreach (var shop in shopList) { shop.Update(currentMouseState, previousMouseState); } Box.Update(currentMouseState, previousMouseState, gameTime); }
public void GetEncounters(Character player, ref Battle battle, ref bool battling) { EncounterColliders.Clear(); var encounterLayers = Map.TileLayers.Where(layer => layer.Properties.ContainsKey("Encounters") && layer.Properties.ContainsValue("true")).ToList(); foreach (var layer in encounterLayers) { foreach (var tile in layer.Tiles) { if (tile.Id != 0) { encounterHitbox = new Rectangle((tile.X * tileWidth), (tile.Y * tileHeight), tileWidth, tileHeight); EncounterColliders.Add(encounterHitbox); } } } if (EncounterColliders.Count != 0) { foreach (var collision in EncounterColliders) { if (player.Hitbox.Intersects(collision)) { Random rand = new Random(); if (player.Position != previousPos && player.Moved >= 29f) { var chanceToEncounter = rand.Next(0, 100); if (chanceToEncounter <= 5) { battling = true; battle = new Battle(player, GetRandomMonster()); } } } } } previousPos = player.Position; }
public static void UseMedicine(Battle b, Character player, Monster user) { List<Medicine> medicineList = new List<Medicine>(); foreach (var medicine in player.Inventory.Medicine.Values) { if (medicine.HealAmount != 0) { medicineList.Add(medicine); } } if (medicineList.Count != 0) { Random r = new Random(); var medicine = medicineList[r.Next(0, medicineList.Count)]; Drawer.AddMessage(new List<string> { $"{medicine.Name} used on {user.Name}." }); medicine.Use(user, player); } }
public static void UseBuff(Battle b, Monster user, Monster receiver) { List<Move> moveList = new List<Move>(); foreach (var move in user.Moves) { if (move.Kind == Kind.NonDamage) { moveList.Add(move); } } if (moveList.Count != 0) { Random r = new Random(); b.Attack(user, receiver, moveList[r.Next(0, moveList.Count)]); } }
public static void MakeDecision(Battle b, Move m, Monster user, Monster receiver, Character player) { Random random = new Random(); switch (random.Next(1, 5)) { case 1: EnemyAttack(b, user, receiver); break; case 2: UseBuff(b, user, receiver); break; case 3: if (user.Ailment != Ailment.Normal) { if (player != null) { foreach (var value in player.Inventory.Medicine.Values) { if (Medicine.CuresAilment(user.Ailment)) { UseMedicine(b, player, user); } } } } else { EnemyAttack(b, user, receiver); } break; case 4: if (user.Stats.Health < user.MaxHealth / 100 * 20) { if (player != null) { if (player.Inventory.Medicine.Count != 0) { UseMedicine(b, player, user); } else { EnemyAttack(b, user, receiver); } } else { EnemyAttack(b, user, receiver); } } else { EnemyAttack(b, user, receiver); } break; case 5: if (user.Ailment != Ailment.Normal) { foreach (var value in player.Inventory.Medicine.Values) { if (Medicine.CuresAilment(user.Ailment)) { UseMedicine(b, player, user); } } } if (user.Stats.Health < user.MaxHealth / 100 * 20) { if (player != null) { if (player.Inventory.Medicine.Count != 0) { UseMedicine(b, player, user); } else { if (m.Damage != null) { if (m.Damage > user.Stats.Health) { EnemyAttack(b, user, receiver); } else { UseBuff(b, user, receiver); } } else { UseBuff(b, user, receiver); } } } } else { if (m != null) { if (m.Damage != 0) { if (m.Damage > user.Stats.Health) { EnemyAttack(b, user, receiver); } else { UseBuff(b, user, receiver); } } else { UseBuff(b, user, receiver); } } else { UseBuff(b, user, receiver); } } break; } }
public static void EnemyAttack(Battle b, Monster user, Monster receiver) { strongestAttack = Move.Glare(); //user.GetMoves(); foreach (var m in user.Moves.Where(x => x.Uses != 0)) { m.Damage = m.GetDamage(user.Stats.SpecialAttack, receiver.Stats.SpecialDefense, m.GetDamageModifier(receiver), 1); if (m.Damage > strongestAttack.Damage) { strongestAttack = m; } } b.Attack(user, receiver, strongestAttack); }
public void Update(Character player, ref Battle battle, ref List<Shop> shops, MouseState cur, MouseState prev) { var playerRect = new Rectangle((int)player.Position.X, (int)player.Position.Y, 32, 32); character.SetLineOfSight(tiles); Hitbox = new Rectangle((int)character.Position.X - (character.SpriteSize.X / 2), (int)character.Position.Y - (character.SpriteSize.Y / 2), character.SpriteSize.X * 2, character.SpriteSize.Y * 2); if (character.NpcKind == NPCKind.Trainer) { if (character.LineOfSightRectangle.Intersects(playerRect)) { Chase = true; } if (Chase) MoveToPoint(player.Position, 100, player, ref player.Controllable, ref battle, ref shops); } else { if (character.LineOfSightRectangle.Intersects(playerRect)) { GetMessages(player, ref battle, ref player.Controllable, ref shops); } else { ResetMessages(); } } }
public void MoveToPoint(Vector2 move, float delay, Character player, ref bool allowedToWalk, ref Battle battle, ref List<Shop> shops) { if (!character.Defeated) { var distanceX = move.X - character.Position.X; var distanceY = move.Y - character.Position.Y; var moveX = distanceX / delay; var moveY = distanceY / delay; Hitbox = new Rectangle((int)character.Position.X - (character.SpriteSize.X / 2), (int)character.Position.Y - (character.SpriteSize.Y / 2), character.SpriteSize.X * 2, character.SpriteSize.Y * 2); if (!Hitbox.Contains(player.Position)) { allowedToWalk = false; if (character.Direction == Direction.Right || character.Direction == Direction.Left) character.Position.X += moveX * 2; if (character.Direction == Direction.Down || character.Direction == Direction.Up) character.Position.Y += moveY * 2; } else { GetMessages(player, ref battle, ref allowedToWalk, ref shops); } } else Chase = false; }