It all goes well until I get to the Skeleton King then after maybe two of his skeleton waves and around the time of the first or second potion drop from the bird the level stops working. The it isn’t frozen exactly, animations like flags waving and the skulls over my zombie escort continue to move, and I can place flags but nothing responds to them. No errors are shown at any point.
Here is my code. I’m basically just using a black flag to walk across the map avoiding yaks and summoning undead the whole time. Then I get to the skeleton king and ideally will barricade myself in behind the pyramid.
edit: I put in the references to Skeleton King recently, after noticing it was sticking there, hoping maybe it had something to do with him but those references have made no difference. Same outcome.
# Go to the far right edge of the level to find new areas.
# Check the guide for more details.
def blackFlagCheck():
bFlag = self.findFlag("black")
if bFlag:
flagTarget = {'x': bFlag.pos.x, 'y': bFlag.pos.y}
self.removeFlag(bFlag)
loop:
if self.distanceTo(flagTarget) > 3:
self.move(flagTarget)
else:
break
if bFlag:
flagTarget = {'x': bFlag.pos.x, 'y': bFlag.pos.y}
self.removeFlag(bFlag)
def violetFlagCheck():
vFlag = self.findFlag("violet")
if vFlag:
flagTarget = {'x': vFlag.pos.x, 'y': vFlag.pos.y}
self.removeFlag(vFlag)
if self.gold > self.costOf("soldier"):
self.summon("soldier")
def greenFlagCheck():
gFlag = self.findFlag("green")
if gFlag:
flagTarget = {'x': gFlag.pos.x, 'y': gFlag.pos.y}
self.removeFlag(gFlag)
self.buildXY("fence", flagTarget.x, flagTarget.y)
def pickUpCoins():
coins = self.findItems()
bestCoin = None
bestRating = 0
for coin in coins:
coinDist = self.distanceTo(coin)
coinValue = coin.value
coinRating = coinValue / coinDist
if coinRating > bestRating:
bestCoin = coin
bestRating = coinRating
if bestCoin:
self.move(bestCoin.pos)
def undeadArmy():
corpseNumReq = 3
corpseDistReq = 20
if self.isReady("summon-undead"):
self.cast("summon-undead")
if self.isReady("raise-dead"):
corpses = self.findCorpses()
nearCorpses = []
for corpse in corpses:
if self.distanceTo(corpse) < corpseDistReq:
nearCorpses.append(corpse)
if len(nearCorpses) > corpseNumReq:
self.cast("raise-dead")
def doDrain():
enemies = self.findEnemies()
enemy = self.findNearest(enemies)
if enemy:
if self.distanceTo(enemy) < 15 or enemy is "Skeleton King":
if self.isReady("drain-life"):
self.cast("drain-life", enemy)
def penderAllAttacks():
enemy = self.findNearest(self.findEnemies())
if enemy and enemy.team != "neutral" or enemy is "Skeleton King" and self.distanceTo(enemy) < 10:
if self.isReady("electrocute"):
self.electrocute(enemy)
if self.isReady("throw"):
if self.distanceTo(enemy) < self.throwRange and self.distanceTo(enemy) > 8:
self.throw(enemy)
if self.isReady("poison-cloud"):
self.cast("poison-cloud", enemy)
def deflectMissiles():
missiles = self.findEnemyMissiles()
if len(missiles) > 0:
nearMissile = self.findNearest(missiles)
if nearMissile and self.distanceTo(nearMissile) < 20:
self.cast("windstorm")
def doManaBlastMultipleTroops():
#currently set to look at sand-yak
manaNum = 4
enemies = self.findEnemies()
nearEnemies = []
if len(enemies) > 0:
for enemy in enemies:
if self.distanceTo(enemy) < 15:
nearEnemies.append(enemy)
if len(nearEnemies) > manaNum:
self.manaBlast()
if self.isReady("mana-blast"):
nearEnemy = self.findNearest(self.findEnemies())
if nearEnemy and nearEnemy.type is "sand-yak":
self.manaBlast()
def confuseSomeone():
someoneList = self.findByType("sand-yak")
if len(someoneList) > 0:
for i in range(len(someoneList)):
thisGuy = someoneList[i]
if self.isReady("confuse"):
self.cast("confuse", thisGuy)
else:
continue
if self.distanceTo(thisGuy) > 22:
continue
if thisGuy.hasEffect("confuse"):
continue
def scareSpecific():
if self.isReady("fear"):
enemies = self.findEnemies()
specific = "Skeleton King"
if len(enemies) > 0:
for enemy in enemies:
if enemy.type is specific:
if enemy.team != "humans" and self.distanceTo(enemy) < 5:
self.cast("fear", enemy)
def doChainLightning():
if self.isReady("chain-lightning"):
enemies = self.findEnemies()
enemy = self.findNearest(enemies)
if enemy and enemy.team != "neutral" and self.distanceTo(enemy) < 25:
self.cast("chain-lightning", enemy)
def commandSoldiers():
enemies = self.findEnemies()
mySolders = self.findByType("soldier")
if len(mySolders) > 0:
for i in range(len(mySolders)):
soldier = mySolders[i]
enemy = soldier.findNearest(enemies)
if enemy:
self.command(soldier, "attack", enemy)
loop:
blackFlagCheck()
greenFlagCheck()
violetFlagCheck()
undeadArmy()
commandSoldiers()
#pickUpCoins()
doDrain()
doManaBlastMultipleTroops()
#doDrain()
confuseSomeone()
#doDrain()
scareSpecific()
doChainLightning()
penderAllAttacks()