import math, random deduct = 0 # attacker stats attack = 10 # this can range from 0 to 255 magic = 255 # likewise dmcon = 0 # set according to command movetype = 0 # likewise element = 0 command = "cure" attackcheer = 0 attackfocus = 0 strengthplus = 0 magicplus = 0 piercing = False powerbreak = False celestial = False name = "tidus" hp = 9999 maxhp = 9999 bdl = True mp = 999 maxmp = 999 magicbooster = False accuracy = 3 skillaccuracy = 98 attackertype = "person" attackluck = 3 # defender stats defence = 34 magicdefence = 1 armour = False armourbreak = False mentalbreak = False defend = False protect = False shell = False defenceplus = 0 mdefenceplus = 0 defencecheer = 0 defencefocus = 5 evasion = 3 defendertype = "monster" defenceluck = 3 fireeffect = "normal" lightningeffect = "half" watereffect = "vuln" iceeffect = "absorb" holyeffect = "normal" defenderhp = 20000 # damage constant if command == "attack": dmcon = 16 movetype = "physical" elif command == "cure": dmcon = 24 movetype = "heal" elif command == "cura": dmcon = 40 movetype = "heal" elif command == "curaga": dmcon = 80 movetype = "heal" elif command == "blizzard": dmcon = 12 movetype = "magic" element = "ice" elif command == "thunder": dmcon = 12 movetype = "magic" element = "lightning" elif command == "water": dmcon = 12 movetype = "magic" element = "water" elif command == "fire": dmcon = 12 movetype = "magic" element = "fire" elif command == "fira": dmcon = 24 movetype = "magic" element = "fire" elif command == "blizzara": dmcon = 24 movetype = "magic" element = "ice" elif command == "thundara": dmcon = 24 movetype = "magic" element = "lightning" elif command == "watera": dmcon = 24 movetype = "magic" element = "water" elif command == "firaga": dmcon = 42 movetype = "magic" element = "fire" elif command == "blizzaga": dmcon = 42 movetype = "magic" element = "ice" elif command == "waterga": dmcon = 42 movetype = "magic" element = "water" elif command == "thundaga": dmcon = 42 movetype = "magic" element = "lightning" elif command == "drain": dmcon = 20 movetype = "physical" # presumably? elif command == "osmose": dmcon = 10 movetype = "magic" elif command == "flare": dmcon = 60 movetype = "magic" elif command == "ultima": dmcon = 70 movetype = "magic" elif command == "holy": dmcon = 100 movetype = "magic" element = "holy" # calculate damage basedamage = math.floor((math.floor(((attack + attackcheer) ** 3) / 32) + 32) * math.floor(dmcon / 16)) if basedamage > 99999: basedamage = 99999 defnum = math.floor(math.floor(((math.ceil(defence - 280.4)) ** 2) / 110) + 16) damage = math.floor(basedamage * defnum / 730) # now do modifiers if strengthplus > 0: damage = damage + (math.floor(damage * strengthplus / 100)) if armour == True: if armourbreak == False and piercing == False: damage = math.floor(damage / 3) if armourbreak == True: defence = 0 if defend == True: damage = math.floor(damage / 2) if protect == True: damage = math.floor(damage / 2) if powerbreak == True: damage = math.floor(damage / 2) if defenceplus > 0: damage = damage - (math.floor(damage * defenceplus / 100)) if defencecheer > 0: damage = math.ceil(damage * (15 - defencecheer) / 15) if celestial == True: defence = 0 if name == "tidus" or name == "wakka" or name == "kimahri" or name == "rikku": damage = math.floor(damage * ((10 + (100 * hp / maxhp)) / 110)) elif name == "yuna" or name == "lulu": damage = math.floor(damage * ((10 + (100 * mp / maxmp)) / 110)) elif name == "auron": damage = math.floor(damage * ((130 - (100 * hp / maxhp)) / 60)) # now apply the defence stat i guess? finaldamage = math.floor(damage * (730 - math.floor(((defence * 51) - math.floor((defence ** 2) / 11)) / 10)) / 730) if element == "fire" and fireeffect == "half": finaldamage = math.floor(finaldamage / 2) elif element == "fire" and fireeffect == "vuln": finaldamage = finaldamage + math.floor(finaldamage / 2) elif element == "fire" and fireeffect == "absorb": finaldamage = finaldamage * -1 if element == "water" and watereffect == "half": finaldamage = math.floor(finaldamage / 2) elif element == "water" and watereffect == "vuln": finaldamage = finaldamage + math.floor(finaldamage / 2) elif element == "water" and watereffect == "absorb": finaldamage = finaldamage * -1 if element == "lightning" and lightningeffect == "half": finaldamage = math.floor(finaldamage / 2) elif element == "lightning" and lightningeffect == "vuln": finaldamage = finaldamage + math.floor(finaldamage / 2) elif element == "lightning" and lightningeffect == "absorb": finaldamage = finaldamage * -1 if element == "ice" and iceeffect == "half": finaldamage = math.floor(finaldamage / 2) elif element == "ice" and iceeffect == "vuln": finaldamage = finaldamage + math.floor(finaldamage / 2) elif element == "ice" and iceeffect == "absorb": finaldamage = finaldamage * -1 if element == "holy" and holyeffect == "half": finaldamage = math.floor(finaldamage / 2) elif element == "holy" and holyeffect == "vuln": finaldamage = finaldamage + math.floor(finaldamage / 2) elif element == "holy" and holyeffect == "absorb": finaldamage = finaldamage * -1 if finaldamage > 99999: finaldamage = 99999 if bdl == False and finaldamage > 9999: finaldamage = 9999 if finaldamage < -99999: finaldamage = -99999 if bdl == False and finaldamage < -9999: finaldamage = -9999 if movetype == "physical": print("Physical damage: " + str(finaldamage)) deduct = finaldamage # magic damage and healing if movetype == "heal": magicbasedamage = dmcon * math.floor((magic + attackfocus + dmcon) / 2) else: magicbasedamage = math.floor(dmcon * (math.floor(((magic + attackfocus) ** 2) / 6) + dmcon) / 4) if magicbasedamage > 99999: magicbasedamage = 99999 mdefnum = math.floor(math.floor((((magicdefence - 280.4)) ** 2) / 110) + 16) magicdamage = math.floor(magicbasedamage * mdefnum / 730) # magic modifiers if magicbooster == True: magicdamage = magicdamage + math.floor(magicdamage / 2) if magicplus > 0: magicdamage = magicdamage + (math.floor(magicdamage * magicplus / 100)) if mentalbreak == True: magicdamage = math.floor(magicdamage / 2) magicdefence = 0 if shell == True: magicdamage = math.floor(magicdamage / 2) if mdefenceplus > 0: magicdamage = magicdamage - (math.floor(magicdamage * mdefenceplus / 100)) if defencefocus > 0: magicdamage = math.ceil(magicdamage * (15 - defencefocus) / 15) # magic defence if movetype == "heal": # i assume this isn't affected by mdef print("HP healed: " + str(magicdamage)) deduct = -1 * magicdamage else: finalmdamage = math.floor(magicdamage * (730 - math.floor(((magicdefence * 51) - math.floor((magicdefence ** 2) / 11)) / 10)) / 730) if element == "fire" and fireeffect == "half": finalmdamage = math.floor(finalmdamage / 2) elif element == "fire" and fireeffect == "vuln": finalmdamage = finalmdamage + math.floor(finalmdamage / 2) elif element == "fire" and fireeffect == "absorb": finalmdamage = finalmdamage * -1 if element == "water" and watereffect == "half": finalmdamage = math.floor(finalmdamage / 2) elif element == "water" and watereffect == "vuln": finalmdamage = finalmdamage + math.floor(finalmdamage / 2) elif element == "water" and watereffect == "absorb": finalmdamage = finalmdamage * -1 if element == "lightning" and lightningeffect == "half": finalmdamage = math.floor(finalmdamage / 2) elif element == "lightning" and lightningeffect == "vuln": finalmdamage = finalmdamage + math.floor(finalmdamage / 2) elif element == "lightning" and lightningeffect == "absorb": finalmdamage = finalmdamage * -1 if element == "ice" and iceeffect == "half": finalmdamage = math.floor(finalmdamage / 2) elif element == "ice" and iceeffect == "vuln": finalmdamage = finalmdamage + math.floor(finalmdamage / 2) elif element == "ice" and iceeffect == "absorb": finalmdamage = finalmdamage * -1 if element == "holy" and holyeffect == "half": finalmdamage = math.floor(finalmdamage / 2) elif element == "holy" and holyeffect == "vuln": finalmdamage = finalmdamage + math.floor(finalmdamage / 2) elif element == "holy" and holyeffect == "absorb": finalmdamage = finalmdamage * -1 if finalmdamage > 99999: finalmdamage = 99999 if bdl == False and finalmdamage > 9999: finalmdamage = 9999 if finalmdamage < -99999: finalmdamage = -99999 if bdl == False and finalmdamage < -9999: finalmdamage = -9999 if movetype == "magic": print("Magic damage: " + str(finalmdamage)) deduct = finalmdamage if attackertype == "person": acnum = accuracy * 0.4 - evasion + 9 if acnum <= 0: accent = 25 elif acnum < 2.5: # depends on when these are rounded? accent = 30 elif acnum < 4.5: accent = 40 elif acnum < 5.5: accent = 50 elif acnum < 6.5: accent = 60 elif acnum < 7.5: accent = 80 else: accent = 100 elif attackertype == "monster": accent = skillaccuracy - evasion hit = accent + attackluck - defenceluck prohibit = random.randint(0,100) if movetype != "heal": if prohibit > hit: print("Attack failed") else: print("Attack succeeded") defenderhp = defenderhp - deduct if defenderhp < 1: print("KO") else: print("Target HP: " + str(defenderhp))