public override void StartChoosingAction(BattleData battleData)
        {
            base.StartChoosingAction(battleData);

            if (actionHasBeenChosen)
            {
                return;
            }

            if (!ActivePokemon.HasUsableMove)
            {
                SetChosenAction(new Action(this)
                {
                    type = Action.Type.Fight,
                    fightUsingStruggle = true,
                    fightMoveTarget    = battleData.participantPlayer
                });
            }

            int  chosenMoveIndex;
            bool selectingMove = true;

            do
            {
                List <int> validMoveIndexes = new List <int>();

                for (int moveIndex = 0; moveIndex < 4; moveIndex++)
                {
                    if (!Pokemon.Moves.PokemonMove.MoveIdIsUnset(ActivePokemon.moveIds[moveIndex]))
                    {
                        validMoveIndexes.Add(moveIndex);
                    }
                }

                chosenMoveIndex = validMoveIndexes[battleData.RandomRange(0, validMoveIndexes.Count)];

                if (ActivePokemon.movePPs[chosenMoveIndex] > 0)
                {
                    selectingMove = false;
                }
            }while (selectingMove);

            SetChosenAction(new Action(this)
            {
                type            = Action.Type.Fight,
                fightMoveIndex  = chosenMoveIndex,
                fightMoveTarget = battleData.participantPlayer
            });
        }
        public override void StartChoosingAction(BattleData battleData)
        {
            base.StartChoosingAction(battleData);

            if (actionHasBeenChosen)
            {
                return;
            }

            int  actionItemTargetIndex = activePokemonIndex;
            Item actionItem;

            List <BattleItem> validItems = new List <BattleItem>();

            foreach (BattleItem item in BattleItem.registry)
            {
                if (item.CheckCompatibility(GetPokemon()[actionItemTargetIndex]))
                {
                    validItems.Add(item);
                }
            }

            if (validItems.Count > 0)
            {
                actionItem = validItems[battleData.RandomRange(0, validItems.Count)];
            }
            else
            {
                Debug.LogWarning("No valid item found. Choosing item with id 0");
                actionItem = BattleItem.GetBattleItemById(0);
            }

            chosenAction = new Action(this)
            {
                type                    = Action.Type.UseItem,
                useItemItemToUse        = actionItem,
                useItemTargetPartyIndex = actionItemTargetIndex
            };

            actionHasBeenChosen = true;
        }
 public static int GetRandomThrashingDuration(BattleData battleData)
 => battleData.RandomRange(2, 4);
 public static int GetRandomTauntDuration(BattleData battleData)
 => battleData.RandomRange(3, 6);
 public static int GetRandomEncoreDuration(BattleData battleData)
 => battleData.RandomRange(3, 8);
                => battleData.RandomRange(3, 7);     //Need to use one more than intended turn count as timer is decreased on the inflicting turn

                public static int GetRandomConfusionDuration(BattleData battleData)
                => battleData.RandomRange(2, 6);
 public static int GetRandomBoundDuration(BattleData battleData)
 => battleData.RandomRange(3, 7);     //Need to use one more than intended turn count as timer is decreased on the inflicting turn
        public override void StartChoosingAction(BattleData battleData)
        {
            base.StartChoosingAction(battleData);

            if (actionHasBeenChosen)
            {
                return;
            }

            int  actionItemTargetIndex = activePokemonIndex;
            Item actionItem;

            List <MedicineItem> validItems = new List <MedicineItem>();

            foreach (MedicineItem item in MedicineItem.registry)
            {
                if (item.CheckCompatibility(GetPokemon()[actionItemTargetIndex]))
                {
                    validItems.Add(item);
                }
            }

            if (validItems.Count > 0)
            {
                actionItem = validItems[battleData.RandomRange(0, validItems.Count)];
            }
            else
            {
                Debug.LogWarning("No valid item found. Choosing item with id 0");
                actionItem = MedicineItem.GetMedicineItemById(0);
            }

            int moveIndex = -1;

            if (actionItem is PPRestoreMedicineItem)
            {
                PPRestoreMedicineItem ppRestoreActionItem = (PPRestoreMedicineItem)actionItem;
                if (ppRestoreActionItem.isForSingleMove)
                {
                    for (int i = 0; i < GetPokemon()[actionItemTargetIndex].moveIds.Length; i++)
                    {
                        if (!Pokemon.Moves.PokemonMove.MoveIdIsUnset(GetPokemon()[actionItemTargetIndex].moveIds[i]))
                        {
                            Pokemon.Moves.PokemonMove move = Pokemon.Moves.PokemonMove.GetPokemonMoveById(GetPokemon()[actionItemTargetIndex].moveIds[i]);
                            if (GetPokemon()[actionItemTargetIndex].movePPs[i] < move.maxPP)
                            {
                                moveIndex = i;
                                break;
                            }
                        }
                    }
                }
            }

            chosenAction = new Action(this)
            {
                type                    = Action.Type.UseItem,
                useItemItemToUse        = actionItem,
                useItemTargetPartyIndex = actionItemTargetIndex,
                useItemTargetMoveIndex  = moveIndex
            };
            actionHasBeenChosen = true;
        }