Skip to content

Instantly share code, notes, and snippets.

@Aurenos
Created September 4, 2013 03:26
Show Gist options
  • Save Aurenos/6432456 to your computer and use it in GitHub Desktop.
Save Aurenos/6432456 to your computer and use it in GitHub Desktop.
A little Final Fantasy inspired text-based battle I built back in '09.
import random
class User: #The User
# Basic Stats
name = "Spero"
maxhp = random.randint(8000,9999)
hp = maxhp
maxmp = random.randint(380,550)
mp = maxmp
evasion = random.randint(10,20)
strength = random.randint(100,255)
magic = random.randint(100,255)
overdriveTech = ""
# Current Conditions
overdrive = 0
multcast = False
benefit = [] #This and status are used only for display on the menu
status = []
defend = 1
#Possible Status Ailments -each lasts a limited amount of turns
#Each of the follwing variables that have 'ct' at the end
#is a the countdown until that particular status or benefit is removed
#If the ct variable is equal to 0, then the corresponding status or
#benefit should be False.
poison = False
poisonct = 0
poisoneffect = False
confuse = False
confusect = 0
paralysis = False
paralysisct = 0
mute = False
mutect = 0
berserk = False
berserkct = 0
berserkBonus = 1.5
#Items
potion = 3
ether = 3
elixir = 1
remedy = 2
#Benefits
astra = False
astract = 0
barrier = 1
barrierct = 0
regen = False
regenct = 0
rheal = False
class Bahamut: #If user chooses "Summon Bahamut" as Overdrive
summoned = False
#Basic Stats
maxhp = random.randint(14000,16250)
hp = maxhp
maxmp = random.randint(400,530)
mp = maxmp
strength = random.randint(180,255)
magic = random.randint(180,255)
evasion = random.randint(15,25)
overdriveTech = "Exa Flare"
#Current Conditions
overdrive = 0
cooldown = False
defend = 1
barrier = 1 #This is here only to satisfy the calculation for Abaddon's dmg
class BlackMagic:
def flare(self):
weakBonus = 1
print "You cast Flare on Abaddon!"
print
if Abaddon.weakness == "Fire":
print "You hit Abaddon's weakness!"
print
weakBonus = 1.5
dmg = int(random.randint(30,40)*Player.magic*weakBonus)
if dmg > 9999:
dmg = 9999
if Abaddon.weakness == "Ice":
print "Abaddon absorbs your spell!"
print
print "Abaddon recovers",dmg,"HP!"
Abaddon.hp += dmg
if Abaddon.hp > Abaddon.maxhp:
Abaddon.hp = Abaddon.maxhp
raw_input("")
if not Player.multcast:
Player.mp -= 30
return abaddonTurn()
else:
print "Abaddon takes",dmg,"damage!"
Abaddon.hp -= dmg
raw_input("")
if not Player.multcast:
Player.mp -= 30
return abaddonTurn()
def blizzard(self):
weakBonus = 1
print "You cast Blizzard on Abaddon!"
print
if Abaddon.weakness == "Ice":
print "You hit Abaddon's weakness!"
print
weakBonus = 1.5
dmg = int(random.randint(30,40)*Player.magic*weakBonus)
if dmg > 9999:
dmg = 9999
if Abaddon.weakness == "Fire":
print "Abaddon absorbs your spell!"
print
print "Abaddon recovers",dmg,"HP!"
Abaddon.hp += dmg
if Abaddon.hp > Abaddon.maxhp:
Abaddon.hp = Abaddon.maxhp
raw_input("")
if not Player.multcast:
Player.mp -= 30
return abaddonTurn()
else:
print "Abaddon takes",dmg,"damage!"
Abaddon.hp -= dmg
raw_input("")
if not Player.multcast:
Player.mp -= 30
return abaddonTurn()
def bolt(self):
weakBonus = 1
print "You cast Bolt on Abaddon!"
print
if Abaddon.weakness == "Lightning":
print "You hit Abaddon's weakness!"
print
weakBonus = 1.5
dmg = int(random.randint(30,40)*Player.magic*weakBonus)
if dmg > 9999:
dmg = 9999
if Abaddon.weakness == "Water":
print "Abaddon absorbs your spell!"
print
print "Abaddon recovers",dmg,"HP!"
Abaddon.hp += dmg
if Abaddon.hp > Abaddon.maxhp:
Abaddon.hp = Abaddon.maxhp
raw_input("")
if not Player.multcast:
Player.mp -= 30
return abaddonTurn()
else:
print "Abaddon takes",dmg,"damage!"
Abaddon.hp -= dmg
raw_input("")
if not Player.multcast:
Player.mp -= 30
return abaddonTurn()
def water(self):
weakBonus = 1
print "You cast Water on Abaddon!"
print
if Abaddon.weakness == "Water":
print "You hit Abaddon's weakness!"
print
weakBonus = 1.5
dmg = int(random.randint(30,40)*Player.magic*weakBonus)
if dmg > 9999:
dmg = 9999
if Abaddon.weakness == "Lightning":
print "Abaddon absorbs your spell!"
print
print "Abaddon recovers",dmg,"HP!"
Abaddon.hp += dmg
if Abaddon.hp > Abaddon.maxhp:
Abaddon.hp = Abaddon.maxhp
raw_input("")
if not Player.multcast:
Player.mp -= 30
return abaddonTurn()
else:
print "Abaddon takes",dmg,"damage!"
Abaddon.hp -= dmg
raw_input("")
if not Player.multcast:
Player.mp -= 30
return abaddonTurn()
def bio(self):
poison = random.randint(1,100)
dmg = int(random.randint(30,35)*Player.magic)
if dmg > 9999:
dmg = 9999
print "You cast Bio on Abaddon!"
print
print "Abaddon takes",dmg,"damage!"
if poison <= 40:
print
print "Abaddon is poisoned!"
Abaddon.poison = True
Abaddon.poisonct = 10
Abaddon.hp -= dmg
raw_input("")
if not Player.multcast:
Player.mp -= 35
return abaddonTurn()
def drain(self):
drain = random.randint(1,50)
Player.mp -= 50
if drain >= 51:
print "Your attempt to Drain Abaddon fails!"
raw_input("")
return abaddonTurn()
else:
dmg = random.randint(5,10)*Player.magic
if dmg > 9999:
dmg = 9999
print "You cast Drain on Abaddon!"
print
print "Abaddon takes",dmg,"damage!"
print
print "You regain",dmg,"HP!"
Player.hp += dmg
if Player.hp > Player.maxhp:
Player.hp = Player.maxhp
Abaddon.hp -= dmg
raw_input("")
return abaddonTurn()
def mpAbsorb(self):
if Abaddon.mp <= 0:
print "Abaddon has no MP left"
raw_input("")
return abaddonTurn()
dmg = random.randint(5,10)*int(Player.magic/6)
if dmg > 9999:
dmg = 9999
print "You cast MP Absorb on Abaddon!"
print
print "Abaddon takes",dmg,"MP damage!"
print
print "You regain",dmg,"MP!"
Player.mp += dmg
if Player.mp > Player.maxmp:
Player.mp = Player.maxmp
Abaddon.mp -= dmg
if Abaddon.mp < 0:
Abaddon.mp = 0
raw_input("")
return abaddonTurn()
class WhiteMagic:
def cure(self):
restore = random.randint(20,25)*Player.magic
if restore > 9999:
restore = 9999
print "You cast Cure!"
print
print "You regain",restore,"HP!"
print
Player.hp += restore
if Player.hp > Player.maxhp:
Player.hp = Player.maxhp
Player.mp -= 25
raw_input("")
return abaddonTurn()
def panacea(self):
print "You cast Panacea!"
print
Player.mp -= 20
if Player.poison:
print "You are cured of your poison!"
Player.poisonct = 0
Player.poison = False
raw_input("")
return abaddonTurn()
else:
print "The spell has no effect."
raw_input("")
return abaddonTurn()
def astra(self):
print "You cast Astra!"
print
Player.mp -= 35
if Player.astra:
print "Astra is already in effect."
raw_input("")
return abaddonTurn()
else:
print "You are now protected from receiving to two status ailments!"
Player.astra = True
Player.astract = 2
Player.benefit.append("Astra")
raw_input("")
return abaddonTurn()
def regen(self):
print "You cast Regen!"
print
Player.mp -= 40
if Player.regen:
print "Regen is already in effect."
raw_input("")
return abaddonTurn()
else:
print "You will now temporarily heal HP every turn!"
Player.regen = True
Player.regenct = 10
Player.benefit.append("Regen")
raw_input("")
return abaddonTurn()
def barrier(self):
print "You cast Barrier!"
print
Player.mp -= 50
if Player.barrier != 1:
print "Barrier is already in effect."
raw_input("")
return abaddonTurn()
else:
print "You will temporarily receive less damage!"
Player.barrier = 0.5
Player.barrierct = 10
Player.benefit.append("Barrier")
raw_input("")
return abaddonTurn()
class Skills:
def lionHeart(self):
print "You attack with Lion Heart!"
print
evade = random.randint(1,100)
if evade <= Abaddon.evasion:
print "Abaddon evades your attack"
raw_input("")
return abaddonTurn()
else:
dmg = int(0.25*(random.randint(30,40)*Player.strength))
if dmg > 9999:
dmg = 9999
print "Abaddon takes",dmg,"damage!"
print
print "You regain",dmg,"HP!"
Player.hp += dmg
if Player.hp > Player.maxhp:
Player.hp = Player.maxhp
Abaddon.hp -= dmg
raw_input("")
return abaddonTurn()
def deathBlow(self):
print "You attack with Death Blow!"
print
evade = random.randint(1,100)
if evade <= (Abaddon.evasion+40):
print "Abaddon evades your attack"
raw_input("")
return abaddonTurn()
else:
dmg = int(random.randint(30,40)*Player.strength*1.5)
if dmg > 9999:
dmg = 9999
print "Abaddon takes",dmg,"damage!"
Abaddon.hp -= dmg
raw_input("")
return abaddonTurn()
def minusStrike(self):
dmg = Player.maxhp - Player.hp
print "You attack with Minus Strike!"
print
print "Abaddon takes",dmg,"damage!"
Abaddon.hp -= dmg
raw_input("")
return abaddonTurn()
def steal(self):
success = random.randint(1,120)
if success <= 40:
print "You theft was a failure."
raw_input("")
return abaddonTurn()
if success >= 41 and success <= 70:
print "You stole a Potion!"
Player.potion += 1
raw_input("")
return abaddonTurn()
if success >= 71 and success <= 90:
print "You stole an Ether!"
Player.ether += 1
raw_input("")
return abaddonTurn()
if success >= 91 and success <= 100:
print "You stole an Elixir!"
Player.elixir += 1
raw_input("")
return abaddonTurn()
if success >= 101 and success <= 120:
print "you stole a Remedy!"
Player.remedy += 1
raw_input("")
return abaddonTurn()
def spellBlade(self):
print "-"*35
print
print "1) Fire (30 MP)"
print "2) Ice (30 MP)"
print "3) Bolt (30 MP)"
print "4) Water (30 MP)"
print "0) RETURN"
print
fusion = raw_input("What element to you want to use? ")
print
if fusion == "1" and Player.mp < 30:
print "~Insufficient MP~"
raw_input("")
return skills()
elif fusion == "2" and Player.mp < 30:
print "~Insufficient MP~"
raw_input("")
return skills()
elif fusion == "3" and Player.mp < 30:
print "~Insufficient MP~"
raw_input("")
return skills()
elif fusion == "4" and Player.mp < 30:
print "~Insufficient MP~"
raw_input("")
return skills()
else:
if fusion == "0":
return skills()
elif fusion == "1":
Player.mp -= 30
weakBonus = 1
print "You attack with Fire Sword!"
print
if Abaddon.weakness == "Fire":
print "You hit Abaddon's weakness!"
print
weakBonus = 1.5
dmg = int(random.randint(30,40)*Player.strength*weakBonus)
if dmg > 9999:
dmg = 9999
if Abaddon.weakness == "Ice":
print "Abaddon absorbs your attack!"
print
print "Abaddon recovers",dmg,"HP!"
raw_input("")
return abaddonTurn()
print "Abaddon takes",dmg,"damage!"
Abaddon.hp -= dmg
raw_input("")
return abaddonTurn()
elif fusion == "2":
Player.mp -= 30
weakBonus = 1
print "You attack with Ice Sword!"
print
if Abaddon.weakness == "Ice":
print "You hit Abaddon's weakness!"
print
weakBonus = 1.5
dmg = int(random.randint(30,40)*Player.strength*weakBonus)
if dmg > 9999:
dmg = 9999
if Abaddon.weakness == "Fire":
print "Abaddon absorbs your attack!"
print
print "Abaddon recovers",dmg,"HP!"
raw_input("")
return abaddonTurn()
print "Abaddon takes",dmg,"damage!"
Abaddon.hp -= dmg
raw_input("")
return abaddonTurn()
elif fusion == "3":
Player.mp -= 30
weakBonus = 1
print "You attack with Bolt Sword!"
print
if Abaddon.weakness == "Lightning":
print "You hit Abaddon's weakness!"
print
weakBonus = 1.5
dmg = int(random.randint(30,40)*Player.strength*weakBonus)
if dmg > 9999:
dmg = 9999
if Abaddon.weakness == "Water":
print "Abaddon absorbs your attack!"
print
print "Abaddon recovers",dmg,"HP!"
raw_input("")
return abaddonTurn()
print "Abaddon takes",dmg,"damage!"
Abaddon.hp -= dmg
raw_input("")
return abaddonTurn()
elif fusion == "4":
Player.mp -= 30
weakBonus = 1
print "You attack with Water Sword!"
print
if Abaddon.weakness == "Water":
print "You hit Abaddon's weakness!"
weakBonus = 1.5
dmg = int(random.randint(30,40)*Player.strength*weakBonus)
if dmg > 9999:
dmg = 9999
if Abaddon.weakness == "Lightning":
print "Abaddon absorbs your attack!"
print
print "Abaddon recovers",dmg,"HP!"
raw_input("")
return abaddonTurn()
print "Abaddon takes",dmg,"damage!"
Abaddon.hp -= dmg
raw_input("")
return abaddonTurn()
else:
return skills()
class Overdrives:
def omnislash(self):
print "You unleash the power of OMNISLASH!!!"
print
totaldmg = 0
for i in range(15):
dmg = random.randint(30,40)*Player.strength
if dmg > 9999:
dmg = 9999
print "You attack and Abaddon takes",dmg,"damage!"
Abaddon.hp -= dmg
totaldmg += dmg
raw_input("")
print "You deal a total of",totaldmg,"damage!!!"
Player.overdrive = 0
raw_input("")
return abaddonTurn()
def multiCast(self):
print "-"*35
print
print "1) Flare"
print "2) Blizzard"
print "3) Bolt"
print "4) Water"
print "5) Bio"
print "0) RETURN"
print
cast = raw_input("What will you cast? ")
multiple = random.randint(10,15)
if cast == "0":
return playerMenu()
elif cast == "1":
Player.multcast = True
for i in range(multiple):
BLACK.flare()
Player.multcast = False
Player.overdrive = 0
return abaddonTurn()
elif cast == "2":
Player.multcast = True
for i in range(multiple):
BLACK.blizzard()
Player.multcast = False
Player.overdrive = 0
return abaddonTurn()
elif cast == "3":
Player.multcast = True
for i in range(multiple):
BLACK.bolt()
Player.multcast = False
Player.overdrive = 0
return abaddonTurn()
elif cast == "4":
Player.multcast = True
for i in range(multiple):
BLACK.water()
Player.multcast = False
Player.overdrive = 0
return abaddonTurn()
elif cast == "5":
Player.multcast = True
for i in range(multiple):
BLACK.bio()
Player.multcast = False
Player.overdrive = 0
return abaddonTurn()
else:
return skills()
def fullHeal(self):
print "You use Full-Heal!"
print
print "Your HP and MP are fully restored!"
Player.hp = Player.maxhp
Player.mp = Player.maxmp
Player.overdrive = 0
raw_input("")
return abaddonTurn()
def ultima(self):
print "You unleash the power of ULTIMA!!!"
print
totaldmg = 0
for i in range(15):
dmg = random.randint(30,40)*Player.magic
if dmg > 9999:
dmg = 9999
print "You attack and Abaddon takes",dmg,"damage!"
Abaddon.hp -= dmg
totaldmg += dmg
raw_input("")
print "You deal a total of",totaldmg,"damage!!!"
Player.overdrive = 0
raw_input("")
return abaddonTurn()
def summonBahamut(self):
if Bahamut.hp <= 0:
print "Bahamut cannot be called because he is incapacitated."
raw_input("")
return playerMenu()
else:
print "You search within yourself and call forth Bahamut to fight for you!"
raw_input("")
Abaddon.target = Bahamut
Bahamut.summoned = True
Player.overdrive = 0
return bahamutMenu()
class Abaddon: #The Enemy
#Basic Stats
maxhp = random.randint(480000,520000)
hp = maxhp
maxmp = random.randint(2500,3000)
mp = maxmp
evasion = random.randint(5,10)
#Current Conditions
overdrivect = 0
overdriveCharge = False
overdriveCharging = False
overdriveComplete = False
weakness = "None"
target = None
doom = 300
# Status Ailments
poison = False
poisonct = 0
poisoneffect = False
class ESkills: #Abaddon's Skills
def demija(self):
if Abaddon.mp < 50:
return abaddonTurn()
else:
dmg = int(Abaddon.target.hp*0.75)
print "Abaddon casts Demija!"
print
print "Demija does",dmg,"damage!"
Abaddon.target.hp -= dmg
Abaddon.target.overdrive += dmg
Abaddon.mp -= 50
raw_input("")
def doomBlade(self):
print "Abaddon uses Doom Blade!"
print
print "Doom Blade does",Abaddon.doom,"damage!"
Abaddon.target.hp -= Abaddon.doom
Abaddon.target.overdrive += Abaddon.doom
Abaddon.doom = Abaddon.doom*2
raw_input("")
def elementShift(self):
print "Abaddon uses Element Shift!"
print
print "Abaddon has changed his elemental affinity!"
elements = ["None","Fire","Ice","Lightning","Water","None"]
Abaddon.weakness = random.choice(elements)
raw_input("")
def hitoawafukaseru(self):
print "Abaddon uses Hitoawafukaseru!"
print
print "A bright flash emanates from Abaddon's eyes!"
print
if Bahamut.summoned:
print "It has no effect on Bahamut."
raw_input("")
else:
if Player.astra:
print "Astra prevents paralysis!"
Player.astract -= 1
raw_input("")
else:
print "You are now paralyzed!"
Player.paralysis = True
Player.paralysisct = 2
raw_input("")
def megido(self):
if Abaddon.mp < 75:
return abaddonTurn()
else:
Abaddon.mp -= 75
dmg = random.randint(2000,2500)
print "Abaddon casts Megido!"
print
print "Megido does",dmg,"damage!"
Abaddon.target.hp -= dmg
Abaddon.target.overdrive += dmg
raw_input("")
def negative(self):
print "Abaddon uses Negative!"
print
print "HP and MP are switched!"
switch = [Abaddon.target.hp,Abaddon.target.mp]
Abaddon.target.hp = switch[1]
Abaddon.target.mp = switch[0]
if Abaddon.target.mp > Abaddon.target.maxmp:
Abaddon.target.mp = Abaddon.target.maxmp
raw_input("")
def nova(self):
if Abaddon.mp < 30:
return abaddonTurn()
else:
dmg = random.randint(1500,2000)
print "Abaddon casts Nova!"
print
print "Nova does",dmg,"damage!"
Abaddon.target.hp -= dmg
Abaddon.target.overdrive += dmg
Abaddon.mp -= 30
raw_input("")
def plague(self):
dmg = int(random.randint(500,620)*Abaddon.target.defend*Abaddon.target.barrier)
print "Abaddon uses Plague!"
print
print "Plague does",dmg,"damage!"
if Bahamut.summoned:
pass
else:
print
if Player.astra:
print "Astra prevents poison!"
Player.astract -= 1
else:
print "You are now poisoned!"
Player.poison = True
Player.poisonct = 10
Player.status.append("Poison")
Abaddon.target.hp -= dmg
Abaddon.target.overdrive += dmg
raw_input("")
def roulette(self):
print "Abaddon uses Roulette!"
print
stat = ["HP","MP","HP1/2","MP1/2"]
stop = random.choice(stat)
raw_input("")
if stop == "HP":
print "Roulette lands on 'HP'!"
print
print "HP is reduced to 1."
Abaddon.target.hp = 1
elif stop == "MP":
print "Roulette lands on 'MP'!"
print
print "MP is reduced to 1."
Abaddon.target.mp = 1
elif stop == "HP1/2":
print "Roulette lands on 'HP1/2'!"
print
print "Max HP is cut in half!"
Abaddon.target.maxhp = int(Abaddon.target.maxhp/2)
if Abaddon.target.hp > Abaddon.target.maxhp:
Abaddon.target.hp = Abaddon.target.maxhp
else:
print "Roulette lands on 'MP1/2'!"
print
print "Max MP is cut in half!"
Abaddon.target.maxmp = int(Abaddon.target.maxmp/2)
if Abaddon.target.mp > Abaddon.target.maxmp:
Abaddon.target.mp = Abaddon.target.maxmp
def sealVoice(self):
print "Abaddon uses Seal Voice!"
print
if Bahamut.summoned:
print "It has no effect on Bahamut."
raw_input("")
else:
if Player.astra:
print "Astra prevents mute!"
Player.astract -= 1
raw_input("")
else:
print "You are now Mute!"
Player.mute = True
Player.mutect = 5
Player.status.append("Mute")
raw_input("")
def supernova(self):
if Abaddon.mp < 100:
return abaddonTurn()
else:
dmg = random.randint(3200,3600)
print "Abaddon casts Super Nova!"
print
print "Super Nova does",dmg,"damage!"
Abaddon.target.hp -= dmg
Abaddon.target.overdrive += dmg
Abaddon.mp -= 100
raw_input("")
def thanatos(self): # Overdrive
if Abaddon.hp <= int(int(Abaddon.maxhp*0.25)/2.0):
print "-"*35
print
print "Abaddon's Overdrive is disrupted!"
Abaddon.overdriveCharge = False
Abaddon.overdriveComplete = True
raw_input("")
return playerMenu()
else:
if Abaddon.overdrivect > 0:
print "-"*35
print
print "Abaddon is preparing to use his Overdrive!"
print
print Abaddon.overdrivect,"turns left until the attack!"
Abaddon.overdrivect -= 1
raw_input("")
return playerMenu()
else:
print "-"*35
print
hpdmg = int(Abaddon.target.hp*0.99)
mpdmg = int(Abaddon.target.mp*0.99)
print "Abaddon has finished preparing his Overdrive!!!"
print
print "Abaddon unleashes THANATOS!!!"
raw_input("")
print "THANATOS does",hpdmg,"to HP!"
print
print "THANATOS does",mpdmg,"to MP!"
Abaddon.target.hp -= hpdmg
Abaddon.target.mp -= mpdmg
Abaddon.target.overdrive += hpdmg
Abaddon.overdriveCharge = False
Abaddon.overdriveComplete = True
raw_input("")
return playerMenu()
def urotsukidoji(self):
dmg = int(random.randint(1000,1200)*Abaddon.target.defend*Abaddon.target.barrier)
print "Abaddon uses Urotsukidoji!"
print
print "Urotsukidoji does",dmg,"damage!"
if Bahamut.summoned:
pass
else:
print
if Player.astra:
print "Astra prevents confusion!"
Player.astract -= 1
else:
print "You are now confused!"
Player.confuse = True
Player.confusect = 3
Abaddon.target.hp -= dmg
Abaddon.target.overdrive += dmg
raw_input("")
def wrath(self):
atknum = random.randint(8,14)
print "Abaddon unleashes his Wrath!"
print
print "Abaddon attacks",atknum,"times at incredible speed!"
print
for i in range(atknum):
dmg = int(random.randint(400,450)*Abaddon.target.defend*Abaddon.target.barrier)
print "Abaddon's attack does",dmg,"damage!"
print
Abaddon.target.hp -= dmg
Abaddon.target.overdrive += dmg
raw_input("")
if Bahamut.summoned:
pass
else:
if Player.astra:
print "Astra prevents berserk!"
Player.astract -= 1
raw_input("")
else:
print "You are now berserked!"
Player.berserk = True
Player.berserkct = 4
raw_input("")
#-----------------------------------
#Instantiation of Player, Bahamut and Magic/Skill Classes
Player = User()
Bahamut = Bahamut()
Abaddon.target = Player #Sets Abaddon's initial target to the Player
BLACK = BlackMagic()
WHITE = WhiteMagic()
SKILL = Skills()
OVERDRIVE = Overdrives()
ESKILL = ESkills()
#-----------------------------------
## Basic Setup & Menus
def intro():
print """
The devil known as Abaddon awaits you in Gehenna. He is plotting to destroy
all life and is building up massive amounts of energy in this wicked place
to send as an attack against the Earth. You've traveled far, and he has
already taken the lives of everyone you hold dear, even those who
accompanied you as you searched for him. You are the only one left
who has a chance of defeating him before he obliterates everything
else.
As you pass through the gates of Gehenna, you slaughter everything that
stands in your way. Abaddon's Gate looms forebodingly in the distance, dark
and monolithic. You quickly slay the gatekeeping demons and force open the gate.
As you approach the devil, Abaddon, he beckon's you forth, a cocky smile on
his face. Can he back up his confidence? Or will he find himself unable
to withstand your fury?
"""
raw_input("")
print
name = raw_input("Now what is your name (Default: 'Spero')? ")
if name == "":
pass
else:
Player.name = name
print
print "Prepare yourself",Player.name+", for your final battle is about to commence!"
raw_input("")
return statRoll()
def statRoll():
print
print "-"*35
print
print "PROFILE"
print
print "Name:",Player.name
print
print "HP:",Player.maxhp
print "MP:",Player.maxmp
print
print "Strength:",Player.strength
print "Magic:",Player.magic
print "Evasion:",Player.evasion
print
raw_input("")
return overdriveSelection()
def overdriveSelection():
print
print "-"*35
print
print "OVERDRIVES"
print
print "1) Omnislash"
print "2) Multi-Cast"
print "3) Full-Heal"
print "4) Ultima"
print "5) Summon Bahamut"
print
overdrive = raw_input("Choose your Overdrive technique: ")
print
if overdrive == "1":
Player.overdriveTech = "Omnislash"
elif overdrive == "2":
Player.overdriveTech = "Multi-Cast"
elif overdrive == "3":
Player.overdriveTech = "Full-Heal"
elif overdrive == "4":
Player.overdriveTech = "Ultima"
elif overdrive == "5":
Player.overdriveTech = "Summon Bahamut"
else:
return overdriveSelection()
def playerMenu(): #Player Root Menu
if Bahamut.summoned:
return bahamutMenu()
removeBenefit = 0
for i in Player.benefit: #Benefit removal if necessary
if Player.benefit[removeBenefit] == "Astra" and Player.astract <= 0:
del Player.benefit[removeBenefit]
Player.astra = False
elif Player.benefit[removeBenefit] == "Barrier" and Player.barrierct <= 0:
del Player.benefit[removeBenefit]
Player.barrier = 1
elif Player.benefit[removeBenefit] == "Regen" and Player.regenct <= 0:
del Player.benefit[removeBenefit]
Player.regen = False
else:
pass
removeBenefit += 1
if Player.regen and not Player.rheal: #Regen effects
print "-"*35
print
regenEffect = int(Player.maxhp/20)
print "Regen's effect restores",regenEffect,"HP!"
print
Player.hp += regenEffect
if Player.hp > Player.maxhp:
Player.hp = Player.maxhp
Player.regenct -= 1
Player.rheal = True
raw_input("")
if Player.barrier != 1: #Barrier countdown
Player.barrierct -= 1
if Player.poison and not Player.poisoneffect: #Poison damage
poisonDmg = int(Player.maxhp/20)
print "You take",poisonDmg,"damage from poison."
Player.hp -= poisonDmg
Player.poisonct -= 1
Player.poisoneffect = True
raw_input("")
if Player.mute: #Mute countdown
Player.mutect -= 1
removeStatus = 0 #Removal of Poison or Mute if necessary
for i in Player.status:
if Player.status[removeStatus] == "Poison" and Player.poisonct <= 0:
del Player.status[removeStatus]
Player.poison = False
raw_input("")
elif Player.status[removeStatus] == "Mute" and Player.mutect <= 0:
del Player.status[removeStatus]
Player.mute = False
raw_input("")
else:
pass
removeStatus += 1
if Player.paralysis: #Paralysis effect
print "-"*35
print
print "You are paralyzed and can take no actions."
if Player.confuse:
Player.confusect -= 1
if Player.confusect == 0:
print "You are no longer confused!"
print
Player.confuse = False
if Player.berserk:
Player.berserkct -= 1
if Player.berserkct == 0:
print "you are no longer berserked!"
print
Player.berserk = False
Player.paralysisct -= 1
if Player.paralysisct == 0:
Player.paralysis = False
raw_input("")
return abaddonTurn()
if Player.confuse: #Confusion effects
target = random.randint(1,100)
print "-"*35
print
print "You are confused."
if Player.berserk:
print "You are also berserk."
print
raw_input("")
if target <= 50:
print "You attack Abaddon!"
print
evade = random.randint(1,100)
if evade <= Abaddon.evasion:
print "Abaddon evades your attack"
print
raw_input("")
Player.confusect -= 1
if Player.confusect == 0:
print "You are no longer confused!"
print
Player.confuse = False
raw_input("")
return abaddonTurn()
else:
crit = random.randint(10,100)
critBonus = 1
if crit <= 10:
critBonus = 1.5
print "CRITICAL HIT!"
print
if Player.berserk:
atkdmg = int(random.randint(30,40)*Player.strength*critBonus*Player.berserkBonus)
else:
atkdmg = int(random.randint(30,40)*Player.strength*critBonus)
if atkdmg > 9999:
atkdmg = 9999
print "Abaddon takes",atkdmg,"damage!"
print
Abaddon.hp -= atkdmg
raw_input("")
Player.confusect -= 1
if Player.confusect == 0:
print "You are no longer confused!"
print
Player.confuse = False
raw_input("")
return abaddonTurn()
else:
print "You attack yourself!"
print
critBonus = 1
crit = random.randint(10,100)
if crit <= 10:
critBonus = 1.5
print "CRITICAL HIT!"
print
if Player.berserk:
selfdmg = int(critBonus*Player.berserkBonus*(random.randint(30,40)*Player.strength/5))
else:
selfdmg = int(critBonus*(random.randint(30,40)*Player.strength/5))
print "You take",selfdmg,"damage!"
print
raw_input("")
print "You are no longer confused!"
print
if Player.berserk:
Player.berserkct -= 1
if Player.berserkct == 0:
print "You are no longer berserked!"
print
Player.berserk = False
Player.hp -= selfdmg
Player.confusect = 0
Player.confuse = False
raw_input("")
return abaddonTurn()
if Player.berserk: #Berserk effects
print "-"*35
print
print "You are berserked!"
raw_input("")
print "You attack Abaddon!"
print
evade = random.randint(1,100)
if evade <= Abaddon.evasion:
print "Abaddon evades your attack"
print
raw_input("")
Player.berserkct -= 1
if Player.berserkct == 0:
print "You are no longer berserked!"
print
Player.berserk = False
raw_input("")
return abaddonTurn()
else:
crit = random.randint(10,100)
critBonus = 1
if crit <= 10:
critBonus = 1.5
print "CRITICAL HIT!"
print
atkdmg = int(random.randint(30,40)*Player.strength*critBonus*Player.berserkBonus)
if atkdmg > 9999:
atkdmg = 9999
print "Abaddon takes",atkdmg,"damage!"
print
Abaddon.hp -= atkdmg
raw_input("")
Player.berserkct -= 1
if Player.berserkct == 0:
print "You are no longer berserked!"
print
Player.berserk = False
raw_input("")
return abaddonTurn()
if Player.hp <= 0:
print "The battle is lost. Now there is no one to stop Abaddon's attack."
print
print "GAME OVER"
print
raw_input("~Press Enter to Close Program~")
return
Player.defend = 1 #Reset defend
#Bahamut recovery
if not Bahamut.hp <= 0:
Bahamut.hp += int(Bahamut.maxhp/60)
if Bahamut.hp > Bahamut.maxhp:
Bahamut.hp = Bahamut.maxhp
Bahamut.mp += int(Bahamut.maxmp/40)
if Bahamut.mp > Bahamut.maxmp:
Bahamut.mp = Bahamut.maxmp
print "-"*35
print
print Player.name
print
print "HP:",str(Player.hp)+"/"+str(Player.maxhp)
print "MP:",str(Player.mp)+"/"+str(Player.maxmp)
print
print "Benefit:",
for i in Player.benefit:
print i,",",
print "\n"
print "Status:",
for i in Player.status:
print i,",",
print
print
print "1) Attack"
if not Player.mute:
print "2) White Magic"
print "3) Black Magic"
print "4) Skills"
print "5) Defend"
print "6) Item"
if Player.overdrive >= int(Player.maxhp*4.4):
print "7) OVERDRIVE:",Player.overdriveTech
print
action = raw_input("What will you do? ")
print
if action == "1": #Attack
evade = random.randint(1,100)
if evade <= Abaddon.evasion:
print "Abaddon evades your attack"
raw_input("")
return abaddonTurn()
else:
crit = random.randint(10,100)
critBonus = 1
if crit <= 10:
critBonus = 1.5
print "CRITICAL HIT!"
print
atkdmg = int(random.randint(30,40)*Player.strength*critBonus)
if atkdmg > 9999:
atkdmg = 9999
print "Abaddon takes",atkdmg,"damage!"
Abaddon.hp -= atkdmg
raw_input("")
return abaddonTurn()
elif action == "2" and Player.mute == False: #Go to White Magic Menu
return wmagic()
elif action == "3" and Player.mute == False: #Go to Black Magic Menu
return bmagic()
elif action == "4": #Go to Skills Menu
return skills()
elif action == "5": #Defend
print "You brace yourself for attack"
raw_input("")
Player.defend = 0.5
return abaddonTurn()
elif action == "6": #Go to Item Menu
return item()
elif action == "7" and Player.overdrive >= int(Player.maxhp*4.4): #Execute Overdrive
if Player.overdriveTech == "Omnislash":
return OVERDRIVE.omnislash()
if Player.overdriveTech == "Multi-Cast":
return OVERDRIVE.multiCast()
if Player.overdriveTech == "Full-Heal":
return OVERDRIVE.fullHeal()
if Player.overdriveTech == "Ultima":
return OVERDRIVE.ultima()
if Player.overdriveTech == "Summon Bahamut":
return OVERDRIVE.summonBahamut()
else:
return playerMenu()
def bmagic(): #Player's Black Magic Menu
print "-"*35
print
print "BLACK MAGIC"
print
print "1) Flare (30 MP)"
print "2) Blizzard (30 MP)"
print "3) Bolt (30 MP)"
print "4) Water (30 MP)"
print "5) Drain (50 MP)"
print "6) Bio (40 MP)"
print "7) MP Absorb"
print "0) RETURN"
print
action = raw_input("What will you cast? ")
print
if action == "1" and Player.mp < 30:
print "~Insufficent MP~"
raw_input("")
return bmagic()
elif action == "2" and Player.mp < 30:
print "~Insufficent MP~"
raw_input("")
return bmagic()
elif action == "3" and Player.mp < 30:
print "~Insufficent MP~"
raw_input("")
return bmagic()
elif action == "4" and Player.mp < 30:
print "~Insufficent MP~"
raw_input("")
return bmagic()
elif action == "5" and Player.mp < 50:
print "~Insufficent MP~"
raw_input("")
return bmagic()
elif action == "6" and Player.mp < 40:
print "~Insufficent MP~"
raw_input("")
return bmagic()
else:
if action == "0":
return playerMenu()
elif action == "1":
return BLACK.flare()
elif action == "2":
return BLACK.blizzard()
elif action == "3":
return BLACK.bolt()
elif action == "4":
return BLACK.water()
elif action == "5":
return BLACK.drain()
elif action == "6":
return BLACK.bio()
elif action == "7":
return BLACK.mpAbsorb()
else:
return bmagic()
def wmagic(): #Player's White Magic Menu
print "-"*35
print
print "WHITE MAGIC"
print
print "1) Cure (25 MP)"
print "2) Panacea (20 MP)"
print "3) Astra (60 MP)"
print "4) Regen (50 MP)"
print "5) Barrier (50 MP)"
print "0) RETURN"
print
action = raw_input("What will you cast? ")
print
if action == "1" and Player.mp < 25:
print "~Insufficent MP~"
raw_input("")
return wmagic()
elif action == "2" and Player.mp < 20:
print "~Insufficent MP~"
raw_input("")
return wmagic()
elif action == "3" and Player.mp < 60:
print "~Insufficent MP~"
raw_input("")
return wmagic()
elif action == "4" and Player.mp < 50:
print "~Insufficent MP~"
raw_input("")
return wmagic()
elif action == "5" and Player.mp < 50:
print "~Insufficent MP~"
raw_input("")
return wmagic()
else:
if action == "0":
return playerMenu()
elif action == "1":
return WHITE.cure()
elif action == "2":
return WHITE.panacea()
elif action == "3":
return WHITE.astra()
elif action == "4":
return WHITE.regen()
elif action == "5":
return WHITE.barrier()
else:
return wmagic()
def skills(): #Player's Skill Menu
print "-"*35
print
print "SKILLS"
print
print "1) Lion Heart"
print "2) Death Blow"
print "3) Minus Strike"
if not Player.mute:
print "4) Spell Blade"
print "5) Steal"
print "0) RETURN"
print
action = raw_input("What will you do? ")
print
if action == "0":
return playerMenu()
elif action == "1":
return SKILL.lionHeart()
elif action == "2":
return SKILL.deathBlow()
elif action == "3":
return SKILL.minusStrike()
elif action == "4" and Player.mute == False:
return SKILL.spellBlade()
elif action == "5":
return SKILL.steal()
else:
return skills()
def item(): #Player's Item Menu
print "-"*35
print
print "ITEMS"
print
print "1) Potion x"+str(Player.potion)
print "2) Ether x"+str(Player.ether)
print "3) Elixir x"+str(Player.elixir)
print "4) Remedy x"+str(Player.remedy)
print "0) RETURN"
print
action = raw_input("What will you use? ")
print
if action == "1" and Player.potion <= 0:
print "~You have no more of this item~"
raw_input("")
return item()
elif action == "2" and Player.ether <= 0:
print "~You have no more of this item~"
raw_input("")
return item()
elif action == "3" and Player.elixir <= 0:
print "~You have no more of this item~"
raw_input("")
return item()
elif action == "4" and Player.remedy <= 0:
print "~You have no more of this item~"
raw_input("")
return item()
else:
if action == "0":
return playerMenu()
elif action == "1":
restoration = int(Player.maxhp/2)
print "You use a Potion."
print
print "You recover",restoration,"HP."
Player.hp += restoration
if Player.hp > Player.maxhp:
Player.hp = Player.maxhp
Player.potion -= 1
raw_input("")
return abaddonTurn()
elif action == "2":
restoration = int(Player.maxmp/2)
print "You use an Ether."
print
print "You recover",restoration,"MP."
Player.mp += restoration
if Player.mp > Player.maxmp:
Player.mp = Player.maxmp
raw_input("")
Player.ether -= 1
return abaddonTurn()
elif action == "3":
print "You use an Elixir."
print
print "Your HP and MP are fully healed."
Player.hp = Player.maxhp
Player.mp = Player.maxmp
Player.elixir -= 1
raw_input("")
return abaddonTurn()
elif action == "4":
print "You use a Remedy."
print
print "All status ailments are removed."
Player.remedy -= 1
Player.poisonct = 0
Player.poison = False
Player.mutect = 0
Player.mute = False
for i in Player.status:
del Player.status[0]
raw_input("")
return abaddonTurn()
else:
return item()
def bahamutMenu(): #Root menu and actions for Bahamut
Bahamut.defend = 1
if Bahamut.hp <= 0:
print "Bahamut has become unable to fight because of injury and disappears."
Bahamut.summoned = False
Abaddon.target = Player
raw_input("")
return playerMenu()
if Bahamut.cooldown:
print "-"*35
print
print "Bahamut is recovering from using Exa Flare"
Bahamut.cooldown = False
raw_input("")
return abaddonTurn()
print "-"*35
print
print "Bahamut"
print
print "HP:",str(Bahamut.hp)+"/"+str(Bahamut.maxhp)
print "MP:",str(Bahamut.mp)+"/"+str(Bahamut.maxmp)
print
print "1) Attack"
print "2) Restore (30 MP)"
print "3) Abarekuru (50 MP)"
print "4) Defend"
if Bahamut.overdrive >= int(Bahamut.maxhp*.75):
print "5) OVERDRIVE: Exa Flare"
print "0) Dismiss"
print
action = raw_input("What will you do? ")
print
if action == "2" and Bahamut.mp < 30:
print "~Insufficient MP~"
raw_input("")
return bahamutMenu()
elif action == "3" and Bahamut.mp < 50:
print "~Insufficient MP~"
raw_input("")
return bahamutMenu()
else:
if action == "0": #Dismiss
print "You thank Bahamut for his aid, and send him away for now."
Bahamut.summoned = False
Abaddon.target = Player
raw_input("")
return playerMenu()
elif action == "1": #Attack
evade = random.randint(1,100)
if evade <= Abaddon.evasion:
print "Abaddon evades Bahamut's attack"
raw_input("")
return abaddonTurn()
else:
crit = random.randint(10,100)
critBonus = 1
if crit <= 10:
critBonus = 1.5
print "CRITICAL HIT!"
print
atkdmg = int(random.randint(35,45)*Bahamut.strength*critBonus)
print "Abaddon takes",atkdmg,"damage!"
Abaddon.hp -= atkdmg
raw_input("")
return abaddonTurn()
elif action == "2": #Restore
restore = int(Bahamut.maxhp/3)
print "Bahamut uses Restore."
print
print "Bahamut regains",restore,"HP."
Bahamut.mp -= 30
Bahamut.hp += restore
if Bahamut.hp > Bahamut.maxhp:
Bahamut.hp = Bahamut.maxhp
raw_input("")
return abaddonTurn()
elif action == "3": #Abarekuru
evade = random.randint(1,100)
Bahamut.mp -= 50
if evade <= Abaddon.evasion+40:
print "Abaddon evades Bahamut's attack"
raw_input("")
return abaddonTurn()
else:
dmg = int(random.randint(35,45)*Bahamut.strength*1.5)
print "Abaddon takes",dmg,"damage!"
Abaddon.hp -= dmg
raw_input("")
return abaddonTurn()
elif action == "4": #Defend
print "Bahamut takes a defensive stance."
Bahamut.defend = 0.5
raw_input("")
return abaddonTurn()
elif action == "5" and Bahamut.overdrive >= int(Bahamut.maxhp*.75):
if Bahamut.strength > Bahamut.magic:
exaFlare = random.randint(75,80)*Bahamut.strength
else:
exaFlare = random.randint(75,80)*Bahamut.magic
print "Bahamut unleashes the power of Exa Flare!!!"
print
print "Abaddon suffers",exaFlare,"damage!"
Abaddon.hp -= exaFlare
Bahamut.overdrive = 0
Bahamut.cooldown = True
raw_input("")
return abaddonTurn()
else:
return bahamutMenu()
def abaddonTurn(): #Abaddon's action randomly selected
if Abaddon.poison and not Abaddon.poisoneffect: #Abaddon is poisoned
poisonDmg = int(Abaddon.maxhp/500)
print "-"*35
print
print "Abaddon takes",poisonDmg,"damage from poison!"
Abaddon.poisonct -= 1
Abaddon.poisoneffect = True
if Abaddon.poisonct <= 0:
Abaddon.poison = False
Abaddon.poisonct = 0
raw_input("")
if Abaddon.hp <= 0:
print """
Abaddon falls to the floor in death. Finally, the the long and
arduous battle, and your journey, has come to an end. You have
successfully prevented Abaddon's attack against the Earth.
With a smile on your face, you leave Gehenna and go back home,
glad that your friends' sacrifices were not in vain.
"""
raw_input("")
return
if Abaddon.hp <= int(Abaddon.maxhp*0.25):
if not Abaddon.overdriveCharging and not Abaddon.overdriveComplete:
Abaddon.overdriveCharge = True
Abaddon.overdriveCharging = True
Abaddon.overdrivect = 4
if Abaddon.overdriveCharge:
return ESKILL.thanatos()
else:
print "-"*35
print
print "Abaddon HP:",str(Abaddon.hp)+"/"+str(Abaddon.maxhp)
print
action = random.randint(1,100)
if action <= 39: # Attack
evade = random.randint(1,100)
print "Abaddon attacks!"
print
if evade <= Abaddon.target.evasion:
print "Abaddon's attack missed!"
raw_input("")
else:
dmg = int(random.randint(960,1160)*Abaddon.target.defend*Abaddon.target.barrier)
print "The attack does",dmg,"damage!"
Abaddon.target.hp -= dmg
Abaddon.target.overdrive += dmg
raw_input("")
elif action >= 40 and action <= 47: # Element Shift
ESKILL.elementShift()
elif action >= 48 and action <= 52: # Nova
ESKILL.nova()
elif action >= 53 and action <= 54: # Negative
ESKILL.negative()
elif action >= 55 and action <= 59: # Wrath
ESKILL.wrath()
elif action >= 60 and action <= 64: # Plague
ESKILL.plague()
elif action >= 65 and action <= 68: # Demija
ESKILL.demija()
elif action >= 69 and action <= 72: # Urotsukidoji
ESKILL.urotsukidoji()
elif action >= 73 and action <= 75: # Roulette
ESKILL.roulette()
elif action >= 76 and action <= 79: # Hitoawafukaseru
ESKILL.hitoawafukaseru()
elif action >= 80 and action <= 86: # Doom Blade
ESKILL.doomBlade()
elif action >= 87 and action <= 92: # Megido
ESKILL.megido()
elif action >= 93 or action <= 97: # Super Nova
ESKILL.supernova()
elif action >= 98: # Seal Voice
ESKILL.sealVoice()
else:
pass
# Go to Player's turn
Player.rheal = False
Player.poisoneffect = False
Abaddon.poisoneffect = False
return playerMenu()
intro()
print "-"*35
print
print "Let the battle begin!"
raw_input("")
playerMenu()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment