Ejemplo n.º 1
0
 public override ItemUsageEffects GetUsageEffects(PokemonInstance pokemon)
 => new ItemUsageEffects()
 {
     healthRecovered = fullyHeals
             ? pokemon.GetStats().health - pokemon.health
             : (healAmount + pokemon.health > pokemon.GetStats().health
                 ? pokemon.GetStats().health - pokemon.health
                 : healAmount)
 };
Ejemplo n.º 2
0
 /// <summary>
 /// Fully update the values on the overview pane using a specified pokemon
 /// </summary>
 /// <param name="pokemon">The pokemon to use</param>
 public virtual void FullUpdate(PokemonInstance pokemon)
 {
     UpdateHealthBar(pokemon.health, pokemon.GetStats().health);
     UpdateName(pokemon.GetDisplayName());
     UpdateGender(pokemon.gender);
     UpdateLevel(pokemon.GetLevel());
     UpdateNonVolatileStatsCondition(pokemon.nonVolatileStatusCondition);
 }
Ejemplo n.º 3
0
 public override int CalculateUserRecoilDamage(PokemonInstance user, PokemonInstance target, BattleData battleData, int targetDamageDealt = 0)
 {
     if (user.HasType(Type.Ghost))
     {
         return(user.GetStats().health / 2); // Half of user's health is removed if user is ghost type
     }
     else
     {
         return(base.CalculateUserRecoilDamage(user, target, battleData, targetDamageDealt)); // Use default recoil damage if user not a ghost type
     }
 }
Ejemplo n.º 4
0
        public override ItemUsageEffects GetUsageEffects(PokemonInstance pokemon)
        {
            if (!pokemon.IsFainted)
            {
                Debug.LogWarning("Usage effects were requested for RevivalMedicineItem on pokemon that isn't fainted");
            }

            return(new ItemUsageEffects()
            {
                healthRecovered = Mathf.CeilToInt(pokemon.GetStats().health *proportionOfHealthToRestore)
            });
        }
Ejemplo n.º 5
0
        public override void SetPokemon(PokemonInstance pokemon)
        {
            if (pokemon != null)
            {
                evHex.values = new float[]
                {
                    (float)pokemon.effortValues.attack / PokemonInstance.maximumEffortValue,
                    (float)pokemon.effortValues.defense / PokemonInstance.maximumEffortValue,
                    (float)pokemon.effortValues.specialAttack / PokemonInstance.maximumEffortValue,
                    (float)pokemon.effortValues.specialDefense / PokemonInstance.maximumEffortValue,
                    (float)pokemon.effortValues.speed / PokemonInstance.maximumEffortValue,
                    (float)pokemon.effortValues.health / PokemonInstance.maximumEffortValue
                };

                ivHex.values = new float[]
                {
                    (float)pokemon.individualValues.attack / PokemonInstance.maximumIndividualValue,
                    (float)pokemon.individualValues.defense / PokemonInstance.maximumIndividualValue,
                    (float)pokemon.individualValues.specialAttack / PokemonInstance.maximumIndividualValue,
                    (float)pokemon.individualValues.specialDefense / PokemonInstance.maximumIndividualValue,
                    (float)pokemon.individualValues.speed / PokemonInstance.maximumIndividualValue,
                    (float)pokemon.individualValues.health / PokemonInstance.maximumIndividualValue
                };

                textAttackValue.text         = pokemon.GetStats().attack.ToString();
                textDefenseValue.text        = pokemon.GetStats().defense.ToString();
                textSpecialAttackValue.text  = pokemon.GetStats().specialAttack.ToString();
                textSpecialDefenseValue.text = pokemon.GetStats().specialDefense.ToString();
                textSpeedValue.text          = pokemon.GetStats().speed.ToString();
                textHealthValue.text         = pokemon.GetStats().health.ToString();
            }

            else
            {
                evHex.values = new float[6] {
                    0, 0, 0, 0, 0, 0
                };
                evHex.SetVerticesDirty();

                ivHex.values = new float[6] {
                    0, 0, 0, 0, 0, 0
                };
                ivHex.SetVerticesDirty();

                textAttackValue.text         = "";
                textDefenseValue.text        = "";
                textSpecialAttackValue.text  = "";
                textSpecialDefenseValue.text = "";
                textSpeedValue.text          = "";
                textHealthValue.text         = "";
            }
        }
Ejemplo n.º 6
0
        //https://bulbapedia.bulbagarden.net/wiki/Catch_rate#Capture_method_.28Generation_III-IV.29

        public static int CalculateModifiedCatchRate(PokemonInstance target,
                                                     float pokeBallModifier)
        {
            int   maxHealth    = target.GetStats().health;
            int   currHealth   = target.health;
            float nvscModifier = target.nonVolatileStatusCondition switch
            {
                PokemonInstance.NonVolatileStatusCondition.Paralysed => 1.5F,
                PokemonInstance.NonVolatileStatusCondition.Poisoned => 1.5F,
                PokemonInstance.NonVolatileStatusCondition.BadlyPoisoned => 1.5F,
                PokemonInstance.NonVolatileStatusCondition.Burn => 1.5F,
                PokemonInstance.NonVolatileStatusCondition.Asleep => 2,
                PokemonInstance.NonVolatileStatusCondition.Frozen => 2,
                _ => 1
            };

            float healthModifier = (((float)(3 * maxHealth) - (2 * currHealth))) / (3 * maxHealth);

            return(Mathf.FloorToInt(healthModifier * target.species.catchRate * pokeBallModifier * nvscModifier));
        }
Ejemplo n.º 7
0
        public override byte GetUsagePower(BattleData battleData, PokemonInstance user, PokemonInstance target)
        {
            int targetSpeed = target.GetStats().speed;
            int userSpeed   = user.GetStats().speed;

            if (userSpeed == 0)
            {
                userSpeed = 1;
            }

            int calcPower = ((25 * targetSpeed) / userSpeed) + 1;

            if (calcPower > 150)
            {
                return(150);
            }
            else
            {
                return(Convert.ToByte(calcPower));
            }
        }
Ejemplo n.º 8
0
        public override void RefreshDetails(PokemonInstance pokemon)
        {
            evHex.values = new float[]
            {
                (float)pokemon.effortValues.attack / PokemonInstance.maximumEffortValue,
                (float)pokemon.effortValues.defense / PokemonInstance.maximumEffortValue,
                (float)pokemon.effortValues.specialAttack / PokemonInstance.maximumEffortValue,
                (float)pokemon.effortValues.specialDefense / PokemonInstance.maximumEffortValue,
                (float)pokemon.effortValues.speed / PokemonInstance.maximumEffortValue,
                (float)pokemon.effortValues.health / PokemonInstance.maximumEffortValue
            };

            ivHex.values = new float[]
            {
                (float)pokemon.individualValues.attack / PokemonInstance.maximumIndividualValue,
                (float)pokemon.individualValues.defense / PokemonInstance.maximumIndividualValue,
                (float)pokemon.individualValues.specialAttack / PokemonInstance.maximumIndividualValue,
                (float)pokemon.individualValues.specialDefense / PokemonInstance.maximumIndividualValue,
                (float)pokemon.individualValues.speed / PokemonInstance.maximumIndividualValue,
                (float)pokemon.individualValues.health / PokemonInstance.maximumIndividualValue
            };

            textAttackValue.text         = pokemon.GetStats().attack.ToString();
            textDefenseValue.text        = pokemon.GetStats().defense.ToString();
            textSpecialAttackValue.text  = pokemon.GetStats().specialAttack.ToString();
            textSpecialDefenseValue.text = pokemon.GetStats().specialDefense.ToString();
            textSpeedValue.text          = pokemon.GetStats().speed.ToString();
            textHealthValue.text         = pokemon.health + "/" + pokemon.GetStats().health;

            byte pokemonLevel = pokemon.GetLevel();

            textExperience.text = pokemon.experience.ToString();

            if (pokemonLevel < 100)
            {
                textExperienceToNextLevel.text = (GrowthTypeData.GetMinimumExperienceForLevel((byte)(pokemonLevel + 1), pokemon.species.growthType) - pokemon.experience).ToString();
            }
            else
            {
                textExperienceToNextLevel.text = "-";
            }

            experienceBar.UpdateBar(pokemon);
        }
Ejemplo n.º 9
0
        public void SetPokemonDetails(PokemonInstance pokemon)
        {
            #region Images

            imageIcon.sprite  = pokemon.LoadSprite(PokemonSpecies.SpriteType.Icon);
            imageFront.sprite = pokemon.LoadSprite(PokemonSpecies.SpriteType.Front1);
            imageBack.sprite  = pokemon.LoadSprite(PokemonSpecies.SpriteType.Back);

            #endregion

            #region General Details

            imageType1.sprite = SpriteStorage.GetTypeSymbolSprite(pokemon.species.type1);

            Pokemon.Type?pokemonType2 = pokemon.species.type2;
            if (pokemonType2 == null)
            {
                imageType2.gameObject.SetActive(false);
            }
            else
            {
                imageType2.gameObject.SetActive(true);
                imageType2.sprite = SpriteStorage.GetTypeSymbolSprite((Pokemon.Type)pokemon.species.type2);
            }

            textName.text = pokemon.GetDisplayName();

            imageGender.sprite = pokemon.LoadGenderSprite();

            textLevelValue.text = pokemon.GetLevel().ToString();

            if (pokemon.heldItem != null)
            {
                textItemName.text     = pokemon.heldItem.itemName;
                imageItemIcon.enabled = true;
                imageItemIcon.sprite  = pokemon.heldItem.LoadSprite();
            }
            else
            {
                textItemName.text     = "No held item";
                imageItemIcon.enabled = false;
            }

            //TODO - set values for ability when and if implemented
            textAbilityName.text        = "";
            textAbilityDescription.text = "";

            if (pokemon.nonVolatileStatusCondition != PokemonInstance.NonVolatileStatusCondition.None)
            {
                imageStatusCondition.gameObject.SetActive(true);

                Sprite statusConditionSprite = SpriteStorage.GetNonVolatileStatusConditionSprite(pokemon.nonVolatileStatusCondition);
                if (statusConditionSprite != null)
                {
                    imageStatusCondition.gameObject.SetActive(true);
                    imageStatusCondition.sprite = statusConditionSprite;
                }
                else
                {
                    imageStatusCondition.gameObject.SetActive(false);
                }
            }
            else
            {
                imageStatusCondition.gameObject.SetActive(false);
            }

            imageCheatPokemon.gameObject.SetActive(pokemon.cheatPokemon);
            imageShinyPokemon.gameObject.SetActive(pokemon.IsShiny);

            #endregion

            #region Stats

            Pokemon.Stats <int> stats = pokemon.GetStats();

            textAttackValue.text         = stats.attack.ToString();
            textDefenseValue.text        = stats.defense.ToString();
            textSpecialAttackValue.text  = stats.specialAttack.ToString();
            textSpecialDefenseValue.text = stats.specialDefense.ToString();
            textSpeedValue.text          = stats.speed.ToString();
            healthBar.UpdateBar(pokemon.HealthProportion);

            #endregion
        }
Ejemplo n.º 10
0
        public void SetPokemon(PokemonInstance pokemon)
        {
            if (pokemon == null)
            {
                SetPokemonShownState(false);
            }
            else
            {
                SetPokemonShownState(true);

                textDisplayName.text = pokemon.GetDisplayName();
                imageGender.sprite   = pokemon.LoadGenderSprite();
                textLevel.text       = levelPrefix + pokemon.GetLevel().ToString();
                imageSprite.sprite   = pokemon.LoadSprite(PokemonSpecies.SpriteType.Front1);

                textSpeciesName.text   = pokemon.species.name;
                textSpeciesNumber.text = pokemon.species.id.ToString();
                imageType1.sprite      = SpriteStorage.GetTypeSymbolSprite(pokemon.species.type1);
                if (pokemon.species.type2 != null)
                {
                    imageType2.sprite = SpriteStorage.GetTypeSymbolSprite((Type)pokemon.species.type2);
                }
                else
                {
                    imageType2.enabled = false;
                }

                //This capitalises first letter of the nature's name
                textNature.text   = pokemon.nature.name[0].ToString().ToUpper() + pokemon.nature.name.Substring(1);
                textItemName.text = pokemon.heldItem != null ? pokemon.heldItem.itemName : "";

                textStatAttackValue.text         = pokemon.GetStats().attack.ToString();
                textStatDefenseValue.text        = pokemon.GetStats().defense.ToString();
                textStatSpecialAttackValue.text  = pokemon.GetStats().specialAttack.ToString();
                textStatSpecialDefenseValue.text = pokemon.GetStats().specialDefense.ToString();
                textStatSpeedValue.text          = pokemon.GetStats().speed.ToString();
                textStatHealthValue.text         = pokemon.GetStats().health.ToString();

                statHexEV.values = new float[]
                {
                    (float)pokemon.effortValues.attack / PokemonInstance.maximumEffortValue,
                    (float)pokemon.effortValues.defense / PokemonInstance.maximumEffortValue,
                    (float)pokemon.effortValues.specialAttack / PokemonInstance.maximumEffortValue,
                    (float)pokemon.effortValues.specialDefense / PokemonInstance.maximumEffortValue,
                    (float)pokemon.effortValues.speed / PokemonInstance.maximumEffortValue,
                    (float)pokemon.effortValues.health / PokemonInstance.maximumEffortValue
                };

                statHexIV.values = new float[]
                {
                    (float)pokemon.individualValues.attack / PokemonInstance.maximumIndividualValue,
                    (float)pokemon.individualValues.defense / PokemonInstance.maximumIndividualValue,
                    (float)pokemon.individualValues.specialAttack / PokemonInstance.maximumIndividualValue,
                    (float)pokemon.individualValues.specialDefense / PokemonInstance.maximumIndividualValue,
                    (float)pokemon.individualValues.speed / PokemonInstance.maximumIndividualValue,
                    (float)pokemon.individualValues.health / PokemonInstance.maximumIndividualValue
                };

                imageCheatPokemon.enabled = pokemon.cheatPokemon;
            }
        }
Ejemplo n.º 11
0
 public override bool CheckCompatibility(PokemonInstance pokemon)
 => pokemon.health < pokemon.GetStats().health&& !pokemon.IsFainted;
Ejemplo n.º 12
0
        /// <summary>
        /// Cheat command to set the health on an opponent pokemon. Negative party index means active pokemon
        /// </summary>
        public void CheatCommand_OpponentPokemonHealthSet(int partyIndex,
                                                          bool absoluteMode,
                                                          float amount)
        {
            PokemonInstance pokemon = partyIndex >= 0 ? battleData.participantOpponent.GetPokemon()[partyIndex] : battleData.participantOpponent.ActivePokemon;

            if (pokemon == null)
            {
                return;
            }
            pokemon.health = absoluteMode ? Mathf.FloorToInt(amount) : Mathf.FloorToInt(pokemon.GetStats().health *amount);
            FullUpdateOpponentOverviewPane();
        }
Ejemplo n.º 13
0
        public override void SerializePokemonInstance(Stream stream, PokemonInstance pokemon)
        {
            byte[] buffer;

            //Species
            buffer = BitConverter.GetBytes(pokemon.speciesId);
            stream.Write(buffer, 0, 4);

            //Details
            buffer = pokemon.guid.ToByteArray();
            stream.Write(buffer, 0, 16);

            SerializeString(stream, pokemon.nickname ?? "");
            SerializeHeldItem(stream, pokemon);
            SerializeNullableBool(stream, pokemon.gender);

            //Catch
            buffer = BitConverter.GetBytes(pokemon.pokeBallId);
            stream.Write(buffer, 0, 4);

            buffer = BitConverter.GetBytes(pokemon.catchTime);
            stream.Write(buffer, 0, 8);

            //OT
            SerializeString(stream, pokemon.originalTrainerName);
            buffer = pokemon.originalTrainerGuid.ToByteArray();
            stream.Write(buffer, 0, 16);

            //Cheat Pokemon
            SerializeBool(stream, pokemon.cheatPokemon);

            //Stats
            SerializeByteStats(stream, pokemon.effortValues);
            SerializeByteStats(stream, pokemon.individualValues);

            buffer = BitConverter.GetBytes(pokemon.natureId);
            stream.Write(buffer, 0, 4);

            SerializeIntStats(stream, pokemon.GetStats());

            buffer = new byte[1] {
                pokemon.friendship
            };
            stream.Write(buffer, 0, 1);

            //Moves
            buffer = BitConverter.GetBytes(pokemon.moveIds[0]);
            stream.Write(buffer, 0, 4);
            buffer = BitConverter.GetBytes(pokemon.moveIds[1]);
            stream.Write(buffer, 0, 4);
            buffer = BitConverter.GetBytes(pokemon.moveIds[2]);
            stream.Write(buffer, 0, 4);
            buffer = BitConverter.GetBytes(pokemon.moveIds[3]);
            stream.Write(buffer, 0, 4);

            buffer = pokemon.movePPs;
            stream.Write(buffer, 0, 4); //4 byte values

            buffer = BitConverter.GetBytes(pokemon.experience);
            stream.Write(buffer, 0, 4);

            buffer = BitConverter.GetBytes((int)pokemon.nonVolatileStatusCondition);
            stream.Write(buffer, 0, 4);

            buffer = BitConverter.GetBytes(pokemon.health);
            stream.Write(buffer, 0, 4);
        }