public PlayerActionChoiceCanvas(Player player, Mokepon playerMokepon) { this.player = player; this.playerMokepon = playerMokepon; screen = (Screens.BattleScreen)Managers.ScreenManager.Instance.CurrentScreen; SetMode(Mode.MAIN); }
public override void Effect(ref Mokepon caster, ref Mokepon target, BattleScreen screen) { Damage damage = GameManager.Instance.CalculateDamage(caster, target, this); screen.Dialogues.AddText(caster.Name + " absorbed " + target.Name + "'s health points"); caster.Heal((int)Math.Ceiling(damage.DamageValue / 2.0)); }
public MokeponOverview(Mokepon pokemon, Vector2 pos) : base(null, null) { Position = pos; Scale = Vector2.One; Width = 400; Height = 200; this.pokemon = pokemon; Background = new Image("White", new Rectangle((int)pos.X, (int)pos.Y, Width, Height), 0.8f); pokemonImage = new Image("Mokepons/" + pokemon.DefaultName); pokemonName = new Text(pokemon.Name, Color.Black, pos + new Vector2(150, 14), Vector2.One, "Expression-pro-18px"); pokemonLevel = new Text("Lvl " + pokemon.LVL.ToString(), Color.Black, pos + new Vector2(310, 15), Vector2.One, "Expression-pro-18px"); hpbar = new HPBar(ref pokemon, 6, 150, pos + new Vector2(150, 55)); hpStatus = new Text("", Color.Black, pos + new Vector2(310, 55), Vector2.One, "Expression-pro-18px"); expbar = new ExpBar(ref pokemon, 4, 120, pos + new Vector2(150, 60)); pokemonStats = new Text[6]; pokemonStats[0] = new Text("ATK: " + pokemon.ATK, Color.Black, pos + new Vector2(150, 100), Vector2.One, "Expression-pro-18px"); pokemonStats[1] = new Text("DEF: " + pokemon.DEF, Color.Black, pos + new Vector2(275, 100), Vector2.One, "Expression-pro-18px"); pokemonStats[2] = new Text("SP ATK: " + pokemon.SP_ATK, Color.Black, pos + new Vector2(150, 125), Vector2.One, "Expression-pro-18px"); pokemonStats[3] = new Text("SP DEF: " + pokemon.SP_DEF, Color.Black, pos + new Vector2(275, 125), Vector2.One, "Expression-pro-18px"); pokemonStats[4] = new Text("SPD: " + pokemon.SPD, Color.Black, pos + new Vector2(150, 150), Vector2.One, "Expression-pro-18px"); pokemonStats[5] = new Text("ACC: " + pokemon.ACC, Color.Black, pos + new Vector2(275, 150), Vector2.One, "Expression-pro-18px"); }
public Damage CalculateDamage(Mokepon attacker, Mokepon defender, Ability ability) { if (!ability.Attack) //SHOULDN'T HAPPEN, EVER { return(null); } int critPpb = defender.SPD / 2; bool crit = (Managers.GameManager.Instance.random.Next(0, 256) < critPpb); double damage = (2.0 * (crit ? 2.0 : 1.0) / 5.0 + 2.0); damage *= ability.Special ? (attacker.SP_ATK / (double)defender.SP_DEF) : (attacker.ATK / (double)defender.DEF); damage /= 50; damage += 2; damage *= Managers.GameManager.Instance.random.NextDouble() * 0.15 + 0.85; //random double from 0.85 to 1.0 double multip = 1; multip *= Globals.MokeponValueChart[(int)ability.AbilityType, (int)defender.Type1]; multip *= Globals.MokeponValueChart[(int)ability.AbilityType, (int)defender.Type2]; damage *= multip; if (attacker.Type1 == ability.AbilityType || attacker.Type2 == ability.AbilityType) { damage *= 1.5; } return(new Damage(crit, multip, (int)Math.Round(damage))); }
public override void Effect(ref Mokepon caster, ref Mokepon target, BattleScreen screen) { int prevHP = caster.HP; caster.Heal(25); screen.Dialogues.AddText(caster.Name + " restored " + (caster.HP - prevHP).ToString() + " health points!"); }
void ChoosePlayer(GameTime gameTime) { if (playerMokepon == null) { if (currentCanvas == null) { bool lost = true; foreach (var pok in player.Mokepons) { if (pok.HP > 0) { lost = false; } } if (lost) { currentState = BattleState.LOST; return; } currentCanvas = new PlayerChooseMokeponCanvas(player.Mokepons); currentCanvas.LoadContent(); } currentCanvas.Update(gameTime); if ((currentCanvas as PlayerChooseMokeponCanvas).MokeponChosen == true) { playerMokepon = player.Mokepons[(currentCanvas as PlayerChooseMokeponCanvas).Choice]; currentCanvas.UnloadContent(); currentCanvas = null; GC.Collect(); Dialogues.AddText(string.Format("Go! {0}!", playerMokepon.Name)); Dialogues.DisplayNext(); playerMokeponImage = new Image("Mokepons/" + playerMokepon.DefaultName); playerMokeponImage.LoadContent(); playerMokeponImage.MoveMid(new Vector2(Globals.ScreenWidth / 4, 3 * Globals.ScreenHeight / 4 - 100)); PulseEffect pulse = new PulseEffect(2f, 1.5); playerMokeponImage.AddEffect("PulseEffect", ref pulse); playerMokeponImage.ActivateEffect("PulseEffect"); playerStats = new MokeponBattleStats(ref playerMokepon, new Vector2(500, 400), true); playerStats.LoadContent(); wait = 3.0; SwitchState(BattleState.CHOOSE_ACTION); return; } } else { SwitchState(BattleState.CHOOSE_ACTION); return; } }
public PlayerChooseMokeponCanvas(List <Mokepon> pokemons, Mokepon current = null) : base(pokemons) { cur = current; Elements.Add(new Text("Choose your Mokepon!", "Expression-pro-32px")); (Elements.Last() as Text).Color = Color.White; MokeponChosen = false; warning = false; }
public ExpBar(ref Mokepon pok, int height, int width, Vector2 pos) { pokemon = pok; Width = width; Height = height; Position = pos; Scale = Vector2.One; back = new Image("Black", new Rectangle(0, 0, 1, 1), pos, width, height); bar = new Image("White", new Rectangle(0, 0, 1, 1), pos + new Vector2(1, 1), width - 2, height - 2); bar.ImageColor = Color.LightSkyBlue; }
public int CalculateExperience(Mokepon attacker, Mokepon defender, bool wild = true) { double exp = 1; if (!wild) { exp = 1.5; } exp *= defender.LVL / (double)attacker.LVL; exp *= defender.LVL; return((int)Math.Ceiling(exp)); }
public MokeponOptionsCanvas(Mokepon mokepon) { Elements.Add(new Image("White", new Rectangle(0, 0, Globals.ScreenWidth, Globals.ScreenHeight))); this.mokepon = mokepon; Elements.Add(new Text("Name: " + mokepon.Name, "Expression-pro-32px")); Elements.Add(new Text("Species: " + mokepon.DefaultName, "Expression-pro-32px")); Elements.Add(new Image("Mokepons/" + mokepon.DefaultName)); Elements.Add(new Text("Statistics:", "Expression-pro-32px")); Elements.Add(new Text("Max Health: " + mokepon.MaxHP + "\nHealth: " + mokepon.HP + "\nAttack: " + mokepon.ATK + "\nDefense: " + mokepon.DEF + "\nSpecial Attack: " + mokepon.SP_ATK + "\nSpecial Defense: " + mokepon.SP_DEF + "\nSpeed: " + mokepon.SPD + "\nAccuracy: " + mokepon.ACC)); Buttons.Add(new Button(null, new Text("Release"))); Buttons.Add(new Button(null, new Text("Back"))); ButtonRows = 2; Buttons[0].ButtonText.Color = Color.DimGray; }
public MokeponBattleStats(ref Mokepon pokemon, Vector2 pos, bool mine = false) { Position = pos; Scale = Vector2.One; this.mine = mine; this.pokemon = pokemon; background = new Image(mine ? "MyMokeponStatus" : "MokeponStatus", pos, Vector2.One); pokemonName = new Text(pokemon.Name, Color.Black, pos + new Vector2(10, 10), Vector2.One, "Expression-pro-24px"); pokemonLevel = new Text("Lvl " + pokemon.LVL.ToString(), Color.Black, pos + new Vector2(200, 10), Vector2.One, "Expression-pro-18px"); pokemonName.MoveVector(mine ? new Vector2(18, 0) : new Vector2(0, 0)); pokemonLevel.MoveVector(mine ? new Vector2(18, 0) : new Vector2(0, 0)); hpbar = new HPBar(ref pokemon, 6, 150, pos + new Vector2(10, 55)); hpbar.MoveVector(mine ? new Vector2(18, 0) : new Vector2(0, 0)); if (mine) { hpStatus = new Text("", Color.Black, pos + new Vector2(190, 55), Vector2.One, "Expression-pro-18px"); expbar = new ExpBar(ref pokemon, 4, 120, pos + new Vector2(28, 60)); } }
public override void Effect(ref Mokepon caster, ref Mokepon target, BattleScreen screen) { if (screen.enemy.Name.Length > 0) { screen.Dialogues.AddText("How dare you try to catch someone's Mokepon?!"); return; } int rand = Managers.GameManager.Instance.random.Next(256); int treshold = (target.HP * 255 * target.LVL) / (target.MaxHP * 4); if (rand < treshold) { screen.Dialogues.AddText(target.Name + " broke free!"); return; } else { screen.EnemyMokeponCaught = true; return; } }
public override void Stepped() { base.Stepped(); if (Probability <= Managers.GameManager.Instance.random.Next(100)) { return; } int totalPpb = 0; Console.WriteLine("Spawn count: " + Spawns.Count.ToString()); foreach (var spawn in Spawns) { totalPpb += spawn.Probability; } int randint = Managers.GameManager.Instance.random.Next(0, totalPpb); foreach (var spawn in Spawns) { if (randint < spawn.Probability) { int level = Managers.GameManager.Instance.random.Next(MinLevel, MaxLevel + 1); Mokepon wildMokepon = new Mokepon(spawn.MokeponName, level); Enemy enemy = new Enemy(); enemy.Mokepons.Add(wildMokepon); enemy.MokeponChoiceText = "Wild {0} has appeared!"; enemy.AILevel = 0; (Managers.ScreenManager.Instance.CurrentScreen as Screens.GameScreen).StartBattle(enemy); return; } randint -= spawn.Probability; } }
void ChooseEnemy(GameTime gameTime) { if (enemyMokepon == null) { if (enemy.Mokepons.Count == 0) { SwitchState(BattleState.WON); return; } foreach (var mok in enemy.Mokepons) { if (mok.HP > 0) { enemyMokepon = mok; break; } } Dialogues.AddText(string.Format(enemy.MokeponChoiceText, enemyMokepon.Name)); Dialogues.DisplayNext(); enemyMokeponImage = new Image("Mokepons/" + enemyMokepon.Name); enemyMokeponImage.LoadContent(); enemyMokeponImage.MoveMid(new Vector2(3 * Globals.ScreenWidth / 4, Globals.ScreenHeight / 4)); PulseEffect pulse = new PulseEffect(2f, 1.5); enemyMokeponImage.AddEffect("PulseEffect", ref pulse); enemyMokeponImage.ActivateEffect("PulseEffect"); enemyStats = new MokeponBattleStats(ref enemyMokepon, new Vector2(450, 100)); enemyStats.LoadContent(); wait = 3.0; } SwitchState(BattleState.PLAYER_CHOICE); }
public override void Effect(ref Mokepon caster, ref Mokepon target, BattleScreen screen) { screen.Dialogues.AddText(target.Name + "\'s attack fell!"); target.AddBuff(-3, 0, 0, 0, 0, 0); }
public override void Effect(ref Mokepon caster, ref Mokepon target, BattleScreen screen) { target.AddBuff(0, 0, 0, 0, -20, -20); screen.Dialogues.AddText(caster.Name + "\'s cold has slowed " + target.Name + "! "); screen.Dialogues.AddText(target.Name + "\'s speed and accuracy fell!"); }
public override void Effect(ref Mokepon caster, ref Mokepon target, BattleScreen screen) { caster.EraseBattleBuffs(); screen.Dialogues.AddText(caster.Name + " attributes have been reset!"); }
public override void Effect(ref Mokepon caster, ref Mokepon target, BattleScreen screen) { caster.AddBuff(0, 5, 0, 0, 0, 0); screen.Dialogues.AddText(caster.Name + "\'s defence rose!"); }
void UseAbilities(GameTime gameTime) { //USE ABILITIES if (playerAbility == null && enemyAbility == null) { SwitchState(BattleState.END_TURN); return; } else if (enemyAbility != null && ((playerAbility == null) || (playerAbility.Priority < enemyAbility.Priority) || (playerAbility.Priority == enemyAbility.Priority && playerMokepon.SPD < enemyMokepon.SPD))) { //Use enemy ability if (enemyAbility.UsedWithItem) { Dialogues.AddText(enemy.Name + " uses " + enemyAbility.ItemName + "!"); if (!Dialogues.Displaying) { Dialogues.DisplayNext(); } } else { Dialogues.AddText(enemyMokepon.Name + " uses " + enemyAbility.Name + "!"); if (!Dialogues.Displaying) { Dialogues.DisplayNext(); } } double hit = Managers.GameManager.Instance.random.NextDouble(); if (hit >= (enemyAbility.UsedWithItem ? (enemyAbility.ACC / 100.0) : (enemyAbility.ACC / 100.0 * enemyMokepon.ACC / 100.0))) { Dialogues.AddText("It missed!"); enemyAbility = null; return; } if (enemyAbility.Attack) { Damage damage = GameManager.Instance.CalculateDamage(enemyMokepon, playerMokepon, enemyAbility); if (damage.Critical) { Dialogues.AddText("Critical hit!"); if (!Dialogues.Displaying) { Dialogues.DisplayNext(); } } if (damage.Multipiler > 1) { Dialogues.AddText("It's super effective!"); if (!Dialogues.Displaying) { Dialogues.DisplayNext(); } } else if (damage.Multipiler < 1) { Dialogues.AddText("It's not very effective!"); if (!Dialogues.Displaying) { Dialogues.DisplayNext(); } } playerMokepon.ReceiveDamage(damage.DamageValue); } enemyAbility.Effect(ref enemyMokepon, ref playerMokepon, this); wait = 3.0; enemyAbility = null; GC.Collect(); } else { //Use player ability if (playerAbility.UsedWithItem) { Dialogues.AddText(player.Name + " uses " + playerAbility.ItemName + "!"); if (!Dialogues.Displaying) { Dialogues.DisplayNext(); } } else { Dialogues.AddText(playerMokepon.Name + " uses " + playerAbility.Name + "!"); if (!Dialogues.Displaying) { Dialogues.DisplayNext(); } } double hit = Managers.GameManager.Instance.random.NextDouble(); if (hit >= (playerAbility.UsedWithItem ? (playerAbility.ACC / 100.0) : (playerAbility.ACC / 100.0 * playerMokepon.ACC / 100.0))) { Dialogues.AddText("It missed!"); playerAbility = null; return; } if (playerAbility.Attack) { Damage damage = GameManager.Instance.CalculateDamage(playerMokepon, enemyMokepon, playerAbility); if (damage.Critical) { Dialogues.AddText("Critical hit!"); if (!Dialogues.Displaying) { Dialogues.DisplayNext(); } } if (damage.Multipiler > 1) { Dialogues.AddText("It's super effective!"); if (!Dialogues.Displaying) { Dialogues.DisplayNext(); } } else if (damage.Multipiler < 1) { Dialogues.AddText("It's not very effective!"); if (!Dialogues.Displaying) { Dialogues.DisplayNext(); } } enemyMokepon.ReceiveDamage(damage.DamageValue); } playerAbility.Effect(ref playerMokepon, ref enemyMokepon, this); wait = 3.0; playerAbility = null; GC.Collect(); if (EnemyMokeponCaught) { Dialogues.AddText(player.Name + " has caught " + enemyMokepon.Name + "!"); if (player.Mokepons.Count < 6) { player.Mokepons.Add(enemyMokepon); enemy.Mokepons.Remove(enemyMokepon); enemyMokepon = null; enemyStats.UnloadContent(); enemyMokeponImage.UnloadContent(); enemyStats = null; enemyMokeponImage = null; GC.Collect(); SwitchState(BattleState.NAME_MOKEPON); return; } else { Dialogues.AddText(player.Name + " has reached maximum number of Mokepons!"); enemyMokepon.HP = 0; } playerAbility = null; enemyAbility = null; } } if (playerMokepon.HP == 0) { Dialogues.AddText(playerMokepon.Name + " fainted!"); if (!Dialogues.Displaying) { Dialogues.DisplayNext(); } playerMokepon = null; playerStats.UnloadContent(); playerMokeponImage.UnloadContent(); playerStats = null; playerMokeponImage = null; GC.Collect(); SwitchState(BattleState.END_TURN); } if (enemyMokepon.HP == 0) { int XP = GameManager.Instance.CalculateExperience(playerMokepon, enemyMokepon, enemy.Name.Length > 0); playerMokepon.GainXP(XP); Dialogues.AddText(playerMokepon.Name + " gained " + XP.ToString() + " experience points!"); if (!Dialogues.Displaying) { Dialogues.DisplayNext(); } while (playerMokepon.XP >= playerMokepon.LVL_UP_XP) { playerMokepon.LevelUp(); Dialogues.AddText(playerMokepon.Name + " grew to level " + playerMokepon.LVL + "!"); } Dialogues.AddText(enemyMokepon.Name + " fainted!"); enemyMokepon = null; enemyStats.UnloadContent(); enemyMokeponImage.UnloadContent(); enemyStats = null; enemyMokeponImage = null; GC.Collect(); SwitchState(BattleState.END_TURN); } }
void ChooseAction(GameTime gameTime) { if (!MoveChosen) { if (currentCanvas == null) { Dialogues.AddText("What will " + playerMokepon.Name + " do?"); Dialogues.DisplayNext(); currentCanvas = new PlayerActionChoiceCanvas(player, playerMokepon); currentCanvas.LoadContent(); } currentCanvas.Update(gameTime); } else { if (currentCanvas.GetType() == typeof(PlayerActionChoiceCanvas)) { currentCanvas.UnloadContent(); currentCanvas = null; GC.Collect(); } if (PlayerMove == "Run") { foreach (var pok in player.Mokepons) { pok.HP = 0; } Dialogues.AddText(player.Name + " has fled from the battle!"); Dialogues.AddText(player.Name + "\'s Mokepons have fainted!"); Dialogues.DisplayNext(); wait = 3.0; SwitchState(BattleState.LOST); return; } else if (PlayerMove == "SwitchMokepon") { if (currentCanvas == null) { currentCanvas = new PlayerChooseMokeponCanvas(player.Mokepons, playerMokepon); currentCanvas.LoadContent(); } if ((currentCanvas as PlayerChooseMokeponCanvas).MokeponChosen == false) { currentCanvas.Update(gameTime); } if ((currentCanvas as PlayerChooseMokeponCanvas).MokeponChosen == true) { if (playerMokepon != null) { hideCanvas = true; Dialogues.AddText(playerMokepon.Name + ", go back!"); Dialogues.DisplayNext(); playerMokepon = null; playerMokeponImage.UnloadContent(); playerMokeponImage = null; playerStats.UnloadContent(); playerStats = null; GC.Collect(); wait = 3.0; return; } playerMokepon = player.Mokepons[(currentCanvas as PlayerChooseMokeponCanvas).Choice]; currentCanvas.UnloadContent(); currentCanvas = null; hideCanvas = false; GC.Collect(); playerMokeponImage = new Image("Mokepons/" + playerMokepon.DefaultName); playerMokeponImage.LoadContent(); playerMokeponImage.MoveMid(new Vector2(Globals.ScreenWidth / 4, 3 * Globals.ScreenHeight / 4 - 100)); PulseEffect pulse = new PulseEffect(2f, 1.5); playerMokeponImage.AddEffect("PulseEffect", ref pulse); playerMokeponImage.ActivateEffect("PulseEffect"); playerStats = new MokeponBattleStats(ref playerMokepon, new Vector2(500, 400), true); playerStats.LoadContent(); Dialogues.AddText(string.Format("Go! {0}!", playerMokepon.Name)); Dialogues.DisplayNext(); wait = 3.0; EnemyMove = EnemyAI.ChooseMove(enemyMokepon, playerMokepon, enemy.AILevel); enemyAbility = (Ability)Activator.CreateInstance(Type.GetType("MokeponGame.Gameplay.Abilities." + EnemyMove)); SwitchState(BattleState.USE_ABILITIES); return; } } else if (PlayerMove == "Wait") { Dialogues.AddText(playerMokepon.Name + " decides to wait!"); Dialogues.DisplayNext(); wait = 3.0; EnemyMove = EnemyAI.ChooseMove(enemyMokepon, playerMokepon, enemy.AILevel); enemyAbility = (Ability)Activator.CreateInstance(Type.GetType("MokeponGame.Gameplay.Abilities." + EnemyMove)); SwitchState(BattleState.USE_ABILITIES); return; } else if (PlayerMove.StartsWith("Item_")) { string[] strings = PlayerMove.Split('_'); EnemyMove = EnemyAI.ChooseMove(enemyMokepon, playerMokepon, enemy.AILevel); enemyAbility = (Ability)Activator.CreateInstance(Type.GetType("MokeponGame.Gameplay.Abilities." + EnemyMove)); playerAbility = (Ability)Activator.CreateInstance(Type.GetType("MokeponGame.Gameplay.Abilities." + strings[2])); playerAbility.UsedWithItem = true; playerAbility.ItemName = strings[1]; SwitchState(BattleState.USE_ABILITIES); return; } else { EnemyMove = EnemyAI.ChooseMove(enemyMokepon, playerMokepon, enemy.AILevel); enemyAbility = (Ability)Activator.CreateInstance(Type.GetType("MokeponGame.Gameplay.Abilities." + EnemyMove.Replace(" ", ""))); playerAbility = (Ability)Activator.CreateInstance(Type.GetType("MokeponGame.Gameplay.Abilities." + PlayerMove.Replace(" ", ""))); SwitchState(BattleState.USE_ABILITIES); return; } } }