Gates of Hell

Destroy the gates of hell to stop the horde of demons. (Note: Earthquake, Unstable Reality, Foul Termite Infestation and Orb of Mind Control are banned). Krakhor won a Char as the first person to complete this challenge.

int ysize=13;
int round = 0;

bool isDeckValid(Player player){
   string cardname;
   for(int n=0; n<player.deckSize(); n++)
   {
      cardname=player.getDeckCard(n).getName();
      if( cardname == "Earthquake" || cardname == "Orb of Mind Control" || cardname == "Unstable Reality" || cardname == "Foul Termite Infestation" )
      {
         string msg = "The deck contains a banned card. Earthquake, Unstable Reality, Foul Termite Infestation and Orb of Mind Control are banned.";
         statusMsg(getAIPlayer(0), msg);
         return false;
      }
   }
   return true;
}


void configGame()
{
   setMapSize(ysize,12);
   addAIPlayer("Evil Fish","Crypt Doctor",0);
	setTurnTime(121);
}

Player aiPlayer;
Player P1;
Location G1;
Location G2;
Entity gate1;
Entity gate2;
Entity mon1;
Entity mon2;

void beforeStart()
{
   aiPlayer=getAIPlayer(0); 
   P1=getHumanPlayer(0); 

   int ds=aiPlayer.deckSize();
   for(int n=0; n<ds; n++) aiPlayer.removeDeckCard(0);

   if(getCampID() !=3){
      infoBox("Nice Try","But you can't cheat that way");
      endGame(aiPlayer);
   }

   //createEntity("Astridian Geographic Society",1,1,aiPlayer);

//50
   G1=createLocation(ysize-1,5);
   G2=createLocation(ysize-1,6);


   setTerrain(createLocation(ysize-1,4),5,1);
   setTerrain(createLocation(ysize-1,7),5,1);
   setTerrain(createLocation(ysize-1,5),4,1);
   setTerrain(createLocation(ysize-1,6),4,1);
   setTerrain(createLocation(ysize-1,3),5,2);
   setTerrain(createLocation(ysize-1,8),5,2);
   setTerrain(createLocation(ysize-2,3),4,2);
   setTerrain(createLocation(ysize-2,7),4,2);
   setTerrain(createLocation(ysize-2,4),3,1);
   setTerrain(createLocation(ysize-2,5),3,1);
   setTerrain(createLocation(ysize-2,6),3,1);
   gate1 = createEntity("Underworld Gate",ysize-1,4,aiPlayer);
   gate2 = createEntity("Underworld Gate",ysize-1,7,aiPlayer);
   createEntity("Planar Rift",ysize-1,5,aiPlayer);
   createEntity("Planar Rift",ysize-1,6,aiPlayer);
   createEntity("Baltasar's Lash",ysize-2,3,aiPlayer);
   createEntity("Baltasar's Lash",ysize-2,7,aiPlayer);
   createEntity("Eye of Varexes",ysize-1,3,aiPlayer);
   createEntity("Eye of Varexes",ysize-1,8,aiPlayer);

   //createEntity("That Spies",2,2,aiPlayer);
   //createEntity("That Spies",2,10,aiPlayer);
   createEntity("Null Stone",10,3,aiPlayer);
   createEntity("Null Stone",10,9,aiPlayer);

   string cardname;
//   for(int n=0; n<P1.deckSize(); n++)
//  {
//      cardname=P1.getDeckCard(n).getName();
//      if( cardname == "Earthquake" || cardname == "Orb of Mind Control")
//      {
//         P1.removeDeckCard(n);
//         P1.addToDeck("Power",n);
//      }
//   }
   
   infoBox("The Gates of Hell", "The Gates of Hell have been opened.  Destroy them to stop the horde of demons");
}

void afterStart(){
}

int i;
int j;

void onNewRound()
{
   round = round + 1;

   i = rand(4);
   j = rand(4);

   forEachEntity();

   if(round == 1){
      i=10;
      j=10;
   }

   if(i == 0){
      mon1 = createEntity("Yalrinian Fiend",G1,aiPlayer);
   } else if (i == 1){
      mon1 = createEntity("Faceless Lord",G1,aiPlayer);
   } else if (i == 2){
      mon1 = createEntity("Red Imp",G1,aiPlayer);
   } else if (i == 3){
      mon1 = createEntity("Barbed Necrath",G1,aiPlayer);
   }
   mon1.setDim(false);

   if(j == 0){
      mon2 = createEntity("Char",G2,aiPlayer);
   } else if (j == 1){
      mon2 = createEntity("Lower Plane Aberration",G2,aiPlayer);
   } else if (j == 2){
      mon2 = createEntity("Surk's Groundbreaker",G2,aiPlayer);
   } else if (j == 3){
      mon2 = createEntity("Prince of Desolation",G2,aiPlayer);
   } 
   mon2.setDim(false);

   if((gate1.isType(5) || !gate1.doesExist()) && (gate2.isType(5) || !gate2.doesExist())){
      infoBox("Congratulations", "The gates of hell have been destroyed");
      endGame(P1);
   }


}

bool entityCallback(Entity ent){
   if((ent.getLoc() == G1) || (ent.getLoc() == G2)){
      if(ent.isType(5)){
         ent.remove();
      } else {
         if(ent.getName() != "Planar Rift"){
            ent.sacrifice();
         }
      }
   }
   if(ent.getName()=="Blessed Are The Meek"){
      i = rand(3);
      j = rand(2);
   }
   return true;
}


void onPlayersTurn(Player player){


   Player aiPlayer=getAIPlayer(0); 

   if(getCampID() !=3){
      infoBox("Nice Try","But you can't cheat that way");
      endGame(aiPlayer);
   }


}

void onDialogResponse(Player player,int resp){
}

bool canPass(Player player){
   return true;
}

bool canAct(Player player,Action action){
   return true;
}

void afterAction(Action action){

}