// Defeat the enemy hero in two minutes.
var enemyHero = this.findNearest(this.findEnemies());
var enemyScared = 0;
var yetispawned = 0;
this.cast("goldstorm");
loop {
    var enemies = this.findEnemies();
    var nearestEnemy = this.findNearest(enemies);
    
    var lastSummon;
    
    // Your hero can collect coins and summon troops.
    if (this.gold >= this.costOf("archer") + 75 && lastSummon !== "archer") {
        this.summon("archer");
        lastSummon = "archer";
    }
    else if (this.gold >= this.costOf("soldier") + 75 && lastSummon !== "solider")
    {
        this.summon("soldier");
        lastSummon = "solider";
    }
    if (enemies.length > 5 && this.gold >= this.costOf("artillery"))
    {
        this.summon("artillery");
    }
    
    // She also commands your allies in battle.
    var friends = this.findFriends();
    for (var friendIndex = 0; friendIndex < friends.length; ++friendIndex) {
        var friend = friends[friendIndex];
        this.command(friend, "attack", friend.findNearest(enemies));
    }
    
    // Use your hero's abilities to turn the tide.
    if (this.distanceTo(enemyHero) < 25 && this.canCast("fear", enemyHero) && !yetispawned)
    {
        this.cast("fear", enemyHero);
        
    }
    else if (this.distanceTo(enemyHero) < 2 && this.isReady("mana-blast"))
    {
        this.manaBlast();
    }
    else if (this.canCast("raise-dead") && this.findCorpses().length > 5 )
    {
        this.jumpTo(this.findNearest(this.findCorpses()));
        this.cast("raise-dead");
    }
    else if (this.distanceTo(enemyHero) < this.attackRange - 20)
    {
        this.attack(enemyHero);
    }
    if (this.distanceTo(this.findNearest(this.findByType("gem", this.findItems()))) < 10)
    {
        this.move(this.findNearest(this.findByType("gem", this.findItems())).pos);
    }
    else if (this.distanceTo(this.findNearest(this.findByType("coin", this.findItems()))) < 10)
    {
        this.move(this.findNearest(this.findByType("coin", this.findItems())).pos);
    }
    else if (this.distanceTo(this.findNearest(this.findEnemies())) < this.attackRange && yetispawned === 0)
    {
        this.attack(this.findNearest(this.findEnemies()));
    }
    else if (this.canCast("goldstorm"))
    {
        this.cast("goldstorm");
        this.move(this.findNearest(this.findByType("coin", this.findItems())).pos);
        this.move(this.findNearest(this.findByType("coin", this.findItems())).pos);
        this.move(this.findNearest(this.findByType("coin", this.findItems())).pos);
    }
    else if (this.distanceTo(this.findNearest(this.findByType("gem", this.findItems()))) < 50)
    {
        this.move(this.findNearest(this.findByType("gem", this.findItems())).pos);
    }
    if (this.now >= 47.5)
    {
        this.say("setting yetispawnwed to 1");
        yetispawned = 1;
        for (var i = 0; friendIndex < friends.length; ++i) {
            friend = friends[friendIndex];
            this.command(friend, "defend", this);
        }
        this.moveXY(random);
    }
    if (this.health < 730 && yetispawned)
    {
        if (this.pos.y > 42)
        {
            if (this.pos.x >= 0 && this.pos.x <= 43)
                this.jumpTo({x: 79, y: 14});
            else
                this.jumpTo({x: 5, y: 7});
        }
        else
        {
            if (this.pos.x >= 0 && this.pos.x <= 43)
                this.jumpTo({x: 79, y: 68});
            else
                this.jumpTo({x: 3, y: 69});
        }
        
    }
    if (this.health < 150 && this.health > 130)
    {
        for (var y = 0; friendIndex < friends.length; ++i) {
            friend = friends[friendIndex];
            this.command(friend, "defend", this);
        }
    }
    if (this.distanceTo(this.findNearest(this.findEnemies())) < 20)
    {
        this.manaBlast();
    }
}