The first hunt for each pet will be free.
Once active, the Hunt will start a timer to complete within 6/12/24 hours, after which it will grand an amount of Souls.
When a hunt is completed, a new one can be started.
The amount of souls granted for a completed hunt depends on the pet's level.
To maximize the souls obtained from a hunt, it is advised to level the pet as soon as possible also during the hunt - before claiming the next quest reward, whether that will be souls or gold.
The quests asking you to find souls can be done by evolving. Speeding up chests can be done by watching ads, if available.
For the quests asking you to spend 100 gems, you can start a legendary draft, though this is only recommended if you are confident to reach enough wins to get enough resources back and are willing to invest the time. If you don't want to start a draft and don't have anything else you want to spend gems on, it might be advisible to skip this quest as it only gives a small amount of souls (see also the section on Amount of Hunts Needed).
It is possible to reach level 26 with a legendary pet after 40 hunts.
If the quest to spend 100 gems is omitted in all hunts, then you can reach level 26 after 42 hunts.
Here, you can find python code to see how many hunts you will need to reach what level for your pet and after which quest the level-up will be available.
Click this link or copy the code below into any other python compiler, fill out the part between INPUT and INPUT ENDS and let the online compiler run the code.
### INPUT
## 0 = rare, 1 = epic, 2 = legendary
rarity = 2
# level at which your pet currently is
startLevel = 1
# available souls that your pet currently has
startSouls = 1
# Are you planning to do the "spend 100 gems" quest each hunt?
# 1 = yes, 0 = no
gemStep = 0
# Are you planning to do the "do 1 summon" quest each hunt?
# 1 = yes, 0 = no
summonStep = 1
# 0 = just show number of hunts needed
# 1 = also show current souls after each hunt
showHunts=0
# ignore this if you always stick to your gemStep/summonStep parameter.
# Keep at [] then
# Otherwise, list the hunts here in which you will DO these quests.
# e.g. doGem = [1,2,5] if you do the 100 gem quest on hunt #1 and on hunt #5
# If you chose showHunts, a + will denote doing an extra small quest
# If gemStep or summonStep is set to 1, the corresponding list is ignored anyway
doGem = []
doSummon = []
### INPUT ends
ass="don't do any"
if gemStep and summonStep:
ass="do the 100 gem quest and the summon quest"
elif gemStep and not summonStep:
ass="only do the 100 gem quest"
elif not gemStep and summonStep:
ass="only do the summon step"
print("Assumption: You "+ass+" of the 2 quests with small soul rewards each hunt.")
rareSouls = [15,18,36,55,75,90,115,145,180,225,280,350,435,545,680,850,1065,1330,1665,2080,2600,3250,4065,5080,6350,30]
rareSoulsSmall = [4,5,11,16,22,27,34,43,55,65,85,105,130,165,205,255,320,400,500,625,780,975,1220,1525,1905,9]
epicSouls = [10,12,24,36,49,60,75,95,120,150,185,235,290,365,455,570,710,890,1110,1385,1735,2170,2710,3385,4235,20]
epicSoulsSmall = [3,4,7,11,15,18,23,29,36,45,55,70,85,110,135,170,215,265,335,415,520,650,815,1015,1270,6]
legSouls = [5,6,12,18,24,30,38,48,60,75,95,115,145,180,225,285,355,445,555,695,865,1085,1355,1695,2115,10]
legSoulsSmall = [2,2,4,5,7,9,11,14,18,22,28,35,44,55,70,85,105,135,165,210,260,325,405,510,635,3]
rareForLevel = [0,50,115,210,330,475,640,820,1000,1200,1675,2200,2750,3400,4300,5500,8000,11000,14000,17500,21500,26500,32000,41000,52000,71000,float("inf")]
epicForLevel = [0,30,80,150,230,340,470,600,740,900,1150,1450,1850,2350,2950,3850,5400,6600,8200,11000,14000,19000,26000,33000,44000,56000,float("inf")]
legForLevel = [0,5,20,40,65,140,240,350,470,600,800,1050,1300,1650,2100,2600,3600,4400,5200,6700,9000,12000,16000,20000,28000,33000,float("inf")]
souls = [rareSouls, epicSouls, legSouls]
soulsSmall = [rareSoulsSmall, epicSoulsSmall, legSoulsSmall]
soulsForLevel = [rareForLevel, epicForLevel, legForLevel]
curSouls = startSouls
curLevel = startLevel
huntsDone=0
rarText=""
if rarity == 0:
rarText=" rare"
elif rarity == 1:
rarText ="n epic"
elif rarity == 2:
rarText=" legendary"
soulsPlural=""
if not startSouls==1:
soulsPlural="s"
print("Starting with a"+rarText+" pet at level " + str(startLevel) + " with "+str(startSouls)+" soul"+soulsPlural+", you can reach...")
def levelup():
global curSouls
global rarity
global curLevel
global soulsForLevel
# if leveled, subtract the souls needed for level
curSouls -= soulsForLevel[rarity][curLevel]
# increase level
curLevel += 1
while curSouls >= soulsForLevel[rarity][curLevel]:
levelup()
print("level "+str(curLevel)+" before even starting a hunt. Duh...")
# as long as pet isn't maxed yet...
while curLevel < 26:
# start a hunt:
huntsDone+=1
# string to show if an additional small quest is done
extraQuests=""
# level that determines quest rewards
questLevel = curLevel
# do the quests and check for available level-ups every time
# start 1 battle
curSouls += souls[rarity][questLevel-1]
while curSouls >= soulsForLevel[rarity][curLevel]:
levelup()
# output after which hunt this level was achieved
huntsPlural="s"
if huntsDone==1:
huntsPlural=""
print("level "+str(curLevel)+" after "+str(huntsDone)+" hunt"+huntsPlural+" (after the 'start 1 battle' quest)")
if curLevel==26:
break
questLevel=curLevel
# QUEST: spend gold
curSouls += souls[rarity][questLevel-1]
while curSouls >= soulsForLevel[rarity][curLevel]:
levelup()
# output after which hunt this level was achieved
huntsPlural="s"
if huntsDone==1:
huntsPlural=""
print("level "+str(curLevel)+" after "+str(huntsDone)+" hunt"+huntsPlural+" (after the 'spend gold' quest)")
if curLevel==26:
break
# QUEST: spend 100 gems
if gemStep or huntsDone in doGem:
curSouls += soulsSmall[rarity][questLevel-1]
questLevel=curLevel
while curSouls >= soulsForLevel[rarity][curLevel]:
levelup()
# output after which hunt this level was achieved
huntsPlural="s"
if huntsDone==1:
huntsPlural=""
print("level "+str(curLevel)+" after "+str(huntsDone)+" hunt"+huntsPlural+" (after the 'spend 100 gems' quest)")
if curLevel==26:
break
# QUEST: level 3 heroes
curSouls += souls[rarity][questLevel-1]
while curSouls >= soulsForLevel[rarity][curLevel]:
levelup()
# output after which hunt this level was achieved
huntsPlural="s"
if huntsDone==1:
huntsPlural=""
print("level "+str(curLevel)+" after "+str(huntsDone)+" hunt"+huntsPlural+" (after the 'level (any) 3 heroes' quest)")
if curLevel==26:
break
questLevel = curLevel
# QUEST: find souls
curSouls += souls[rarity][questLevel-1]
while curSouls >= soulsForLevel[rarity][curLevel]:
levelup()
# output after which hunt this level was achieved
huntsPlural="s"
if huntsDone==1:
huntsPlural=""
print("level "+str(curLevel)+" after "+str(huntsDone)+" hunt"+huntsPlural+" (after the 'find souls' quest)")
if curLevel==26:
break
# QUEST: summon
if summonStep or huntsDone in doSummon:
curSouls += soulsSmall[rarity][questLevel-1]
questLevel=curLevel
while curSouls >= soulsForLevel[rarity][curLevel]:
levelup()
# output after which hunt this level was achieved
huntsPlural="s"
if huntsDone==1:
huntsPlural=""
print("level "+str(curLevel)+" after "+str(huntsDone)+" hunt"+huntsPlural+" (after the 'summon' quest)")
if curLevel==26:
break
# QUEST: level 3 leg heroes
curSouls += souls[rarity][questLevel-1]
questLevel = curLevel
while curSouls >= soulsForLevel[rarity][curLevel]:
levelup()
# output after which hunt this level was achieved
huntsPlural="s"
if huntsDone==1:
huntsPlural=""
print("level "+str(curLevel)+" after "+str(huntsDone)+" hunt"+huntsPlural+" (after the 'level 3 heroes' quest near the end)")
if curLevel==26:
break
# QUEST: complete
curSouls += souls[rarity][questLevel-1]
while curSouls >= soulsForLevel[rarity][curLevel]:
levelup()
# output after which hunt this level was achieved
huntsPlural="s"
if huntsDone==1:
huntsPlural=""
print("level "+str(curLevel)+" after "+str(huntsDone)+" hunt"+huntsPlural+" (after completion)")
if curLevel==26:
break
# check if an extra small quest is to be done
if huntsDone in doGem and not gemStep:
extraQuests+=" + spend 100 gems"
if huntsDone in doSummon and not summonStep:
extraQuests += "+ summon"
# output for this hunt result if requested
if showHunts:
print("[Hunt #"+str(huntsDone)+", souls: "+str(curSouls)+"/"+str(soulsForLevel[rarity][curLevel])+"]"+extraQuests)