static private void RandomBasicParams(SubAttack subAttack) { subAttack.delayBeforeActive = Random.Range(0f, 2f); subAttack.delayBeforeNext = Random.Range(0f, 2f); subAttack.aoeTimer = Random.Range(2f, 4f); subAttack.damage = Random.Range(5, 20); }
private static void RandomAoeTypeParams(SubAttack subattack) { subattack.aoeType = (AoeType)Random.Range(0, System.Enum.GetValues(typeof(AoeType)).Length); if (subattack.aoeType == AoeType.Square) { RandomSquareAoeParams(subattack); } else if (subattack.aoeType == AoeType.Circle) { RandomCircleAoeParams(subattack); } }
// Char1 is attacker, char2 is target // OnAttack public void StandardAttack(CharacterScript char1, CharacterScript char2, Attack atk, Item weapon, SubAttack holder, bool crit) { int finalDamage = 0; if (atk.positive) { finalDamage = atk.magical ? (int)((float)weapon.Magic * atk.damageModifier / 100f * ((char1.intelligence / 100f) + 1)) : (int)((float)weapon.Health * atk.damageModifier / 100f * ((char1.strength / 100f) + 1)); } else { finalDamage = atk.magical ? (int)((float)weapon.Magic * atk.damageModifier / 100f * ((((char1.intelligence - char2.spirit) / 100f) + 1) + ((float)char1.intelligence / char2.spirit) / 2f)) : (int)((float)weapon.Health * atk.damageModifier / 100f * ((((char1.strength - char2.resistance) / 100f) + 1) + ((float)char1.strength / char2.resistance) / 2f)); } float positionModifier = 1; Debug.Log("Initial damage: " + finalDamage); if (crit) { finalDamage *= 2; battleController.DisplayText("<b><color=red>Critical hit!</color></b>"); } switch (char2.position) { case CharacterScript.Position.Back: positionModifier += atk.ranged ? 0 : -0.25f; break; case CharacterScript.Position.Centered: break; case CharacterScript.Position.Front: positionModifier += atk.ranged ? 0 : 0.25f; break; case CharacterScript.Position.Flying: positionModifier += atk.ranged ? 0 : -0.25f; break; case CharacterScript.Position.Removed: positionModifier = atk.ranged ? 0 : 0f; break; } switch (char2.position) { case CharacterScript.Position.Back: positionModifier += atk.ranged ? 0 : -0.25f; break; case CharacterScript.Position.Centered: break; case CharacterScript.Position.Front: positionModifier += atk.ranged ? 0 : 0.25f; break; case CharacterScript.Position.Flying: if (atk.ranged) { switch (char1.position) { case CharacterScript.Position.Back: positionModifier = 0.75f; break; case CharacterScript.Position.Centered: case CharacterScript.Position.Flying: positionModifier = 1f; break; case CharacterScript.Position.Front: positionModifier = 1.25f; break; } } else { positionModifier = 0; } break; case CharacterScript.Position.Removed: positionModifier = atk.ranged ? 0 : 0f; break; } Debug.Log(char1.position + "->" + char2.position + " : " + positionModifier); finalDamage = (int)(finalDamage * positionModifier); /*if (char2.damageTypeModifier.ContainsKey(atk.damageType)) * { * finalDamage = (int)((float)finalDamage * char2.damageTypeModifier[atk.damageType] / 100f); * }*/ for (int n = 0; n < char2.valnurabilityTypes.Count; n++) { if (char2.valnurabilityTypes[n] == atk.damageType && char2.valnurabilityPercentages.Count >= n) { finalDamage = (int)((float)finalDamage * char2.valnurabilityPercentages[n] / 100f); } } char2.ModifyHealth(-finalDamage); totalDamage += finalDamage; char1.threat += finalDamage; }
public void SpawnCharacter(CharacterScript char1, CharacterScript char2, Attack atk, Item weapon, SubAttack holder, bool crit) { Debug.Log("Attempting to spawn 'Character Prefabs/Spawnables/" + holder.miscText + "'"); GameObject obj = Resources.Load <GameObject>("Character Prefabs/Spawnables/" + holder.miscText); battleController.Spawn(obj, holder.miscNum, char1.tag); }
public void NearDeathExperience(CharacterScript char1, CharacterScript char2, Attack atk, Item weapon, SubAttack holder, bool crit) { int finalDamage = char1.maxHealth - char1.health; char2.ModifyHealth(-finalDamage); totalDamage += finalDamage; }
public void LifeSteal(CharacterScript char1, CharacterScript char2, Attack atk, Item weapon, SubAttack holder, bool crit) // Has to be last in delegate list { int leach = (int)(totalDamage * holder.miscNum / 100f); char1.ModifyHealth(leach); }
public void Steal(CharacterScript char1, CharacterScript char2, Attack atk, Item weapon, SubAttack holder, bool crit) // To do: impliment better chance mechanic (?) Also, reduce number of drops left in enemy inv { int index = 0; int amount = crit ? 2 : 1; List <Item> items; if (char2.gameObject.tag == "Enemy") { items = char2.dropList; if (items.Count <= 0) { battleController.DisplayText("Nothing to steal!"); return; } index = UnityEngine.Random.Range(0, items.Count - 1); amount *= items[index].name == "Krn" ? 100 : 1; amount += items[index].name == "Krn" ? UnityEngine.Random.Range(-50, 50) : 0; if (char2.dropMax[index] >= amount) { InventoryScript.Instance.ModifyInventory(amount, items[index]); battleController.DisplayText("Stole " + amount + " " + items[index].name + "(s)"); } else if (char2.dropMax[index] > 0) { InventoryScript.Instance.ModifyInventory(char2.dropMax[index], items[index]); battleController.DisplayText("Stole " + char2.dropMax[index] + " " + items[index].name + "(s)"); } else { Debug.LogWarning("Trying to steal item from empty inventory! (contains no " + items[index].name + ")"); } } else { items = InventoryScript.Instance.GetListType(new List <Item.ItemType>() { Item.ItemType.Consumable }); if (items.Count <= 0) { battleController.DisplayText("Nothing to steal!"); return; } index = UnityEngine.Random.Range(0, items.Count - 1); amount *= items[index].name == "Krn" ? 100 : 1; amount += items[index].name == "Krn" ? UnityEngine.Random.Range(-50, 50) : 0; if (InventoryScript.Instance.inventory[items[index]] >= amount) { InventoryScript.Instance.ModifyInventory(-amount, items[index]); battleController.DisplayText("Stole " + amount + " " + items[index].name + "(s)"); } else if (InventoryScript.Instance.inventory[items[index]] > 0) { InventoryScript.Instance.ModifyInventory(InventoryScript.Instance.inventory[items[index]], items[index]); battleController.DisplayText("Stole " + InventoryScript.Instance.inventory[items[index]] + " " + items[index].name + "(s)"); } else { Debug.LogWarning("Trying to steal item from empty inventory! (contains no " + items[index].name + ")"); } } }
public void SwitchPosition(CharacterScript char1, CharacterScript char2, Attack atk, Item weapon, SubAttack holder, bool crit) { switch (char2.position) { case CharacterScript.Position.Back: if ((holder.miscNum) > 0) { char2.position = CharacterScript.Position.Centered; } else if ((holder.miscNum) < 0) { char2.position = CharacterScript.Position.Back; } break; case CharacterScript.Position.Centered: if (holder.miscNum > 0) { char2.position = CharacterScript.Position.Front; } else if (holder.miscNum < 0) { char2.position = CharacterScript.Position.Back; } break; case CharacterScript.Position.Front: if (holder.miscNum > 0) { char2.position = CharacterScript.Position.Front; } else if (holder.miscNum < 0) { char2.position = CharacterScript.Position.Centered; } break; case CharacterScript.Position.Flying: if (holder.miscNum > 0) { char2.position = CharacterScript.Position.Front; } else if (holder.miscNum < 0) { char2.position = CharacterScript.Position.Back; } break; case CharacterScript.Position.Removed: Debug.Log("Trying to move a removed enemy"); break; } }
public void Flee(CharacterScript char1, CharacterScript char2, Attack atk, Item weapon, SubAttack holder, bool crit) { // To do: add extra chance. Also add the thing itself char2.position = CharacterScript.Position.Removed; char2.aiState = CharacterScript.AiState.Stun; }
public void PotionsAttack(CharacterScript char1, CharacterScript char2, Attack atk, Item weapon, SubAttack holder, bool crit) { int finalDamage = (int)(weapon.Health * atk.damageModifier / 100f); int finalMagic = (int)(weapon.Magic * atk.damageModifier / 100f);; if (Mathf.Abs(finalDamage) > 0) { char2.ModifyHealth(-finalDamage); } if (Mathf.Abs(finalMagic) > 0) { char2.ModifyMagic(-finalMagic); } }
private static void RandomCircleAoeParams(SubAttack subattack) { subattack.diameter = Random.Range(4f, 25f); }
private static void RandomSquareAoeParams(SubAttack subattack) { subattack.xSize = Random.Range(4f, 25f); subattack.zSize = Random.Range(4f, 25f); subattack.rotation = Random.Range(0, 180f); }