/// <summary>Mechanic to execute when hitting an object. Overrideable.</summary> virtual public void OnCollisionEnter(Collision collision) { ICombative combativeObject = collision.gameObject.GetComponent <ICombative>(); if (combativeObject != null) { DamageObject(combativeObject); } Destroy(this); }
public bool CombatAction(ICombative other, Move move, out string combatActionMessage) { combatActionMessage = ""; if (move.PP == 0) { return(false); } combatActionMessage += Attack(other, move); move.PP--; return(true); }
private void ApplyEffect(ICombative other, Move move) { if (move.TargetsOther && isEffectSuccessful(this, move)) { other.ReceiveEffect(move); } else if (!move.TargetsOther) { ReceiveEffect(move); } }
private string CreateEffectiveMoveMessage(ICombative other, Move move) { if (other.isDoubleDamageFrom(move.Type)) { return("|It's super effective!\n"); } else if (other.isHalfDamageFrom(move.Type)) { return("|It's not very effective...\n"); } else { return(""); } }
private float GetDamageModifier(ICombative defender, Move move) { float modifier = 1f; Random rand = new Random(); float random = ((float)rand.Next(85, 100)) / 100f; float STAB = move.Type == this.PokeType.Name ? 1.5f : 1.0f; float typeEffective = 1.0f; if (defender.isDoubleDamageFrom(move.Type)) { typeEffective = 2.0f; } else if (defender.isHalfDamageTo(move.Type)) { typeEffective = 0.5f; } modifier *= (random * STAB * typeEffective); return(modifier); }
private int CalculateDamage(ICombative defender, Move move) { var modifier = GetDamageModifier(defender, move); float attackerStageMultiplier = isSpecialAttack(move.Type) ? this.Stats.Skills["special-attack"].StageMultiplier : this.Stats.Skills["attack"].StageMultiplier; float defenderStageMultiplier = isSpecialAttack(move.Type) ? defender.GetStats().Skills["special-defense"].StageMultiplier : defender.GetStats().Skills["defense"].StageMultiplier; string attackSkill = isSpecialAttack(move.Type) ? "special-attack" : "attack"; string defenseSkill = isSpecialAttack(move.Type) ? "special-defense" : "defense"; var A = this.Stats.Skills[attackSkill].Value * attackerStageMultiplier; var D = defender.GetStats().Skills[defenseSkill].Value * defenderStageMultiplier; var numerator = (((2 * Stats.Level) / 5) + 2) * move.Power * (A / D) * modifier; var denominator = 50; var damage = ((numerator / denominator) + 2) * modifier; return((int)damage); }
public string TriggerAilments(ICombative attacker) { var logMessage = ""; if (CurrentAilments.Count == 0) { return(""); } foreach (var ailment in CurrentAilments.Values) { ailment.ApplyAilment(this); if (CurrentAilments.ContainsKey(ailment.Name)) { logMessage += $"|{Name} was afflicted by {ailment.Name}! \n"; } if (ailment.Name.Equals("leech-seed")) { System.Console.WriteLine("BINGO"); var healthLeeched = ((Leech)ailment).healthLeeched(this); attacker.Heal((int)healthLeeched); } else if (ailment.Name.Equals("confusion")) { logMessage += $"|{Name} is confused!"; var confusionDamage = ((Confusion)ailment).GetDamage(this); if (((Confusion)ailment).isTargetOther(PokeType.Name)) { attacker.TakeDamage((int)confusionDamage); } else { logMessage += $"|{Name} hurt itself in confusion!"; this.TakeDamage((int)confusionDamage); } } } return(logMessage); }
private string Attack(ICombative other, Move move) { if (!other.isAttackDodged(this, move)) { var damage = CalculateDamage(other, move); other.TakeDamage(damage); if (!move.StatChangeName.Equals("none")) { ApplyEffect(other, move); } if (move.Ailment != null) { other.ReceiveAilment(move.Ailment); } return(CreateEffectiveMoveMessage(other, move)); } else { return("|It missed!\n"); } }
public float healthLeeched(ICombative receiver) { float damageDealt = receiver.GetStats().MaxHP *(0.10f); return(damageDealt); }
public override void Kill(ICombative objectToKill) { }
public override void IssueDamage(int damageToGive, ICombative objectToDamage) { }
abstract public void Kill(ICombative objectToKill);
abstract public void IssueDamage(int damageToGive, ICombative objectToDamage);
/// <summary>Damage mechanics when having hit an ICombative target. Overridable.</summary> virtual public void DamageObject(ICombative target) { target.TakeDamage(projectileDamage); }