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) };
/// <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); }
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 } }
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) }); }
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 = ""; } }
//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)); }
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)); } }
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); }
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 }
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; } }
public override bool CheckCompatibility(PokemonInstance pokemon) => pokemon.health < pokemon.GetStats().health&& !pokemon.IsFainted;
/// <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(); }
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); }