Beispiel #1
0
        /// <summary>
        /// Sets the abilities to the pokemon
        /// </summary>
        /// <param name="activeAlliedPokemon"></param>
        public void SetPokemon(PokemonInstance activeAlliedPokemon)
        {
            _pokemon.PokemonInstance = activeAlliedPokemon;
            _attackChoiceArrow.MoveCount = _pokemon.PokemonInstance.Moves.Count;

            _move1 = "";
            _move2 = "";
            _move3 = "";
            _move4 = "";

            if (_pokemon.PokemonInstance.Moves.Count > 0)
            {
                _move1 = activeAlliedPokemon.Moves[0].Archetype.Name;

                if (_pokemon.PokemonInstance.Moves.Count > 1)
                {
                    _move2 = activeAlliedPokemon.Moves[1].Archetype.Name;

                    if (_pokemon.PokemonInstance.Moves.Count > 2)
                    {
                        _move3 = activeAlliedPokemon.Moves[2].Archetype.Name;

                        if (_pokemon.PokemonInstance.Moves.Count > 3)
                            _move4 = activeAlliedPokemon.Moves[3].Archetype.Name;
                    }
                }
            }
        }
 /// <summary>
 /// Sets a rectangle with different size over female/male
 /// </summary>
 /// <param name="pokemon">instance of a pokemon</param>
 public void SetPokemon(PokemonInstance pokemon)
 {
     Pokemon.PokemonInstance = pokemon;
     if (Pokemon.PokemonInstance.Gender == Gender.Female)
         _genderSource = new Rectangle(282, 166, 8, 12);
     else
         _genderSource = new Rectangle(269, 165, 7, 10);
 }
Beispiel #3
0
        public AttackMenu(Game game, AttackChoiceArrow attackChoiceArrow, PokemonInstance pokemonInstance)
            : base(game)
        {
            _pokemon = new PokemonWrapper(game, pokemonInstance);

            _attackChoiceArrow = attackChoiceArrow;
            Position = new Vector2(0, 110);
            Texture = game.Content.Load<Texture2D>("Resources/Battlesystem/attackMenu");
            _moveFont = game.Content.Load<SpriteFont>("Size8");
            _PPFont = game.Content.Load<SpriteFont>("Size10");
        }
Beispiel #4
0
        private void ProcessHit(CombatMove combatMove, PokemonInstance origin)
        {
            PokemonInstance target = null;

            switch (combatMove.Archetype.MoveTarget) {
                case MoveTarget.ActiveEnemy:
                    target = origin == ActiveEnemyPokemon.PokemonInstance ? ActiveAlliedPokemon.PokemonInstance : ActiveEnemyPokemon.PokemonInstance;
                    break;
                case MoveTarget.Self:
                    target = origin;
                    break;
            }

            if (target != null && combatMove.Archetype.BattleEffectType == BattleEffectType.DamageOnly) {
                var moveElement = combatMove.Archetype.ElementType;
                var targetPrimaryElement = target.Archetype.PrimaryType;
                var targetSecondaryElement = target.Archetype.SecondaryType;

                // Weaknesses and resistances
                var damageModifier = DataManager.GetEffectiveness(moveElement, targetPrimaryElement) * DataManager.GetEffectiveness(moveElement, targetSecondaryElement);

                // Random modifier
                damageModifier *= (Random.Next(85, 101) + 0f)/100;

                // Same Type Attack Bonus (STAB)
                if (moveElement == origin.Archetype.PrimaryType || moveElement == origin.Archetype.SecondaryType)
                    damageModifier *= 1.5f;

                // Critical hit
                if (Random.Next(0, 10001) <= 625)
                    damageModifier *= 2;

                var attack = combatMove.Archetype.MoveType == MoveType.Physical
                                 ? origin.CombatStats[Stats.Attack].CurrentStatValue
                                 : origin.CombatStats[Stats.SpecialAttack].CurrentStatValue;

                var defense = combatMove.Archetype.MoveType == MoveType.Physical
                                  ? target.CombatStats[Stats.Defense].CurrentStatValue
                                  : target.CombatStats[Stats.SpecialDefense].CurrentStatValue;

                var appliedDamage = (int) Math.Ceiling((((2*origin.Level + 10)/(float)250)*(attack/defense)*combatMove.Archetype.Power + 2)*
                                                       damageModifier);

                if (target.CurrentHealth < appliedDamage)
                    appliedDamage = target.CurrentHealth;

                //Console.WriteLine(appliedDamage);

                target.ApplyDamage(appliedDamage);

                //Console.WriteLine(ActiveEnemyPokemon.CurrentHealth + "," + ActiveAlliedPokemon.CurrentHealth);
            }
        }
Beispiel #5
0
        private void CalculateHitOrMiss(CombatMove combatMove, PokemonInstance origin)
        {
            combatMove.RemainingPP--;

            PokemonInstance target = null;

            switch (combatMove.Archetype.MoveTarget)
            {
                case MoveTarget.ActiveEnemy:
                    target = origin == ActiveEnemyPokemon.PokemonInstance ? ActiveAlliedPokemon.PokemonInstance : ActiveEnemyPokemon.PokemonInstance;
                    break;
                case MoveTarget.Self:
                    target = origin;
                    break;
            }

            if (target != null && combatMove.Archetype.BattleEffectType == BattleEffectType.DamageOnly)
            {
                var hitThreshold = Math.Ceiling(target.CombatStats[Stats.Evasion].CurrentStatValue/100f * origin.CombatStats[Stats.Accuracy].CurrentStatValue/100f) * combatMove.Archetype.Accuracy;

                AttackState = Random.Next(0,101) > hitThreshold ? AttackState.Miss : AttackState.Hit;
            }
        }
 public PokemonWrapper(Game game, PokemonInstance pokemonInstance)
     : base(game)
 {
     PokemonInstance = pokemonInstance;
 }