// DisplayName = Helljump

//--- GAME RULES BEGIN ---
// Players are dropped into combat zones where they must survive
// Endless waves of zombies. Reinforcements after 5 strikes, 5 strikes
// make 1 group. 5 Groups make 1 wave. Bonus strike after a wave is
// complete. Ammo is scarse, so be careful.
//--- GAME RULES END ---

//HELLJUMP GAME
//COPYRIGHT 2009-2010, PHANTOM GAMES DEVELOPMENT
//ALL RIGHTS RESERVED

//The Code.. to end all :p

//Zombie Spawn Area (ignore Z-Coord)
$HellJump::ZSpawnZoneCt["FlatlandBigH"] = 1;
$HellJump::ZSpawnZone["FlatlandBigH", 1] = "3000 0 100";

$HellJump::ZSpawnZoneCt["slapmydashH"] = 1;
$HellJump::ZSpawnZone["slapmydashH", 1] = "3000 -700 100";

$HellJump::ZSpawnZoneCt["FrozenNight"] = 4;
$HellJump::ZSpawnZone["FrozenNight", 1] = "-2125 2314 130";
$HellJump::ZSpawnZone["FrozenNight", 2] = "-2329 2121 150";
$HellJump::ZSpawnZone["FrozenNight", 3] = "-2246 2431 80";
$HellJump::ZSpawnZone["FrozenNight", 4] = "-2369 2490 145";

$HellJump::ZSpawnZoneCt["HelljumpIsland"] = 1;
$HellJump::ZSpawnZone["HelljumpIsland", 1] = "1290 -1225 275";

//Define Initial Spawn Zone
$HellJump::SpawnGraph["FlatlandBigH"] = "52 0 101";
$HellJump::SpawnGraph["slapmydashH"] = "-64.7988 -267.13 131.439";
$HellJump::SpawnGraph["FrozenNight"] = "30 26 80";
$HellJump::SpawnGraph["HelljumpIsland"] = "-791.454 499.031 540.0";
//
//Define drop points (dont worry about Z, the code always uses the transport's current height)
$HellJump::DropPos["FlatlandBigH"] = "3000 0 1000";
$HellJump::DropPos["HelljumpIsland"] = "1080 -1210 1000";
$HellJump::DropPos["slapmydashH"] = "3000 -700 1000";
$HellJump::DropPos["FrozenNight"] = "-2274 2288 1000";
//


function HelljumpGame::pickPlayerSpawn(%game, %client, %respawn) {
   if (isobject(%client.spawnpoint)) {
      if (%client.spawnpoint.team == %client.team) {
         if ( (%client.spawnpoint.ispersonal != 1) || (%client==%client.spawnpoint.owner) ) {
            if (%client.spawnpoint.getdatablock().isspawnpoint==1) {
               return vectoradd(%client.spawnpoint.getposition(),"0 0 1.5") SPC "0 0 0 1";
            }
         }
         else {
            messageclient(%client,'',"\c3The spawn point you selected is a personal spawn point, spawning you at default spawn location.");
         }
      }
      else {
         messageclient(%client,'',"\c3The spawn point you selected is not on your team, spawning you at default spawn location.");
      }
   }
   if ( (!isobject(%client.spawnpoint)) && (%client.spawnpoint != 0) && (%client.spawnpoint !$= "") ) {
      messageclient(%client,'',"\c3The spawn point you selected does not exist, spawning you at default spawn location.");
   }

   // place this client on his own team, '%respawn' does not ever seem to be used
   //we no longer care whether it is a respawn since all spawns use same points.
   %loc = $HellJump::SpawnGraph[$CurrentMission];
   %position = vectorAdd(%loc,VectorAdd(getRandomPosition(20,1), "0 0 10"));
   return %position;//return %game.pickTeamSpawn(%client.team);
}

function HelljumpGame::AIInit(%game) {
	//call the default AIInit() function
	AIInit();
}

function HelljumpGame::allowsProtectedStatics(%game) {
	return true;
}

function HelljumpGame::onClientKilled(%game, %clVictim, %clKiller, %damageType, %implement, %damageLocation) {
   Parent::onClientKilled(%game, %clVictim, %clKiller, %damageType, %implement, %damageLocation);
   if(%clVictim !$= "") { //actual player died
      if(%game.CheckModifier("Titan") == 1) {
         //end the bonus round!
         %game.KillAllZombies();
         //don't continue on, if the player is going solo, we let him continue
         BottomPrintAll("Bonus Strike Over...");
         return;
      }
      %clVictim.CantRespawn = 1; //gotta wait until next round / Wave
       CenterPrint(%clVictim, "<color:FF0000>You are out until the next Group.",2,3);
//       forceObserver( %game, %clVictim, "AdminForce" ); //not needed
       Echo("Helljump: "@%clVictim.namebase@" has been killed.");
       %game.CheckForLivingPlayers();
   }
}

function HelljumpGame::CheckForLivingPlayers(%game) {
   if($Helljump::Preparing) {
      return;
   }
   $HellJump::LivingCount = 0;
   %count = ClientGroup.getCount();
   if(%count == 0) {   //no players, this fixed the constant game over stuff
      return;
   }
   for (%i = 0; %i < %count; %i++) {
   %cl = ClientGroup.getObject( %i );
      if(!isObject(%cl.player) || %cl.player.getstate() $= "dead") {
      //Do nothing
      }
      else {
      $HellJump::LivingCount++;
      }
   }
   //Display:
   for(%i = 0; %i < ClientGroup.getCount(); %i++) {
      %cl = ClientGroup.getObject(%i);
      messageClient(%cl, 'MsgSPCurrentObjective2', "", "[Players: "@$HellJump::LivingCount@"][SCORE: Team: "@$HellJump::Score["Team"]@" You: "@$HellJump::Score[%cl]@"]");
   }
   if($HellJump::LivingCount <= 0) {
   //Everyone is Dead, or nobody is in the server, game over
      %game.gameOver();
      reloadCurrentMission();
      //cycleMissions();
   }
}

function reloadCurrentMission() {
   loadMission( $CurrentMission, $CurrentMissionType );
}

function HelljumpGame::KillAllZombies(%game) {
   Echo("Helljump: Cleaning Zombies");
   %count = MissionCleanup.getCount();
   for(%i = 0; %i < %count; %i++) {
      %obj = MissionCleanup.getObject(%i);
      if(isObject(%obj)) {
         if(%obj.iszombie) {
            %obj.scriptkill($DamageType::admin);  //They all went on crack and died XD
         }
      }
   }
}

function HelljumpGame::AllowAllRespawn(%game) {
   Echo("Helljump: Players Can now respawn.");
   %count = ClientGroup.getCount();
   for (%i = 0; %i < %count; %i++) {
      %cl = ClientGroup.getObject( %i );
      %cl.CantRespawn = 0;
      CenterPrint(%cl, "<color:FF0000>You can now respawn, but hurry, you have 15 seconds.",2,3);
   }
   %game.schedule(15000, "ExpireRespawn");
   messageAll('MsgSPCurrentObjective2' ,"", "You Can Now Spawn");
}

function HelljumpGame::ExpireRespawn(%game) {
   Echo("Helljump: Players Can no longer respawn.");
   %count = ClientGroup.getCount();
   for (%i = 0; %i < %count; %i++) {
      %cl = ClientGroup.getObject( %i );
      %cl.CantRespawn = 0;
      CenterPrint(%cl, "<color:FF0000>The Respawn Period Has Expired.",2,3);
   }
   %game.CheckForLivingPlayers();
}

function HelljumpGame::spawnPlayer( %game, %client, %respawn ) {
    if(%client.CantRespawn) {
       CenterPrint(%client, "<color:FF0000>You are out until the next Group.",2,3);
//       forceObserver( %game, %client, "AdminForce" ); //Eh, for now
       return;
    }
	Parent::spawnPlayer( %game, %client, %respawn );
    %game.CheckForLivingPlayers();
    //board an availiable transport
    %game.checkTrans(%client);
}

function HelljumpGame::clientJoinTeam( %game, %client, %team, %respawn )
{
	// for multi-team games played with a single team
	if (Game.numTeams == 1) {
		%game.assignClientTeam( %client );
		// Spawn the player:
		%game.spawnPlayer( %client, %respawn );
		return;
	}

//error("DefaultGame::clientJoinTeam");
   if ( %team < 1 || %team > %game.numTeams )
      return;

   if( %respawn $= "" )
      %respawn = 1;

   %client.team = %team;
   %client.lastTeam = %team;
   setTargetSkin( %client.target, %game.getTeamSkin(%team) );
   setTargetSensorGroup( %client.target, %team );
   %client.setSensorGroup( %team );

   // Spawn the player:
   %game.spawnPlayer( %client, %respawn );

//   messageAllExcept( %client, -1, 'MsgClientJoinTeam', '\c1%1 joined %2.', %client.name, %game.getTeamName(%team), %client, %team );
//   messageClient( %client, 'MsgClientJoinTeam', '\c1You joined the %2 team.', $client.name, %game.getTeamName(%client.team), %client, %client.team );

   updateCanListenState( %client );

   logEcho(%client.nameBase@" (cl "@%client@") joined team "@%client.team);
	if ($Host::Prison::Enabled == true) {
		if (%client.isJailed)
			// If player should manage to get out of jail, re-spawn and re-start sentence time
			jailPlayer(%client,false,mAbs(%cl.jailTime));
	}
}

function HelljumpGame::assignClientTeam(%game, %client, %respawn ) {

   %client.team = 1;
   %client.lastTeam = 1;

   // Assign the team skin:
   if ( %client.isAIControlled() ) {
      if ( %leastTeam & 1 ) {
	     %client.skin = addTaggedString( "basebot" );
	     setTargetSkin( %client.target, 'basebot' );
      }
   }
   else
      setTargetSkin( %client.target, %game.getTeamSkin(%client.team) );
      //setTargetSkin( %client.target, %client.skin );

   // might as well standardize the messages
   //messageAllExcept( %client, -1, 'MsgClientJoinTeam', '\c1%1 joined %2.', %client.name, $teamName[%leastTeam], %client, %leastTeam );
   //messageClient( %client, 'MsgClientJoinTeam', '\c1You joined the %2 team.', $client.name, $teamName[%client.team], %client, %client.team );
//   messageAllExcept( %client, -1, 'MsgClientJoinTeam', '\c1%1 joined %2.', %client.name, %game.getTeamName(%client.team), %client, %client.team );
//   messageClient( %client, 'MsgClientJoinTeam', '\c1You joined the %2 team.', %client.name, %game.getTeamName(%client.team), %client, %client.team );

   updateCanListenState( %client );

   logEcho(%client.nameBase@" (cl "@%client@") joined team "@%client.team);
}

function HelljumpGame::clientChangeTeam(%game, %client, %team, %fromObs) {
   if(%client.CantRespawn) {
      if(!%fromObs) {    //:D they tried to change teams
         CenterPrint(%client, "<color:FF0000>You are out until the next Group. \n Although that was a good try :D",2,3);
          return;
      }
      else {
         CenterPrint(%client, "<color:FF0000>You are out until the next Group.",2,3);
         return;
      }
   }
   %game.removeFromTeamRankArray(%client);

   %pl = %client.player;
   if(isObject(%pl))
   {
      if(%pl.isMounted())
	 %pl.getDataBlock().doDismount(%pl);
      %pl.scriptKill(0);
   }

   // reset the client's targets and tasks only
   clientResetTargets(%client, true);

   // give this client a new handle to disassociate ownership of deployed objects
   if( %team $= "" && (%team > 0 && %team <= %game.numTeams))
   {
      if( %client.team == 1 )
	 %client.team = 2;
      else
	 %client.team = 1;
   }
   else
      %client.team = %team;

   // Set the client's skin:
   if (!%client.isAIControlled())
      setTargetSkin( %client.target, %game.getTeamSkin(%client.team) );
   setTargetSensorGroup( %client.target, %client.team );
   %client.setSensorGroup( %client.team );

   // Spawn the player:
   %client.lastSpawnPoint = %game.pickPlayerSpawn( %client );

   %game.createPlayer( %client, %client.lastSpawnPoint, $MatchStarted );

   if($MatchStarted)
      %client.setControlObject(%client.player);
   else
   {
      %client.camera.getDataBlock().setMode(%client.camera, "pre-game", %client.player);
      %client.setControlObject(%client.camera);
   }
   %game.onClientEnterObserverMode(%client);
   updateCanListenState( %client );

   // MES - switch objective hud lines when client switches teams
   messageClient(%client, 'MsgCheckTeamLines', "", %client.team);
   logEcho(%client.nameBase@" (cl "@%client@") switched to team "@%client.team);

}

function HelljumpGame::clientMissionDropReady(%game, %client) {
   %count = ClientGroup.getCount();
   if($MatchStarted && $CountdownStarted && %count == 1) { //Game started, first player is in
      messageClient(%client, 'MsgClient', "\c5Welcome To Helljump, You are the first player, Restarting game!");
      %client.CantRespawn = 0; //they will get the first life
      %game.GameOver();
      reloadCurrentMission();
      //CycleMissions();
   }
   else if($MatchStarted && $CountdownStarted && %count > 1) { // Game in progress, multiple players
      %game.CheckForLivingPlayers();
      messageClient(%client, 'MsgClient', "\c5Welcome To Helljump, Please wait for the next Group to begin.");
      %client.CantRespawn = 1;
   }
   $HellJump::Score[%client] = 0;
   messageClient(%client, 'MsgClientReady',"", "SinglePlayerGame");
   defaultGame::clientMissionDropReady(%game, %client);
   //
   if($HellJump::HellClass[%client] $= "") {
      $HellJump::HellClass[%client] = "HellJumper";
   }
   //
}

function HelljumpGame::onAIRespawn(%game, %client) {
   //add the default task
	if (! %client.defaultTasksAdded)
	{
		%client.defaultTasksAdded = true;
	   %client.addTask(AIPickupItemTask);
	   %client.addTask(AIUseInventoryTask);
	   %client.addTask(AITauntCorpseTask);
		%client.addTask(AIEngageTurretTask);
		%client.addTask(AIDetectMineTask);
		%client.addTask(AIBountyPatrolTask);
		%client.bountyTask = %client.addTask(AIBountyEngageTask);
	}

   //set the inv flag
   %client.spawnUseInv = true;
}

function HelljumpGame::updateKillScores(%game, %clVictim, %clKiller, %damageType, %implement) {
	if (%game.testKill(%clVictim, %clKiller)) { //verify victim was an enemy
		%game.awardScoreKill(%clKiller);
		%game.awardScoreDeath(%clVictim);
	}
	else if (%game.testSuicide(%clVictim, %clKiller, %damageType))  //otherwise test for suicide
		%game.awardScoreSuicide(%clVictim);
}

function HelljumpGame::timeLimitReached(%game) {
	logEcho("game over (timelimit)");
	%game.gameOver();
	cycleMissions();
}

function HelljumpGame::startMatch(%game) {
   $Host::nozombs = 0; //Allow Zombs
   $HellJump::CanSpawnZombies = 1;
   // IN ORDER OF APPEARANCE
   $HellJump::CurrentStrike = 1;
   $HellJump::CurrentGroup = 1;
   $HellJump::CurrentWave = 1;
   //
   $HellJump::Zombiecount = 0; //Start at 0              `
   $HellJump::LivingCount = 0; //Start at 0
   $Host::RankSystem = 0;
   
   $HellJump::Score["Team"] = 0;
   $HellJump::BonusStrike = 0; //used for spawning

   $TWM::PlayingHellJump = 1;
   $HellJump::Game = %game; //This allows us to expand into other functions
   DefaultGame::startMatch(%game);
   messageAll('MsgSPCurrentObjective1' ,"", "Initial Startup - Prepare To Drop");

   %group = NameToID("HellJumpGroup");
   if(%group == -1) {
      %game.HellGroup = new SimGroup(HellJumpGroup);   //used for hell jump
   }
   setSensorGroupCount(31);
   %game.AllowAllRespawn();
   %game.StartWave(1);
}

function HelljumpGame::SaveScores(%game) {
   if (!IsFile("Server/Helljump/Scores/"@formattimestring("hh:nn a mm-dd-yy")@".txt")){
      new fileobject(HellScore);
      HellScore.openforwrite("Server/Helljump/Scores/"@formattimestring("hh-nn-a-mm-dd-yy")@".txt");
      HellScore.writeline("Scores for this round.");
      HellScore.writeline("Wave "@$HellJump::CurrentWave@", Group "@$HellJump::CurrentGroup@", Strike "@$HellJump::CurrentStrike@".");
      HellScore.writeline("Team Score: "@$HellJump::Score["Team"]@".");
	  for(%i = 0; %i < ClientGroup.getCount(); %i ++) {
         %client = ClientGroup.getObject(%i);
         HellScore.writeline(""@%client.namebase@"'s Score: "@$HellJump::Score[%client]@".");
      }
      HellScore.close();
      HellScore.delete();
   }
   else {
      new fileobject(HellScore);
      HellScore.openforappend("Server/Helljump/Scores/"@formattimestring("hh-nn-a-mm-dd-yy")@".txt");
      HellScore.writeline("Scores for this round.");
      HellScore.writeline("Wave "@$HellJump::CurrentWave@", Group "@$HellJump::CurrentGroup@", Strike "@$HellJump::CurrentStrike@".");
      HellScore.writeline("Team Score: "@$HellJump::Score["Team"]@".");
	  for(%i = 0; %i < ClientGroup.getCount(); %i ++) {
         %client = ClientGroup.getObject(%i);
         HellScore.writeline(""@%client.namebase@"'s Score: "@$HellJump::Score[%client]@".");
      }
      HellScore.close();
      HellScore.delete();
   }
}

function HelljumpGame::gameOver(%game) {
    %game.AllowAllRespawn();
    %game.SaveScores();
	DefaultGame::gameOver(%game);

    messageAll('MsgGameOver', "Game Over: Wave "@$HellJump::CurrentWave@", Group "@$HellJump::CurrentGroup@", Strike "@$HellJump::CurrentStrike@". Final Score: "@$HellJump::Score["Team"]@".~wvoice/announcer/ann.gameover.wav" );
	messageAll('MsgClearObjHud', "");

    //Reset the Vars
    $TWM::PlayingHellJump = 0;

    $HellJump::CurrentStrike = 1;
    $HellJump::CurrentGroup = 1;
    $HellJump::CurrentWave = 1;
    
    $HellJump::Score["Team"] = 0;

    $HellJump::Zombiecount = 0;
    $HellJump::LivingCount = 0;

    $Host::RankSystem = 1;

   %group = NameToID("HellJumpGroup");
   if(%group != -1) {
      %group.delete();
   }

	for(%i = 0; %i < ClientGroup.getCount(); %i ++) {
		%client = ClientGroup.getObject(%i);
        $HellJump::Score[%client] = 0;
	}
 
    %game.toggleModifiers("All Off", 1);
}

function HelljumpGame::UpdateClientScoreBar(%game, %client) {
   %alv = $HellJump::LivingCount;
   for(%i = 0; %i < ClientGroup.getcount(); %i++) {
      %cl = ClientGroup.getObject(%i);
      messageClient(%cl, 'MsgSPCurrentObjective2', "", "[Players: "@$HellJump::LivingCount@"][SCORE: Team: "@$HellJump::Score["Team"]@" You: "@$HellJump::Score[%cl]@"]");
   }
}













//TRANSPORT CODE


//This function may be kinda old-style logic wise, but the game should calculate fast enough, that it won't
//really matter if two people spawn at about the same time, and even if we end up with two transports... hey!
//we just saved having to spawn another!
function HelljumpGame::checkTrans(%game, %client) {
   %group = NameToID("HellJumpGroup");
   if(%group == -1) {
      %game.HellGroup = new SimGroup(HellJumpGroup);   //used for hell jump
      %group = %game.HellGroup;
   }
   if(!isObject(%group.getObject(0))) { //no transports yet, so lets spawn #1!
      %trans = %game.SpawnTransport(""@getWords(%client.player.getPosition(), 0, 1)@" "@getRandom(1500,2500)@""); //set the height
      //add the guy to it.
      %client.player.getDataBlock().onCollision(%client.player, %trans, 2);
      %client.player.setMoveState(true); //ha! no running now
      //Added 2.0 - PEople who jump early will be re-added to the slot
      %client.player.saveSlot = 2;
      SafeSpotLoop(%client, %obj, 2);
      %client.jumpDownYet = 0;
      //
      %game.GiveGuns(%client.player);
      return;
   }
   for(%i = 0; %i < %group.getCount(); %i++) {
      %obj = %group.getObject(%i);
      //check the current seats
	  for(%i = 2; %i < 6; %i++){
	     if(!isObject(%obj.getMountNodeObject(%i))){
         //open seat... MINE!
            %client.player.getDataBlock().onCollision(%client.player, %obj, %i);
            //Added 2.0 - PEople who jump early will be re-added to the slot
            %client.player.saveSlot = %i;
            SafeSpotLoop(%client, %obj, %i);
            %client.jumpDownYet = 0;
            //
            %client.player.setMoveState(true); //ha! no running now
            %game.GiveGuns(%client.player);
            return;
         }
         else {
            if(%i == 5) {
               %obj.allSeatsTaken = 1;
            }
         }
      }
      //drats! all seats are gone on that one!
      if(%obj.allSeatsTaken) {
         %i++;
         //we will now check for another transport
         if(!isObject(%group.getObject(%i))) {
            //this one does not exist, so we will need a new one!
            %trans = %game.SpawnTransport(""@getWords(%client.player.getPosition(), 0, 1)@" "@getRandom(1500,2500)@""); //set the height
            //now, we add the player to the first slot on this one
            %client.player.getDataBlock().onCollision(%client.player, %trans, 2);
            %client.player.setMoveState(true); //ha! no running now
            //Added 2.0 - PEople who jump early will be re-added to the slot
            %client.player.saveSlot = 2;
            SafeSpotLoop(%client, %obj, 2);
            %client.jumpDownYet = 0;
            //
            %game.GiveGuns(%client.player);
         }
         else {
            %i--; //the ++ will hit.
            //lets hold for the next loop
         }
      }
   }
}

function HelljumpGame::SpawnTransport(%game, %pos) {
   %phantom = new FlyingVehicle() {
       datablock = "HAPCFlyer";
       team = 1;
       position = %pos;
       Invincible = true;
   };
   %phantom.DroppedYet = 0;
   HellJumpGroup.add(%phantom);
   //15 seconds ends the re-spawn period.
   %goto = $HellJump::DropPos[$CurrentMission];
   %xy = getWords(%goto, 0, 1);
   %z = getWord(%pos, 2);
   %fina = ""@%xy@" "@%z@"";
   %game.schedule(15000, "MoveTransport", %phantom, %fina, 0);
   return %phantom;
}

function HelljumpGame::SpawnAmmoTransport(%game, %pos, %targ) {
   %phantom = new FlyingVehicle() {
       datablock = "HAPCFlyer";
       team = 1;
       position = %pos;
   };
   %phantom.DroppedYet = 0;
   %phantom.Invincible = true;
   MissionCleanup.add(%phantom);
   //ammo transports go right away
   if(%targ $= "") {
      %goto = $HellJump::DropPos[$CurrentMission];
      %xy = getWords(%goto, 0, 1);
      %z = getWord(%pos, 2);
      %targ = ""@%xy@" "@%z@"";
   }
   else {
      %xy = getWords(%targ, 0, 1);
      %z = getWord(%pos, 2);
      %targ = ""@%xy@" "@%z@"";
   }
   %game.schedule(50, "MoveTransport", %phantom, %targ, 1);
   return %phantom;
}

function HellJumpGame::getTransFacingDirection(%game, %trans, %targPos) {
   if(!isObject(%trans)) {
      return;
   }
   %pos = %trans.getworldboxcenter();
   %vector = vectorNormalize(vectorSub(%targPos, %pos));
   %v1 = getword(%vector, 0);
   %v2 = getword(%vector, 1);
   %v3 = getword(%vector, 2);
   %nv1 = %v2;
   %nv2 = (%v1 * -1);
   %vector2 = %nv1@" "@%nv2@" "@%v3;
   %trans.setRotation(fullrot("0 0 0",%vector2));

   return %vector;
}

function HelljumpGame::MoveTransport(%game, %transport, %goto, %ammo) {
   if(!isObject(%transport)) {
      return;
   }
   %game.schedule(200, "MoveTransport", %transport, %goto, %ammo);
   //not there yet
   if(!%ammo) {
      if(vectorDist(%transport.getPosition(), %goto) > 700) {
         if(vectorLen(%transport.getVelocity()) < 500) {
            %transport.applyImpulse(%transport.getPosition(),vectorScale(%transport.getForwardVector(), 1000 * 1.3));
            %game.getTransFacingDirection(%transport, %goto);
         }
      }
      else {
         %transport.applyImpulse(%transport.getPosition(),vectorScale(%transport.getForwardVector(), 700));
         if(!%transport.DroppedYet) {
            %transport.DroppedYet = 1;
            %transport.schedule(12500, "SetCloaked", true);
            %transport.schedule(15000, "Delete");

            %frd = %transport.getForwardVector();
            %right = vectorNormalize(vectorSub(%transport.getEdge("1 0 0"),%transport.getEdge("-1 0 0")));
            for(%i = 2; %i < 6; %i++){
	           if(%transport.getMountNodeObject(%i)){
		          %plyr = %transport.getMountNodeObject(%i);
                  %plyr.setMoveState(true); //ha! no running now
		          %pod = schedule((2000 * %i), 0, "MakeDropPod", %frd, %right, %plyr, %transport, %i);
                  BottomPrint(%plyr.client, "Helljumpers!!! Prepare for drop!", 3, 1);
	           }
            }
         }
      }
   }
   else {
      if(vectorDist(%transport.getPosition(), %goto) > 400) {
         if(vectorLen(%transport.getVelocity()) < 500) {
            %transport.applyImpulse(%transport.getPosition(),vectorScale(%transport.getForwardVector(), 1000 * 1.3));
            %game.getTransFacingDirection(%transport, %goto);
         }
      }
      else {
         %transport.applyImpulse(%transport.getPosition(),vectorScale(%transport.getForwardVector(), 700));
         if(!%transport.DroppedYet) {
            %transport.DroppedYet = 1;
            %transport.schedule(12500, "SetCloaked", true);
            %transport.schedule(15000, "Delete");
            
            %frd = %transport.getForwardVector();
            %right = vectorNormalize(vectorSub(%transport.getEdge("1 0 0"),%transport.getEdge("-1 0 0")));
            for(%i = 2; %i < 6; %i++){
               %pod = schedule((2000 * %i), 0, "MakeAmmoPod", %frd, %right, %transport, %i);
            }
         }
      }
   }
}

function SafeSpotLoop(%client, %obj, %slot) {
   if(!isObject(%obj)) {
      return;
   }
   if(!isObject(%client.player) || %client.player.getState() $= "Dead") {
      return;
   }
   if(%client.jumpDownYet) {
      return; //we have been dropped!
   }
   //the goodies
   if(%obj.getMountNodeObject(%slot) != %client.player) {
      %client.player.getDataBlock().onCollision(%client.player, %obj, %slot);
      messageClient(%client, 'msgAlert', "\c3Helljump: Do not jump out of the transport! you will be dropped automatically! ~wfx/misc/warning_beep.wav");
   }
   schedule(150, 0, "SafeSpotLoop", %client, %obj, %slot);
}

















//Scoring System
//Defines:

//Bonus Strike Multiplier: 3X
//Demonic Multiplier: 1.5X
//Where's My Head Multiplier: 2X

//Normal Zombie: 1Pt
//Ravenger Zombie: 3Pt
//Zombie Lord: 10Pt
//Demon Zombie: 5Pt
//Air Rapier Zombie: 7Pt
//Demon Lord Zombie: 40Pt
//Shifter Zombie: 7Pt
//Sniper Zombie: 15Pt
//Volatile Ravenger: 10Pt
//Ultra Demon Zombie: 20Pt

function HelljumpGame::CheckScoreModifiers(%game) {
   %mod = 1;
   if(%game.CheckModifier("Titan") == 1) {
      %mod *= 3;
   }
   if(%game.CheckModifier("Demonic") == 1) {
      %mod *= 1.5;
   }
   if(%game.CheckModifier("WheresMyHead") == 1) {
      %mod *= 2;
   }
   return %mod;
}

//Simple award system, works well!
function HelljumpGame::AwardGamePoints(%game, %client, %points) {
   //first Thing first, get the modifiers
   %mod = %game.CheckScoreModifiers();
   //Lets set two score sets
   $HellJump::Score[%client] += (%points * %mod);
   $HellJump::Score["Team"] += (%points * %mod);
   if($HellJump::Score[%client] >= 1000) {
      awardClient(%client, 17);
      CompleteNWChallenge(%client, "OneK");
   }
   if($HellJump::Score[%client] >= 5000) {
      CompleteNWChallenge(%client, "FiveK");
   }
   if($HellJump::Score[%client] >= 10000) {
      CompleteNWChallenge(%client, "TenK");
   }
   //
   if($HellJump::Score["Team"] >= 7500) {
      CompleteNW_allPlayers("PointsSurge");
   }
   if($HellJump::Score["Team"] >= 25000) {
      CompleteNW_allPlayers("PointsJackpot");
   }
}

function HelljumpGame::OnZombieDeath(%game, %killer, %victim) {
   %ZT = %victim.type;
   switch(%ZT) {
      case 1:
         %game.AwardGamePoints(%killer, 1);
      case 2:
         %game.AwardGamePoints(%killer, 5);
      case 3:
         %game.AwardGamePoints(%killer, 10);
      case 4:
         %game.AwardGamePoints(%killer, 5);
      case 12:
         %game.AwardGamePoints(%killer, 10);
      case 13:
         %game.AwardGamePoints(%killer, 10);
      case 14:
         %game.AwardGamePoints(%killer, 20);
      case 15:
         %game.AwardGamePoints(%killer, 75);
         CompleteNWChallenge(%killer, "DownBoy");
   }
   //
   %game.UpdateClientScoreBar(%killer);
   //%game.CheckNextStrike();
}

//NEW BEACONS
//AMMO DROP
datablock ItemData(AmmoDropCaller)
{
   className    = Weapon;
   catagory     = "Spawn Items";
   shapeFile    = "weapon_targeting.dts";
   image        = AmmoDropCallerImage;
   mass         = 1;
   elasticity   = 0.2;
   friction     = 0.6;
   pickupRadius = 2;
	pickUpName = "a targeting laser rifle";

   computeCRC = true;

};

datablock ShapeBaseImageData(AmmoDropCallerImage)
{
   className = WeaponImage;

   shapeFile = "stackable3s.dts";
   item = AmmoDropCaller;
   offset = "0 0 0";

   projectile = BasicTargeter;
   projectileType = TargetProjectile;
   deleteLastProjectile = true;

	usesEnergy = true;
	minEnergy = 3;

   stateName[0]                     = "Activate";
   stateSequence[0]                 = "Activate";
	stateSound[0]                    = TargetingLaserSwitchSound;
   stateTimeoutValue[0]             = 0.5;
   stateTransitionOnTimeout[0]      = "ActivateReady";

   stateName[1]                     = "ActivateReady";
   stateTransitionOnAmmo[1]         = "Ready";
   stateTransitionOnNoAmmo[1]       = "NoAmmo";

   stateName[2]                     = "Ready";
   stateTransitionOnNoAmmo[2]       = "NoAmmo";
   stateTransitionOnTriggerDown[2]  = "Fire";

   stateName[3]                     = "Fire";
	stateEnergyDrain[3]              = 3;
   stateFire[3]                     = true;
   stateAllowImageChange[3]         = false;
   stateScript[3]                   = "onFire";
   stateTransitionOnTriggerUp[3]    = "Deconstruction";
   stateTransitionOnNoAmmo[3]       = "Deconstruction";
   stateSound[3]                    = TargetingLaserPaintSound;

   stateName[4]                     = "NoAmmo";
   stateTransitionOnAmmo[4]         = "Ready";

   stateName[5]                     = "Deconstruction";
   stateScript[5]                   = "deconstruct";
   stateTransitionOnTimeout[5]      = "Ready";
};

function AmmoDropCallerImage::OnFire(%data, %obj, %slot) {
   %obj.client.HasAmmoDrop = 0;
   GainExperience(%obj.client, 500, "Ammo Drop Called In ");

   %obj.throwWeapon(1);
   %obj.throwWeapon(0);
   %obj.setInventory(AmmoDropCaller, 0, true);
   Game.SpawnAmmoTransport(VectorAdd("0 0 1500",$HellJump::SpawnGraph[$CurrentMission]), %obj.getPosition());
}

function AmmoDropCallerImage::onMount(%this,%obj,%slot) {
   Parent::onMount(%this, %obj, %slot);
   bottomPrint(%obj.client, "<spush><font:Sui Generis:14>>>>Killstreak Beacon<<<<spop>\n<spush><font:Arial:14>Ammo Drop.<spop>",2,2);
}

//Full Team Respawn
datablock ItemData(FullTeamRespawnCaller)
{
   className    = Weapon;
   catagory     = "Spawn Items";
   shapeFile    = "weapon_targeting.dts";
   image        = FullTeamRespawnCallerImage;
   mass         = 1;
   elasticity   = 0.2;
   friction     = 0.6;
   pickupRadius = 2;
	pickUpName = "a targeting laser rifle";

   computeCRC = true;

};

datablock ShapeBaseImageData(FullTeamRespawnCallerImage)
{
   className = WeaponImage;

   shapeFile = "stackable3s.dts";
   item = FullTeamRespawnCaller;
   offset = "0 0 0";

   projectile = BasicTargeter;
   projectileType = TargetProjectile;
   deleteLastProjectile = true;

	usesEnergy = true;
	minEnergy = 3;

   stateName[0]                     = "Activate";
   stateSequence[0]                 = "Activate";
	stateSound[0]                    = TargetingLaserSwitchSound;
   stateTimeoutValue[0]             = 0.5;
   stateTransitionOnTimeout[0]      = "ActivateReady";

   stateName[1]                     = "ActivateReady";
   stateTransitionOnAmmo[1]         = "Ready";
   stateTransitionOnNoAmmo[1]       = "NoAmmo";

   stateName[2]                     = "Ready";
   stateTransitionOnNoAmmo[2]       = "NoAmmo";
   stateTransitionOnTriggerDown[2]  = "Fire";

   stateName[3]                     = "Fire";
	stateEnergyDrain[3]              = 3;
   stateFire[3]                     = true;
   stateAllowImageChange[3]         = false;
   stateScript[3]                   = "onFire";
   stateTransitionOnTriggerUp[3]    = "Deconstruction";
   stateTransitionOnNoAmmo[3]       = "Deconstruction";
   stateSound[3]                    = TargetingLaserPaintSound;

   stateName[4]                     = "NoAmmo";
   stateTransitionOnAmmo[4]         = "Ready";

   stateName[5]                     = "Deconstruction";
   stateScript[5]                   = "deconstruct";
   stateTransitionOnTimeout[5]      = "Ready";
};

function FullTeamRespawnCallerImage::OnFire(%data, %obj, %slot) {
   %obj.client.HasFullTeamRespawn = 0;
   GainExperience(%obj.client, 1500, "Full Team Respawn Activated ");
   
   MessageAll('MsgRespawn', "\c5"@%obj.client.namebase@" has activated a full team respawn beacon, you may now respawn.");

   %obj.throwWeapon(1);
   %obj.throwWeapon(0);
   %obj.setInventory(FullTeamRespawnCaller, 0, true);
   Game.AllowAllRespawn(); //yeah, we can just use this :)
   
   CompleteNWChallenge(%obj.client, "LifeGiver");
}

function FullTeamRespawnCallerImage::onMount(%this,%obj,%slot) {
   Parent::onMount(%this, %obj, %slot);
   bottomPrint(%obj.client, "<spush><font:Sui Generis:14>>>>Killstreak Beacon<<<<spop>\n<spush><font:Arial:14>Full Team Respawn.<spop>",2,2);
}


















//SPAWN SYSTEM
//Waves are the largest, and thus are called at short intervals.
function HelljumpGame::SpawnZombies(%game, %pos, %type) {
   if(!isObject(%game) || !$TWM::PlayingHellJump) {
      error("UE BLOCKED");
      return;
   }
   %c = CreateEmitter(%pos, NightmareGlobeEmitter, "0 0 1");
   %c.schedule(1000, "delete");
   schedule(500, 0, "StartAZombie", %pos, %type);
}

function HelljumpGame::StartWave(%game, %wave) {
   //lets start the group.
   //Group start at 1!
   $HellJump::CurrentWave = %wave;
   %game.schedule(15000, "StartGroup", 1);
   messageAll('MsgSPCurrentObjective1' ,"", "[W"@$HellJump::CurrentWave@"|G"@$HellJump::CurrentGroup@"|S"@$HellJump::CurrentStrike@"] | Zombies Left: "@$HellJump::Zombiecount@"");
   if(%wave >= 2) {
      CompleteNW_allPlayers("WaveDefeater");
   }
}

function HelljumpGame::StartGroup(%game, %group) {
   //activate the modifiers for these:
   //Allow Respawn:
   //
   if($HellJump::CurrentWave == 1) {
      if(%group >= 2) {
         CompleteNW_allPlayers("GroupBuster");
      }
   }
   else {
      CompleteNW_allPlayers("GroupBuster");
   }
   %game.schedule(20000, "SpawnAmmoTransport", VectorAdd("0 0 1500",$HellJump::SpawnGraph[$CurrentMission]));
   %game.AllowAllRespawn();
   $HellJump::CurrentGroup = %group;
   switch($HellJump::CurrentWave) {
      case 1:
         if(%group == 3) {
            %game.ToggleModifiers("Super-Lunge", 1);
         }
      case 2:
         if(%group == 1) {
            %game.ToggleModifiers("Super-Lunge", 1);
         }
         if(%group == 2) {
            %game.ToggleModifiers("It BURNS!", 1);
         }
         if(%group == 4) {
            %game.ToggleModifiers("Oh Lordy", 1);
         }
         if(%group == 5) {
            %game.ToggleModifiers("The Destiny", 1);
         }
      case 3:
         if(%group == 1) {
            %game.ToggleModifiers("Super-Lunge", 1);
            %game.ToggleModifiers("It BURNS!", 1);
            %game.ToggleModifiers("Oh Lordy", 1);
            %game.ToggleModifiers("The Destiny", 1);
         }
         if(%group == 4) {
            %game.ToggleModifiers("Kamakaziiiii", 1);
         }
      case 4:
         if(%group == 1) {
            %game.ToggleModifiers("Super-Lunge", 1);
            %game.ToggleModifiers("It BURNS!", 1);
            %game.ToggleModifiers("Oh Lordy", 1);
            %game.ToggleModifiers("The Destiny", 1);
            %game.ToggleModifiers("Kamakaziiiii", 1);
         }
         if(%group == 2) {
            %game.ToggleModifiers("Demonic", 1);
         }
         if(%group == 3) {
            %game.ToggleModifiers("Where's My Head", 1);
         }
      case 5:
         if(%group == 1) {
            %game.ToggleModifiers("Super-Lunge", 1);
            %game.ToggleModifiers("It BURNS!", 1);
            %game.ToggleModifiers("Oh Lordy", 1);
            %game.ToggleModifiers("The Destiny", 1);
            %game.ToggleModifiers("Kamakaziiiii", 1);
            %game.ToggleModifiers("Demonic", 1);
            %game.ToggleModifiers("Where's My Head", 1);
            %game.ToggleModifiers("Scrambler", 1);
         }
         if(%group == 5) {
            %game.ToggleModifiers("You can't see me", 1);
         }
      default:
         %game.ToggleModifiers("Super-Lunge", 1);
         %game.ToggleModifiers("It BURNS!", 1);
         %game.ToggleModifiers("Oh Lordy", 1);
         %game.ToggleModifiers("The Destiny", 1);
         %game.ToggleModifiers("Kamakaziiiii", 1);
         %game.ToggleModifiers("Demonic", 1);
         %game.ToggleModifiers("Where's My Head", 1);
         %game.ToggleModifiers("Scrambler", 1);
         %game.ToggleModifiers("You can't see me", 1);
   }
   //bonus strike
   if(%group == 6) {  //6th group, AKA, bonus strike
      %game.schedule(15000, "StartBonusStrike");
      BottomPrintAll("Wave Complete \n Keep Up The Good Work!", 2, 2);
   }                     //bonus complete
   else if(%group == 7) {
      %game.schedule(30000, "StartWave", $HellJump::CurrentWave + 1);
   }
   //in 15 seconds, start the strike
   else {
      %game.schedule(15000, "StartStrike", 1);
   }
   messageAll('MsgSPCurrentObjective1' ,"", "[W"@$HellJump::CurrentWave@"|G"@$HellJump::CurrentGroup@"|S"@$HellJump::CurrentStrike@"] | Zombies Left: "@$HellJump::Zombiecount@"");
}

function HelljumpGame::GoNextStrike(%game) {
   $HellJump::CurrentStrike++;
   CenterPrintAll("Enemy Reinforcements", 2, 2);
   %game.schedule(15000, "StartStrike", $HellJump::CurrentStrike);
   if(!$HellJump::BonusStrike) {
      if($HellJump::CurrentStrike == 6) { //bonus strike is considered a special group
         $HellJump::CurrentStrike = 1;
         %game.StartGroup($HellJump::CurrentGroup + 1);
         BottomPrintAll("Group Complete \n Keep Up The Good Work!", 2, 2);
      }
   }
   else {
      $HellJump::CurrentStrike = 1;
      $HellJump::BonusStrike = 0;
      %game.ToggleModifiers("All Off", 1);
      %game.StartGroup($HellJump::CurrentGroup + 1);
      BottomPrintAll("Bonus Strike Over \n Dead Silence, Prepare for the next Wave!", 2, 2);
   }
}

function HelljumpGame::DefineProperSpawnPos(%game, %loc) {
   %zCheck = GetTerrainHeight(%loc);
   %zProper = %zCheck + 10;
   %p1 = getRandomPosition(40, 1);
   %p2 = vectorAdd(%loc, %p1);
   %zCheck2 = GetTerrainHeight(%p2);
   %zProperf = %zCheck2 + 10;
   %p3 = ""@getWords(%p2,0,1)@" "@%zProperf@"";
   echo(%p3);
   return %p3;
}

function HelljumpGame::StartBonusStrike(%game) {
   $HellJump::BonusStrike = 1;
   BottomPrintAll("Bonus Strike \n Good Luck...", 2, 2);
   %game.schedule(2500, "ToggleModifiers", "All On", 1);
   //lets spawn us som zombahs
   $HellJump::Zombiecount = 40;
   for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
      %time = 1000 * getRandom(1, 60);
      %type = getRandom(13,13);
      %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
      %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
   }
   messageAll('MsgSPCurrentObjective1' ,"", "BONUS WAVE");
}

function HelljumpGame::StartStrike(%game, %strike) {
   //set the current strike
   $HellJump::CurrentStrike = %strike;
   //holy :P
   %wv = $HellJump::CurrentWave;
   %gr = $HellJump::CurrentGroup;
   switch(%wv) {
      case 1:
         switch(%gr) {
            case 1:
               switch(%strike) {
                  case 1:
                     $HellJump::Zombiecount = 20;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = getRandom(1,1);
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 2:
                     $HellJump::Zombiecount = 25;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = getRandom(1,1);
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 3:
                     $HellJump::Zombiecount = 30;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = getRandom(1,1);
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 4:
                     $HellJump::Zombiecount = 35;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = getRandom(1,2);
                        if(%type == 2)
                           %type = 13;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 5:
                     $HellJump::Zombiecount = 40;
                     for(%i = 0; %i < $HellJump::Zombiecount - 1; %i++) {  //spawn 39 zombs, 1 dlors
                        %time = 1000 * getRandom(1, 60);
                        %type = getRandom(1,2);
                        if(%type == 2)
                           %type = 13;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                     %game.schedule(1000, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), 15);
               }
            case 2:
               switch(%strike) {
                  case 1:
                     $HellJump::Zombiecount = 20;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = getRandom(1,2);
                        if(%type == 2)
                           %type = 13;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 2:
                     $HellJump::Zombiecount = 25;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = getRandom(1,3);
                        if(%type == 2)
                           %type = 13;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 3:
                     $HellJump::Zombiecount = 30;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = getRandom(1,3);
                        if(%type == 2)
                           %type = 13;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 4:
                     $HellJump::Zombiecount = 35;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = getRandom(1,3);
                        if(%type == 2)
                           %type = 13;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 5:
                     $HellJump::Zombiecount = 40;
                     for(%i = 0; %i < $HellJump::Zombiecount - 1; %i++) {  //spawn 39 zombs, 1 dlors
                        %time = 1000 * getRandom(1, 60);
                        %type = getRandom(1,3);
                        if(%type == 2)
                           %type = 13;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                     %game.schedule(1000, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), 15);
               }
            case 3:
               switch(%strike) {
                  case 1:
                     $HellJump::Zombiecount = 20;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = getRandom(1,3);
                        if(%type == 2)
                           %type = 13;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 2:
                     $HellJump::Zombiecount = 25;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = getRandom(1,4);
                        if(%type == 2)
                           %type = 13;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 3:
                     $HellJump::Zombiecount = 30;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = getRandom(1,4);
                        if(%type == 2)
                           %type = 13;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 4:
                     $HellJump::Zombiecount = 35;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 4);
                        if(%type == 2)
                           %type = 13;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 5:
                     $HellJump::Zombiecount = 40;
                     for(%i = 0; %i < $HellJump::Zombiecount - 1; %i++) {  //spawn 39 zombs, 1 dlors
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 4);
                        if(%type == 2)
                           %type = 13;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                     %game.schedule(1000, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), 15);
               }
            case 4:
               switch(%strike) {
                  case 1:
                     $HellJump::Zombiecount = 20;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 4);
                        if(%type == 2)
                           %type = 13;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 2:
                     $HellJump::Zombiecount = 25;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 4);
                        if(%type == 2)
                           %type = 13;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 3:
                     $HellJump::Zombiecount = 30;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 4);
                        if(%type == 2)
                           %type = 13;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 4:
                     $HellJump::Zombiecount = 35;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 4);
                        if(%type == 2)
                           %type = 13;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 5:
                     $HellJump::Zombiecount = 40;
                     for(%i = 0; %i < $HellJump::Zombiecount - 1; %i++) {  //spawn 39 zombs, 1 dlors
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 4);
                        if(%type == 2)
                           %type = 13;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                     %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                     %game.schedule(1000, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), 15);
               }
            case 5:
               switch(%strike) {
                  case 1:
                     $HellJump::Zombiecount = 20;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 4);
                        if(%type == 2)
                           %type = 13;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 2:
                     $HellJump::Zombiecount = 25;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 4);
                        if(%type == 2)
                           %type = 13;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 3:
                     $HellJump::Zombiecount = 30;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 5);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 4:
                     $HellJump::Zombiecount = 35;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 5);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 5:
                     $HellJump::Zombiecount = 40;
                     for(%i = 0; %i < $HellJump::Zombiecount - 1; %i++) {  //spawn 39 zombs, 1 dlors
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 5);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                     %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                     %game.schedule(1000, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), 15);
               }
         }
      //once we hit 2, it's the same
      case 2:
         switch(%gr) {
            case 1:
               switch(%strike) {
                  case 1:
                     $HellJump::Zombiecount = 20;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 5);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 2:
                     $HellJump::Zombiecount = 25;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 5);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 3:
                     $HellJump::Zombiecount = 30;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 5);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 4:
                     $HellJump::Zombiecount = 35;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 6);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 5:
                     $HellJump::Zombiecount = 40;
                     for(%i = 0; %i < $HellJump::Zombiecount - 1; %i++) {  //spawn 39 zombs, 1 dlors
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 6);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                     %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                     %game.schedule(1000, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), 15);
               }
            case 2:
               switch(%strike) {
                  case 1:
                     $HellJump::Zombiecount = 20;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 6);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 2:
                     $HellJump::Zombiecount = 25;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 6);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 3:
                     $HellJump::Zombiecount = 30;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 6);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 4:
                     $HellJump::Zombiecount = 35;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 6);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 5:
                     $HellJump::Zombiecount = 40;
                     for(%i = 0; %i < $HellJump::Zombiecount - 1; %i++) {  //spawn 39 zombs, 1 dlors
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 6);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                     %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                     %game.schedule(1000, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), 15);
               }
            case 3:
               switch(%strike) {
                  case 1:
                     $HellJump::Zombiecount = 20;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 6);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 2:
                     $HellJump::Zombiecount = 25;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 6);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 3:
                     $HellJump::Zombiecount = 30;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 6);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 4:
                     $HellJump::Zombiecount = 35;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 6);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 5:
                     $HellJump::Zombiecount = 40;
                     for(%i = 0; %i < $HellJump::Zombiecount - 1; %i++) {  //spawn 39 zombs, 1 dlors
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                     %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                     %game.schedule(1000, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), 15);
               }
            case 4:
               switch(%strike) {
                  case 1:
                     $HellJump::Zombiecount = 20;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 2:
                     $HellJump::Zombiecount = 25;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 3:
                     $HellJump::Zombiecount = 30;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 4:
                     $HellJump::Zombiecount = 35;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 5:
                     $HellJump::Zombiecount = 40;
                     for(%i = 0; %i < $HellJump::Zombiecount - 1; %i++) {  //spawn 39 zombs, 1 dlors
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                     %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                     %game.schedule(1000, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), 15);
               }
            case 5:
               switch(%strike) {
                  case 1:
                     $HellJump::Zombiecount = 20;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 2:
                     $HellJump::Zombiecount = 25;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 3:
                     $HellJump::Zombiecount = 30;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 4:
                     $HellJump::Zombiecount = 35;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 5:
                     $HellJump::Zombiecount = 40;
                     for(%i = 0; %i < $HellJump::Zombiecount - 1; %i++) {  //spawn 39 zombs, 1 dlors
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                     %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                     %game.schedule(1000, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), 15);
               }
         }
      default:
         switch(%gr) {
            case 1:
               switch(%strike) {
                  case 1:
                     $HellJump::Zombiecount = 20;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 2:
                     $HellJump::Zombiecount = 25;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 3:
                     $HellJump::Zombiecount = 30;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 4:
                     $HellJump::Zombiecount = 35;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 5:
                     $HellJump::Zombiecount = 40;
                     for(%i = 0; %i < $HellJump::Zombiecount - 1; %i++) {  //spawn 39 zombs, 1 dlors
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                     %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                     %game.schedule(1000, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), 15);
               }
            case 2:
               switch(%strike) {
                  case 1:
                     $HellJump::Zombiecount = 20;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 2:
                     $HellJump::Zombiecount = 25;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 3:
                     $HellJump::Zombiecount = 30;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 4:
                     $HellJump::Zombiecount = 35;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 5:
                     $HellJump::Zombiecount = 40;
                     for(%i = 0; %i < $HellJump::Zombiecount - 1; %i++) {  //spawn 39 zombs, 1 dlors
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                     %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                     %game.schedule(1000, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), 15);
               }
            case 3:
               switch(%strike) {
                  case 1:
                     $HellJump::Zombiecount = 20;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 2:
                     $HellJump::Zombiecount = 25;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 3:
                     $HellJump::Zombiecount = 30;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 4:
                     $HellJump::Zombiecount = 35;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 5:
                     $HellJump::Zombiecount = 40;
                     for(%i = 0; %i < $HellJump::Zombiecount - 1; %i++) {  //spawn 39 zombs, 1 dlors
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                     %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                     %game.schedule(1000, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), 15);
               }
            case 4:
               switch(%strike) {
                  case 1:
                     $HellJump::Zombiecount = 20;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 2:
                     $HellJump::Zombiecount = 25;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 3:
                     $HellJump::Zombiecount = 30;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 4:
                     $HellJump::Zombiecount = 35;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 5:
                     $HellJump::Zombiecount = 40;
                     for(%i = 0; %i < $HellJump::Zombiecount - 1; %i++) {  //spawn 39 zombs, 1 dlors
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                     %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                     %game.schedule(1000, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), 15);
               }
            case 5:
               switch(%strike) {
                  case 1:
                     $HellJump::Zombiecount = 20;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 2:
                     $HellJump::Zombiecount = 25;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 3:
                     $HellJump::Zombiecount = 30;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 4:
                     $HellJump::Zombiecount = 35;
                     for(%i = 0; %i < $HellJump::Zombiecount; %i++) {
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                  case 5:
                     $HellJump::Zombiecount = 40;
                     for(%i = 0; %i < $HellJump::Zombiecount - 1; %i++) {  //spawn 39 zombs, 1 dlors
                        %time = 1000 * getRandom(1, 60);
                        %type = GetRandom(1, 7);
                        if(%type == 2)
                           %type = 13;
                        if(%type == 5)
                           %type = 2;
                        if(%type == 6)
                           %type = 12;
                        if(%type == 7)
                           %type = 14;
                        %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                        %game.schedule(%time, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), %type);
                     }
                     %zone = getRandom(1, $HellJump::ZSpawnZoneCt[$CurrentMission]);
                     %game.schedule(1000, SpawnZombies, %game.DefineProperSpawnPos($HellJump::ZSpawnZone[$CurrentMission, %zone]), 15);
               }
         }
   }
   messageAll('MsgSPCurrentObjective1' ,"", "[W"@$HellJump::CurrentWave@"|G"@$HellJump::CurrentGroup@"|S"@$HellJump::CurrentStrike@"] | Zombies Left: "@$HellJump::Zombiecount@"");
}

//Score menu
function HelljumpGame::updateScoreHud(%game, %client, %tag){
   if (%client.SCMPage $= "")
      %client.SCMPage = 1;
   if (%client.SCMPage $= "SM")
      return;
   $TagToUseForScoreMenu = %tag;
   messageClient( %client, 'ClearHud', "", %tag, 0 );
   messageClient( %client, 'SetScoreHudHeader', "", "" );
   messageClient( %client, 'SetScoreHudHeader', "", "E.V.A.<rmargin:600><just:right><a:gamelink\tNAC\t1>Close</a>" );
   messageClient( %client, 'SetScoreHudSubheader', "", "Hell-Jump Command Hud" );
   //scoreCmdMainMenu(%game,%client,%tag,%client.SCMPage);
   if(%client.hasMedal(17)) {
      messageClient( %client, 'SetLineHud', "", %tag, %index, "<a:gamelink\tHellClass\t1>Hell-Class Selection</a>");
      %index++;
      messageClient( %client, 'SetLineHud', "", %tag, %index, "<a:gamelink\tPersControl\t1>Settings/Perks</a>");
      %index++;
      messageClient( %client, 'SetLineHud', "", %tag, %index, '<a:gamelink\tWeaponChallenge\t1>Weapon Challenges/Upgrades</a>');
      %index++;
      messageClient( %client, 'SetLineHud', "", %tag, %index, "<a:gamelink\tNAC\t1>Exit</a>");
      %index++;
   }
   else {
      messageClient( %client, 'SetLineHud', "", %tag, %index, "-*-*-Module Locked-*-*-");
      %index++;
      messageClient( %client, 'SetLineHud', "", %tag, %index, "<a:gamelink\tPersControl\t1>Settings/Perks</a>");
      %index++;
      messageClient( %client, 'SetLineHud', "", %tag, %index, '<a:gamelink\tWeaponChallenge\t1>Weapon Challenges/Upgrades</a>');
      %index++;
      messageClient( %client, 'SetLineHud', "", %tag, %index, "<a:gamelink\tNAC\t1>Exit</a>");
      %index++;
   }
}

function HelljumpGame::processGameLink(%game, %client, %arg1, %arg2, %arg3, %arg4, %arg5){
   %tag = $TagToUseForScoreMenu;
   messageClient( %client, 'ClearHud', "", %tag, 1 );
   //Stuff
   if(%arg1 $= "")
      %arg1 = "Null";
   if(%arg2 $= "")
      %arg2 = "Null";
   if(%arg3 $= "")
      %arg3 = "Null";
   if(%arg4 $= "")
      %arg4 = "Null";
   if(%arg5 $= "")
      %arg5 = "Null";
   //end
   echo("[F2] "@%client.namebase@": "@%arg1@", "@%arg2@", "@%arg3@", "@%arg4@", "@%arg5@".");
   switch$ (%arg1) {
   
      case "GTP":
         %game.updateScoreHud(%client, %tag);
         return;

      case "PersControl":
         %client.SCMPage = "SM";
         messageClient( %client, 'SetScoreHudSubheader', "", "Personal Settings" );
         messageClient( %client, 'SetLineHud', "", %tag, %index, "Select An Option");
         %index++;
         messageClient( %client, 'SetLineHud', "", %tag, %index, "");
         %index++;
         messageClient( %client, 'SetLineHud', "", %tag, %index, 'Killstreak Superweapons - Special Streaks For Helljump');
         %index++;
         messageClient( %client, 'SetLineHud', "", %tag, %index, '<a:gamelink\tPerks\t1>Perks</a>');
         %index++;
         //messageClient( %client, 'SetLineHud', "", %tag, %index, '<a:gamelink\tWeaponChallenge\t1>Weapon Challenges</a>');
         //%index++;
         messageClient( %client, 'SetLineHud', "", %tag, %index, '<a:gamelink\tUpdateSettings\t1>Save Settings</a>');
         %index++;
         messageClient( %client, 'SetLineHud', "", %tag, %index, "");
         %index++;
         messageClient( %client, 'SetLineHud', "", %tag, %index, '<a:gamelink\tGTP\t1>Back to main menu</a>');
         %index++;
         messageClient( %client, 'ClearHud', "", %tag, %index );
         return;

      case "UpdateSettings":
         UpdateSettings(%client);
         MessageClient(%client, 'msgSaved', "\c5Settings Saved");
         %game.processGameLink(%client, "NAC");
         return;
   
      case "ChooseClass":
           %client.SCMPage = "SM";
           messageClient( %client, 'SetScoreHudHeader', "", "<a:gamelink\tNAC\t1>Close EVA</a>" );
           messageClient( %client, 'SetScoreHudSubheader', "", "Hell-Class Selection" );
           $HellJump::HellClass[%client] = %arg2;
           CompleteNWChallenge(%client, "ClassExtravaganza");
           messageClient( %client, 'SetLineHud', "", "New Class: "@$HellJump::HellClass[%client]@"" );
           %index++;
           messageClient( %client, 'SetLineHud', "", "New Class Weapons: "@$HellClass::Info[$HellJump::HellClass[%client]]@"" );
           %index++;
           messageClient( %client, 'SetLineHud', "", "" );
           %index++;
           messageClient( %client, 'SetLineHud', "", %tag, %index, '<a:gamelink\tNAC\t1>Exit</a>');
           %index++;
           //
           if(!%client.jumpDownYet) {
              %game.GiveGuns(%client.player);
           }
           return;

      case "HellClass":
           %client.SCMPage = "SM";
           messageClient( %client, 'SetScoreHudHeader', "", "<a:gamelink\tNAC\t1>Close EVA</a>" );
           messageClient( %client, 'SetScoreHudSubheader', "", "Hell-Class Selection" );
           messageClient( %client, 'SetLineHud', "", %tag, %index, "Current Class: "@$HellJump::HellClass[%client]@" - "@$HellClass::Info[$HellJump::HellClass[%client]]@"");
           %index++;
           messageClient( %client, 'SetLineHud', "", %tag, %index, "");
           %index++;
           messageClient( %client, 'SetLineHud', "", %tag, %index, "NOTE: All changes will apply on your next re-spawn");
           %index++;
           messageClient( %client, 'SetLineHud', "", %tag, %index, "Please Choose a Hell-Class:");
           %index++;
           messageClient( %client, 'SetLineHud', "", %tag, %index, "");
           %index++;
           messageClient( %client, 'SetLineHud', "", %tag, %index, "<a:gamelink\tChooseClass\tHellJumper\t1>HellJumper</a> - "@$HellClass::Info["HellJumper"]@"");
           %index++;
           messageClient( %client, 'SetLineHud', "", %tag, %index, "");
           %index++;
           messageClient( %client, 'SetLineHud', "", %tag, %index, "<a:gamelink\tChooseClass\tLight Sniper\t1>Light Sniper</a> - "@$HellClass::Info["Light Sniper"]@"");
           %index++;
           messageClient( %client, 'SetLineHud', "", %tag, %index, "");
           %index++;
           messageClient( %client, 'SetLineHud', "", %tag, %index, "<a:gamelink\tChooseClass\tExplosives\t1>Explosives</a> - "@$HellClass::Info["Explosives"]@"");
           %index++;
           messageClient( %client, 'SetLineHud', "", %tag, %index, "");
           %index++;
           messageClient( %client, 'SetLineHud', "", %tag, %index, "<a:gamelink\tChooseClass\tRSA\t1>RSA Commando</a> - "@$HellClass::Info["RSA"]@"");
           %index++;
           messageClient( %client, 'SetLineHud', "", %tag, %index, "");
           %index++;
           if(%client.hasMedal(9)) {
              messageClient( %client, 'SetLineHud', "", %tag, %index, "<a:gamelink\tChooseClass\tStormlord\t1>Stormlord</a> - "@$HellClass::Info["Stormlord"]@"");
              %index++;
              messageClient( %client, 'SetLineHud', "", %tag, %index, "");
              %index++;
           }
           else {
              messageClient( %client, 'SetLineHud', "", %tag, %index, "*Locked* Requires The Thunda-Struck Medal");
              %index++;
           }
           if(%client.hasMedal(1)) {
              messageClient( %client, 'SetLineHud', "", %tag, %index, "<a:gamelink\tChooseClass\tClose Combat\t1>Close Combat</a> - "@$HellClass::Info["Close Combat"]@"");
              %index++;
              messageClient( %client, 'SetLineHud', "", %tag, %index, "");
              %index++;
           }
           else {
              messageClient( %client, 'SetLineHud', "", %tag, %index, "*Locked* Requires The He Fell Again Medal");
              %index++;
           }
           if(%client.hasMedal(13)) {
              messageClient( %client, 'SetLineHud', "", %tag, %index, "<a:gamelink\tChooseClass\tShadow Guard\t1>Shadow Guard</a> - "@$HellClass::Info["Shadow Guard"]@"");
              %index++;
              messageClient( %client, 'SetLineHud', "", %tag, %index, "");
              %index++;
           }
           else {
              messageClient( %client, 'SetLineHud', "", %tag, %index, "*Locked* Requires The Source Of All Evil Medal");
              %index++;
           }
           if(%client.hasMedal(20)) {
              messageClient( %client, 'SetLineHud', "", %tag, %index, "<a:gamelink\tChooseClass\tCollider Fanatic\t1>Collider Fanatic</a> - "@$HellClass::Info["Collider Fanatic"]@"");
              %index++;
              messageClient( %client, 'SetLineHud', "", %tag, %index, "");
              %index++;
           }
           else {
              messageClient( %client, 'SetLineHud', "", %tag, %index, "*Locked* Requires The Hazing Medal");
              %index++;
           }
           if(%client.hasMedal(21)) {
              messageClient( %client, 'SetLineHud', "", %tag, %index, "<a:gamelink\tChooseClass\tFlamer\t1>Flamer</a> - "@$HellClass::Info["Flamer"]@"");
              %index++;
              messageClient( %client, 'SetLineHud', "", %tag, %index, "");
              %index++;
           }
           else {
              messageClient( %client, 'SetLineHud', "", %tag, %index, "*Locked* Requires The Glorious Fire Medal");
              %index++;
           }
           if(%client.CheckNWChallengeCompletion("NewYearsEve")) {
              messageClient( %client, 'SetLineHud', "", %tag, %index, "<a:gamelink\tChooseClass\tJavelin\t1>Javelin</a> - "@$HellClass::Info["Javelin"]@"");
              %index++;
              messageClient( %client, 'SetLineHud', "", %tag, %index, "");
              %index++;
           }
           else {
              messageClient( %client, 'SetLineHud', "", %tag, %index, "*Locked* Requires The New Years Eve Fireworks Challenge");
              %index++;
           }
           messageClient( %client, 'SetLineHud', "", %tag, %index, "");
           %index++;
           messageClient( %client, 'SetLineHud', "", %tag, %index, '<a:gamelink\tNAC\t1>Exit</a>');
           %index++;
           return;

        //other
        case "ActivateUpgrade":
             %image = %arg2;
             %upgrade = %arg3;
             %client.DisableAllUpgrades(%image); //disable all first
             %client.ActivateUpgrade(%image, %upgrade);
             %game.processGameLink(%client, "CompletedSub");
             return;
             
        case "DeActivateUpgrades":
             %image = %arg2;
             %client.DisableAllUpgrades(%image); //disable all
             %game.processGameLink(%client, "CompletedSub");
             return;

        case "CompletedSub":
             %image = %arg2;
             %client.SCMPage = "SM";
             messageClient( %client, 'SetScoreHudSubheader', "", "Completed Challenges" );
             messageClient( %client, 'SetLineHud', "", %tag, %index, "Select A Upgrade To Use");
             %index++;
             %index = GenerateCompletedSubMenu(%client, %tag, %index, %image);
             messageClient( %client, 'SetLineHud', "", %tag, %index, '<a:gamelink\tWeaponChallenge\t1>Back to weapon challegnes</a>');
             %index++;
             messageClient( %client, 'SetLineHud', "", %tag, %index, '<a:gamelink\tGTP\t1>Back to main menu</a>');
             %index++;
             return;

        case "CompletedChallenge":
             %client.SCMPage = "SM";
             messageClient( %client, 'SetScoreHudSubheader', "", "Completed Challenges" );
             messageClient( %client, 'SetLineHud', "", %tag, %index, "Select A Weapon");
             %index++;
             messageClient( %client, 'SetLineHud', "", %tag, %index, "");
             %index++;
             %index = GenerateCompletedChallegnesMenu(%client, %tag, %index);
             messageClient( %client, 'SetLineHud', "", %tag, %index, "");
             %index++;
             messageClient( %client, 'SetLineHud', "", %tag, %index, '<a:gamelink\tWeaponChallenge\t1>Back to weapon challegnes</a>');
             %index++;
             messageClient( %client, 'SetLineHud', "", %tag, %index, '<a:gamelink\tGTP\t1>Back to main menu</a>');
             %index++;
             return;

        case "WeaponTasksSub":
             %image = %arg2;
             %client.SCMPage = "SM";
             messageClient( %client, 'SetScoreHudSubheader', "", "In-Complete Challenges" );
             messageClient( %client, 'SetLineHud', "", %tag, %index, "Challenges:");
             %index++;
             %index = GenerateWChallengeSubMenu(%client, %tag, %index, %image);
             messageClient( %client, 'SetLineHud', "", %tag, %index, '<a:gamelink\tWeaponChallenge\t1>Back to weapon challegnes</a>');
             %index++;
             messageClient( %client, 'SetLineHud', "", %tag, %index, '<a:gamelink\tGTP\t1>Back to main menu</a>');
             %index++;
             return;

        case "WeaponsTasks":
             %client.SCMPage = "SM";
             messageClient( %client, 'SetScoreHudSubheader', "", "In-Complete Challenges" );
             messageClient( %client, 'SetLineHud', "", %tag, %index, "Select A Weapon");
             %index++;
             messageClient( %client, 'SetLineHud', "", %tag, %index, "");
             %index++;
             %index = GenerateWeaponChallegnesMenu(%client, %tag, %index);
             messageClient( %client, 'SetLineHud', "", %tag, %index, "");
             %index++;
             messageClient( %client, 'SetLineHud', "", %tag, %index, '<a:gamelink\tWeaponChallenge\t1>Back to weapon challegnes</a>');
             %index++;
             messageClient( %client, 'SetLineHud', "", %tag, %index, '<a:gamelink\tGTP\t1>Back to main menu</a>');
             %index++;
             return;

        case "OtherTasks":
             %client.SCMPage = "SM";
             messageClient( %client, 'SetScoreHudSubheader', "", "In-Complete Challenges" );
             messageClient( %client, 'SetLineHud', "", %tag, %index, "Select A Challenge");
             %index++;
             messageClient( %client, 'SetLineHud', "", %tag, %index, "");
             %index++;
             //%index = GenerateChallegnesMenu(%client, %tag, %index);
             messageClient( %client, 'SetLineHud', "", %tag, %index, "");
             %index++;
             messageClient( %client, 'SetLineHud', "", %tag, %index, '<a:gamelink\tWeaponChallenge\t1>Back to weapon challegnes</a>');
             %index++;
             messageClient( %client, 'SetLineHud', "", %tag, %index, '<a:gamelink\tGTP\t1>Back to main menu</a>');
             %index++;
             return;

        case "WeaponChallenge":
             %client.SCMPage = "SM";
             messageClient( %client, 'SetScoreHudSubheader', "", "Weapon Challenges" );
             messageClient( %client, 'SetLineHud', "", %tag, %index, "Select An Option");
             %index++;
             //
             messageClient( %client, 'SetLineHud', "", %tag, %index, "");
             %index++;
             //
             messageClient( %client, 'SetLineHud', "", %tag, %index, '<a:gamelink\tCompletedChallenge\t1>Completed Challenges & Upgrades</a>');
             %index++;
             //
             messageClient( %client, 'SetLineHud', "", %tag, %index, '<a:gamelink\tWeaponsTasks\t1>Specific Weapon Challenges</a>');
             %index++;
             //
             messageClient( %client, 'SetLineHud', "", %tag, %index, '<a:gamelink\tOtherTasks\t1>Additional Challenges</a>');
             %index++;
             //
             //%index = CreatePerkMenu(%client, %tag, %index);
             //
             messageClient( %client, 'SetLineHud', "", %tag, %index, "");
             %index++;
             messageClient( %client, 'SetLineHud', "", %tag, %index, '<a:gamelink\tGTP\t1>Back to main menu</a>');
             %index++;
             messageClient( %client, 'ClearHud', "", %tag, %index );
             return;
             
        case "Perks":
             %client.SCMPage = "SM";
             messageClient( %client, 'SetScoreHudSubheader', "", "PERKS" );
             messageClient( %client, 'SetLineHud', "", %tag, %index, "");
             %index++;
             messageClient( %client, 'SetLineHud', "", %tag, %index, "--- ACTIVE PERKS ---");
             %index++;
             GetActivePerks(%client);  //Reload This First
             messageClient( %client, 'SetLineHud', "", %tag, %index, "PRIMARY: "@%client.Perk[1]@"");
             %index++;
             messageClient( %client, 'SetLineHud', "", %tag, %index, "SECONDARY: "@%client.Perk[2]@"");
             %index++;
             messageClient( %client, 'SetLineHud', "", %tag, %index, "TERTIARY: "@%client.Perk[3]@"");
             %index++;
             //
             //
             messageClient( %client, 'SetLineHud', "", %tag, %index, "");
             %index++;
             messageClient( %client, 'SetLineHud', "", %tag, %index, "--- AVAILIABLE PERKS ---");
             %index++;
             //
             %index = CreatePerkMenu(%client, %tag, %index);
             //
             messageClient( %client, 'SetLineHud', "", %tag, %index, "");
             %index++;
             messageClient( %client, 'SetLineHud', "", %tag, %index, '<a:gamelink\tGTP\t1>Back to main menu</a>');
             %index++;
             messageClient( %client, 'ClearHud', "", %tag, %index );
             return;

        case "PerkStatus":
           DisableAllPerkGroup(%client, $Perk::PerkToGroup[%arg2]);
           SetPerkStatus(%client, %arg2, 1);
           %game.processGameLink(%client, "Perks");
           return;
        //
        default:
           %client.notFirstUse = 1;
   }
   closeScoreHudFSERV(%client);
}

function HelljumpGame::GiveGuns(%game, %player) {
   //
   %class = $HellJump::HellClass[%player.client];
   //
   switch$ (%class) {
      case "HellJumper":
         %player.setArmor("Medium"); //commando!
         %player.clearInventory();
         %player.setInventory(S3SRifle, 1, true);
         %player.setInventory(S3SRifleAmmo, 30, true);
         %player.ClipCount[S3SRifleImage.ClipName] = S3SRifleImage.InitialClips;
         %player.setInventory(Mp26CMDO, 1, true);
         %player.setInventory(Mp26CMDOAmmo, 50, true);
         %player.ClipCount[Mp26CMDOImage.ClipName] = Mp26CMDOImage.InitialClips;
         %player.setInventory(Pistol, 1, true);
         %player.setInventory(PistolAmmo, 50, true);  //I'm nice for your first clip :)
         %player.ClipCount[PistolImage.ClipName] = PistolImage.HellClipCount;
         %player.setInventory(RepairKit,3);
         %player.setInventory(Grenade,5);
         %player.use(Mp26CMDO);
      case "Light Sniper":
         %player.setArmor("Light");
         %player.clearInventory();
         %player.setInventory(R700SniperRifle, 1, true);
         %player.setInventory(R700SniperRifleAmmo, 10, true);
         %player.ClipCount[R700SniperRifleImage.ClipName] = R700SniperRifleImage.InitialClips;
         %player.setInventory(Shocklance, 1, true);
         %player.setInventory(RepairKit,3);
         %player.setInventory(Grenade,5);
         %player.use(R700SniperRifle);
      case "Explosives":
         %player.setArmor("Heavy");
         %player.clearInventory();
         %player.setInventory(RPG, 1, true);
         %player.setInventory(RPGAmmo, 1, true);
         %player.ClipCount[RPGImage.ClipName] = 25; //have fun with your RPGs
         %player.setInventory(Pistol, 1, true);
         %player.setInventory(PistolAmmo, 50, true);  //I'm nice for your first clip :)
         %player.ClipCount[PistolImage.ClipName] = PistolImage.HellClipCount;
         %player.setInventory(MG42, 1, true);
         %player.setInventory(MG42Ammo, 200, true);
         %player.ClipCount[MG42Image.ClipName] = MG42Image.InitialClips;
         %player.setInventory(Javelin, 1, true);
         %player.setInventory(JavelinAmmo, 1, true);
         %player.ClipCount[JavelinImage.ClipName] = 10;
         %player.setInventory(RepairKit,3);
         %player.setInventory(Grenade,5);
         %player.use(RPG);
      case "Stormlord":
         %player.setArmor("Microburst");
         %player.clearInventory();
         %player.setInventory(S3Rifle, 1, true);
         %player.setInventory(S3RifleAmmo, 10, true);
         %player.ClipCount[S3RifleImage.ClipName] = S3RifleImage.InitialClips;
         %player.setInventory(IonRifle, 1, true);
         %player.setInventory(Shocklance, 1, true);
         %player.setInventory(RepairKit,3);
         %player.setInventory(StaticGrenade,5);
         %player.use(IonRifle);
      case "Close Combat":
         %player.setArmor("Medium"); //commando!
         %player.clearInventory();
         %player.setInventory(Wp400, 1, true);
         %player.setInventory(Wp400Ammo, 5, true);
         %player.ClipCount[Wp400Image.ClipName] = Wp400Image.InitialClips;
         %player.setInventory(Pg700, 1, true);
         %player.setInventory(Pg700Ammo, 45, true);
         %player.ClipCount[Pg700Image.ClipName] = Pg700Image.InitialClips;
         %player.setInventory(LD06Savager, 1, true);
         %player.setInventory(LD06SavagerAmmo, 10, true);  //I'm nice for your first clip :)
         %player.ClipCount[LD06SavagerImage.ClipName] = LD06SavagerImage.InitialClips;
         %player.setInventory(RepairKit,3);
         %player.setInventory(Grenade,5);
         %player.use(Wp400);
      case "Shadow Guard":
         %player.setArmor("ShadowCommando"); //commando!
         %player.clearInventory();
         %player.setInventory(ShadowRifle, 1, true);
         %player.setInventory(S3Rifle, 1, true);
         %player.setInventory(S3RifleAmmo, 10, true);
         %player.ClipCount[S3RifleImage.ClipName] = S3RifleImage.InitialClips;
         %player.setInventory(LD06Savager, 1, true);
         %player.setInventory(LD06SavagerAmmo, 10, true);  //I'm nice for your first clip :)
         %player.ClipCount[LD06SavagerImage.ClipName] = LD06SavagerImage.InitialClips;
         %player.setInventory(RepairKit,3);
         %player.setInventory(Grenade,5);
         %player.use(ShadowRifle);
      case "RSA":
         %player.setArmor("Medium"); //commando!
         %player.clearInventory();
         %player.setInventory(lasergun, 1, true);
         %player.setInventory(lasergunAmmo, 10, true);
         %player.ClipCount[lasergunImage.ClipName] = 7;
         %player.setInventory(S3SRifle, 1, true);
         %player.setInventory(S3SRifleAmmo, 30, true);
         %player.ClipCount[S3SRifleImage.ClipName] = S3SRifleImage.InitialClips;
         %player.setInventory(PulsePhaser, 1, true);
         %player.setInventory(RepairKit,3);
         %player.setInventory(Grenade,5);
         %player.use(lasergun);
      case "Flamer":
         %player.setArmor("Medium"); //commando!
         %player.clearInventory();
         %player.setInventory(flamer, 1, true);
         %player.setInventory(flamerAmmo, 100, true);
         %player.ClipCount[flamerImage.ClipName] = 999;
         %player.setInventory(Pistol, 1, true);
         %player.setInventory(PistolAmmo, 50, true);  //I'm nice for your first clip :)
         %player.ClipCount[PistolImage.ClipName] = PistolImage.HellClipCount;
         %player.setInventory(RepairKit,3);
         %player.setInventory(Grenade,5);
         %player.use(flamer);
      case "Javelin":
         %player.setArmor("Medium"); //commando!
         %player.clearInventory();
         %player.setInventory(Javelin, 1, true);
         %player.setInventory(JavelinAmmo, 1, true);
         %player.ClipCount[JavelinImage.ClipName] = 999;
         %player.setInventory(Deagle, 1, true);
         %player.setInventory(DeagleAmmo, 7, true);  //I'm nice for your first clip :)
         %player.ClipCount[DeagleImage.ClipName] = DeagleImage.InitialClips;
         %player.setInventory(TargetingLaser, 1, true);
         %player.setInventory(RepairKit,3);
         %player.setInventory(Grenade,5);
         %player.use(Javelin);
      default:
         %player.setArmor("Medium"); //commando!
         %player.clearInventory();
         %player.setInventory(S3SRifle, 1, true);
         %player.setInventory(S3SRifleAmmo, 30, true);
         %player.ClipCount[S3SRifleImage.ClipName] = S3SRifleImage.InitialClips;
         %player.setInventory(Mp26CMDO, 1, true);
         %player.setInventory(Mp26CMDOAmmo, 50, true);
         %player.ClipCount[Mp26CMDOImage.ClipName] = Mp26CMDOImage.InitialClips;
         %player.setInventory(Pistol, 1, true);
         %player.setInventory(PistolAmmo, 50, true);  //I'm nice for your first clip :)
         %player.ClipCount[PistolImage.ClipName] = PistolImage.HellClipCount;
         %player.setInventory(RepairKit,3);
         %player.setInventory(Grenade,5);
         %player.use(Mp26CMDO);
   }
}

//HellClass info(1.6)
$HellClass::Info["HellJumper"] = "Commando Armor - S3-S Rifle, MP26 CMDO, Colt Pistol";
$HellClass::Info["Light Sniper"] = "Scout Armor - R700 Sniper, X-81 Shocklance";
$HellClass::Info["Explosives"] = "Support Armor - RPG-7, MG42 Machine Gun, Javelin, Colt Pistol";
$HellClass::Info["RSA"] = "Commando Armor - RSA Laser Rifle, S3-S Rifle, ES-77 Pulse Phaser";
$HellClass::Info["Stormlord"] = "Microburst Armor - S3 Rifle, LUST Ion Rifle, X-81 Shocklance";
$HellClass::Info["Close Combat"] = "Commando Armor - Wp400 Shotgun, Pg700 SMG, LD06 Savager";
$HellClass::Info["Shadow Guard"] = "S.Commando Armor - Sh4d3 Shadow Rifle, S3 Rifle, LD06 Savager";
//Special Classes (most of these have 1 weapon that cannot be obtained in a drop pod and a pistol.
$HellClass::Info["Collider Fanatic"] = "Commando Armor - PRTCL-995 MCC, Colt Pistol";
$HellClass::Info["Flamer"] = "Commando Armor - A|V|X Flamethrower (Unlimited), Colt Pistol";
$HellClass::Info["Javelin"] = "Commando Armor - Javelin (Unlimited), Desert Eagle Pistol";

























//Phantom139
//TWM2 3.7 Changes
function GenerateHelljumpChallengeMenu(%client, %tag, %index) {
   if(%client.CheckNWChallengeCompletion("GroupBuster")) {
      messageClient( %client, 'SetLineHud', "", %tag, %index, "Group Buster - Done.");
      %index++;
   }
   else {
      messageClient( %client, 'SetLineHud', "", %tag, %index, "Group Buster - Complete A Group.");
      %index++;
   }
   //
   if(%client.CheckNWChallengeCompletion("WaveDefeater")) {
      messageClient( %client, 'SetLineHud', "", %tag, %index, "Wave Defeater - Done.");
      %index++;
   }
   else {
      messageClient( %client, 'SetLineHud', "", %tag, %index, "Wave Defeater - Complete A Wave.");
      %index++;
   }
   //
   if(%client.CheckNWChallengeCompletion("OneK")) {
      messageClient( %client, 'SetLineHud', "", %tag, %index, "1K Soldier - Done.");
      %index++;
   }
   else {
      messageClient( %client, 'SetLineHud', "", %tag, %index, "1K Soldier - Earn 1,000 Points (Solo Score).");
      %index++;
   }
   //
   if(%client.CheckNWChallengeCompletion("FiveK")) {
      messageClient( %client, 'SetLineHud', "", %tag, %index, "5K Soldier - Done.");
      %index++;
   }
   else {
      messageClient( %client, 'SetLineHud', "", %tag, %index, "5K Soldier - Earn 5,000 Points (Solo Score).");
      %index++;
   }
   //
   if(%client.CheckNWChallengeCompletion("TenK")) {
      messageClient( %client, 'SetLineHud', "", %tag, %index, "10K Soldier - Done.");
      %index++;
   }
   else {
      messageClient( %client, 'SetLineHud', "", %tag, %index, "10K Soldier - Earn 10,000 Points (Solo Score).");
      %index++;
   }
   //
   if(%client.CheckNWChallengeCompletion("PointsSurge")) {
      messageClient( %client, 'SetLineHud', "", %tag, %index, "Points Surge - Done.");
      %index++;
   }
   else {
      messageClient( %client, 'SetLineHud', "", %tag, %index, "Points Surge - Earn 7,500 Points (Team Score).");
      %index++;
   }
   //
   if(%client.CheckNWChallengeCompletion("PointsJackpot")) {
      messageClient( %client, 'SetLineHud', "", %tag, %index, "Points Jackpot - Done.");
      %index++;
   }
   else {
      messageClient( %client, 'SetLineHud', "", %tag, %index, "Points Jackpot - Earn 25,000 Points (Team Score).");
      %index++;
   }
   //
   if(%client.CheckNWChallengeCompletion("ThatsAHind")) {
      messageClient( %client, 'SetLineHud', "", %tag, %index, "That's a Hind - Done.");
      %index++;
   }
   else {
      messageClient( %client, 'SetLineHud', "", %tag, %index, "That's a Hind - Use a Hind Pilot Killstreak in Helljump.");
      %index++;
   }
   //
   if(%client.CheckNWChallengeCompletion("DownBoy")) {
      messageClient( %client, 'SetLineHud', "", %tag, %index, "Down Boy... Down - Done.");
      %index++;
   }
   else {
      messageClient( %client, 'SetLineHud', "", %tag, %index, "Down Boy... Down - Kill the wraith zombie on Strike 5.");
      %index++;
   }
   //
   if(%client.CheckNWChallengeCompletion("ClassExtravaganza")) {
      messageClient( %client, 'SetLineHud', "", %tag, %index, "Class Extravaganza - Done.");
      %index++;
   }
   else {
      messageClient( %client, 'SetLineHud', "", %tag, %index, "Class Extravaganza - Use a hellclass.");
      %index++;
   }
   //
   if(%client.CheckNWChallengeCompletion("LifeGiver")) {
      messageClient( %client, 'SetLineHud', "", %tag, %index, "Giver of Life - Done.");
      %index++;
   }
   else {
      messageClient( %client, 'SetLineHud', "", %tag, %index, "Giver of Life - Use a Full Team Respawn beacon.");
      %index++;
   }
   //
   return %index;
}

