the cutting room mirror

Source Code

This is a sub-page of Dragon Rage.

Found in nearly every folder on the game disc are files that when opened in a text editor contain the following: .ICE - Scripts written in what appears to be a proprietary scripting language called, you guessed it, ice. .POI - A list of the actors in each level, followed by what is likely (According to some of the ICE files) the xyz positions and rotations of said actor. .PMF - XML file giving the x and y locations of "pads" (event triggers) and another unknown set of coordinates. .CML - An XML like file in a script called "Castle". Same as a POI but apparently for destroyable keeps and wall parts.

..\TECH\DATA\AMBUSH\AMBUSH.ICE#

    include "../scripts/dtypes.ice"
    include "../scripts/dlightning.ice"

    constant enum VOICE_OVERS
    {
        VO_ADARAINTRO,
        VO_MULTIWARD,
        VO_RESCUEDSPRITE,
        VO_DEADFACTORY,
        VO_AMBUSH,
        VO_LEAVECITY,
        VO_DARKWARD,
        VO_MANDEKTAUNT,
        VO_FINDKEY,
        VO_GRABKEY,
        VO_WARDGONE,
        VO_LEVELWIN,
        VO_LEVELLOSE
    }

//  fVO_Player( VO_LEVELLOSE)

    create xyz dStartLoc
    create xyz dEndLoc
    create xyz gTempLoc
    create float dStartOffset
    create float dEndOffset



// Variables Daryl needs
// Daryl: I do? :-)
    create ObjHandle gModelHandle
    create ObjHandle gCave1TroopAHandle
    create ObjHandle gCave1TroopBHandle
    create ObjHandle gCave1TroopCHandle
    create ObjHandle gCave2TroopAHandle
    create ObjHandle gCave2TroopBHandle
    create ObjHandle gCave2TroopCHandle
    create ObjHandle gCave3TroopAHandle
    create ObjHandle gCave3TroopBHandle
    create ObjHandle gCave3TroopCHandle
    create ObjHandle gCave4TroopAHandle
    create ObjHandle gCave4TroopBHandle
    create ObjHandle gCave4TroopCHandle
    create ObjHandle gCave5TroopAHandle
    create ObjHandle gCave5TroopBHandle
    create ObjHandle gCave5TroopCHandle
    create ObjHandle gDocksTroopAHandle
    create ObjHandle gDocksTroopBHandle
    create ObjHandle gDocksTroopCHandle
    create ObjHandle gGalleonHandle
    create ObjHandle gEarthWardGeneratorHandle

    create integer gIsMultiWardAlive = FALSE
    create integer gIsPlantAlive = TRUE
    create integer gIsKeyAlive = FALSE
    create integer gGateVOs = FALSE
    create integer gAmbushVOs = FALSE
    create integer gIsStaticGalleonAlive = FALSE
    create integer gCave1Start = FALSE
    create integer gCave2Start = FALSE
    create integer gCave3Start = FALSE
    create integer gCave4Start = FALSE
    create integer gCave5Start = FALSE
    create integer gCave1 = 12
    create integer gCave2 = 12
    create integer gCave3 = 12
    create integer gCave4 = 12
    create integer gCave5 = 12
    create integer gDocks = 10
    create integer gNewTroop
    create integer gAmbushCount
    create integer gBuildingCount
    create integer gPreKeyCount
    create integer gKeyCount
    create integer gGemCount
    create integer gExitMarker
    create integer gGotUpgrade = FALSE
    create integer gEndGame = FALSE
    create integer gWagonCount

    create ObjHandle gDarkWardAnchorHandle
    create ObjHandle gDarkWagonHandle
    create ObjHandle gAdaraHandle
    create ObjHandle gSprite1Handle
    create ObjHandle gExitRockHandle

    create xyz gLocation
    create xyz gOrientation = (0, 0, 0)
    create xyz tempLoc
    create xyz gEmergencyKeyLoc = (106.4, 56.6, -3)

    create float gDragonDistance
    create xyz gGemLoc

    create ObjHandle gDarkKeyHandle

    
    //---------------------------------------------------
    // Function declarations
    //---------------------------------------------------

    FUNCTION fInitModels()
    {
            //Main Gate

        fDWardCreatePOI(EARTH, "FireWardGeneratorPoi", 9.0, 15.0)
        set gEarthWardGeneratorHandle = dModelHandle

        GetPoiLoc("OrcTowerOctid4x2600Poi", gTempLoc)
        fDShrineCreateLoc(gTempLoc)

        AddObjectPOISnap(gModelHandle, "MountedArcher", "GateDefender1Poi")
        AddObjectPOISnap(gModelHandle, "MountedArcher", "GateDefender2Poi")
        AddObjectPOISnap(gModelHandle, "MountedArcher", "GateDefender3Poi")

        AddObjectPOISnap(gModelHandle, "Archer", "DistrictADefender1Poi")
        AddObjectPOISnap(gModelHandle, "Archer", "DistrictADefender2Poi")
        AddObjectPOISnap(gModelHandle, "Archer", "DistrictADefender3Poi")
        AddObjectPOISnap(gModelHandle, "Archer", "DistrictADefender4Poi")
        AddObjectPOISnap(gModelHandle, "Archer", "DistrictADefender5Poi")
        AddObjectPOISnap(gModelHandle, "Archer", "DistrictADefender6Poi")
    
        AddObjectPOISnap(gModelHandle, "MonkEarthM", "DistrictBDefender1Poi")
        AddObjectPOISnap(gModelHandle, "Archer", "DistrictBDefender2Poi")
        AddObjectPOISnap(gModelHandle, "MonkEarthM", "DistrictBDefender3Poi")
        AddObjectPOISnap(gModelHandle, "Archer", "DistrictBDefender4Poi")
        AddObjectPOISnap(gModelHandle, "Archer", "DistrictBDefender5Poi")
            
        AddObjectPOISnap(gModelHandle, "MountedArcher", "CavalryGroup1Poi")
        AddObjectPOISnap(gModelHandle, "MountedArcher", "CavalryGroup2Poi")
        AddObjectPOISnap(gModelHandle, "MountedArcher", "CavalryGroup3Poi")

        AddObjectPOISnap(gModelHandle, "Skirmisher", "PlantDefender1Poi")
        AddObjectPOISnap(gModelHandle, "Skirmisher", "PlantDefender2Poi")
        AddObjectPOISnap(gModelHandle, "Skirmisher", "PlantDefender3Poi")
        AddObjectPOISnap(gModelHandle, "Skirmisher", "PlantDefender4Poi")
        AddObjectPOISnap(gModelHandle, "Skirmisher", "PlantDefender5Poi")
        AddObjectPOISnap(gModelHandle, "Skirmisher", "PlantDefender6Poi")
        AddObjectPOISnap(gModelHandle, "Skirmisher", "PlantDefender7Poi")
        AddObjectPOISnap(gModelHandle, "Skirmisher", "PlantDefender8Poi")

        AddObjectPOI(gModelHandle, "KeepOctStone", "SpriteBuildingPoi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtBonusSprite)

        AddObjectPOI(gModelHandle, "HouseLowerClassB", "MoreTown1Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseLowerClassB", "MoreTown2Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseLowerClassB", "MoreTown3Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseLowerClassB", "MoreTown4Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "Tavern", "MoreTown5Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)

        AddObjectPOI(gModelHandle, "Tavern", "Tavern1Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "Tavern", "Tavern2Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "Tavern", "Tavern3Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "Tavern", "Tavern4Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "Tavern", "Tavern5Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)

        AddObjectPOI(gModelHandle, "KeepOctStone", "GreatHallid52x106Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)

        AddObjectPOI(gModelHandle, "KeepOctStone", "GreatHallid53x280Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)

        AddObjectPOI(gModelHandle, "HouseLowerClassB", "HouseLowerClassBid54x830Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseCountryA", "HouseLowerClassBid55x840Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseLowerClassB", "HouseLowerClassBid56x870Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseLowerClassB", "HouseLowerClassBid57x830Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseCountryA", "HouseLowerClassBid58x850Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseLowerClassB", "HouseLowerClassBid59x870Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseLowerClassB", "HouseLowerClassBid60x830Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseLowerClassB", "HouseLowerClassBid61x850Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseCountryA", "HouseLowerClassBid62x760Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseCountryA", "HouseLowerClassBid63x780Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseLowerClassB", "HouseLowerClassBid64x760Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseLowerClassB", "HouseLowerClassBid65x780Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseLowerClassB", "HouseLowerClassBid66x760Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseLowerClassB", "HouseLowerClassBid67x780Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseLowerClassB", "HouseLowerClassBid68x220Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseLowerClassB", "HouseLowerClassBid69x240Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseCountryA", "HouseLowerClassBid70x220Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseCountryA", "HouseLowerClassBid71x230Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseLowerClassB", "HouseLowerClassBid72x210Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseLowerClassB", "HouseLowerClassBid73x240Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseLowerClassB", "HouseLowerClassBid74x220Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseLowerClassB", "HouseLowerClassBid75x230Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseLowerClassB", "HouseLowerClassBid76x260Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseLowerClassB", "HouseLowerClassBid77x260Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOISnap(gModelHandle, "Catapult", "Catapultid87x610Poi")
        AddObjectPOISnap(gModelHandle, "Catapult", "Catapultid88x660Poi")
        AddObjectPOISnap(gModelHandle, "Catapult", "Catapultid89x720Poi")
        AddObjectPOISnap(gModelHandle, "Catapult", "Catapultid90x280Poi")
        AddObjectPOISnap(gModelHandle, "Catapult", "Catapultid91x330Poi")

        AddObjectPOI(gModelHandle, "HouseLowerClassB", "HouseLowerClassBid1x8100Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseLowerClassB", "HouseLowerClassBid2x7900Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseLowerClassB", "HouseLowerClassBid3x7700Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        
        AddObjectPOISnap(gModelHandle, "MonkEarthM", "Ballistaid5x7500Poi")
        AddObjectPOISnap(gModelHandle, "Archer", "Ballistaid6x7300Poi")
        AddObjectPOISnap(gModelHandle, "MonkEarthM", "Ballistaid7x7100Poi")
        AddObjectPOISnap(gModelHandle, "Archer", "Ballistaid8x7000Poi")
        AddObjectPOISnap(gModelHandle, "Windmill", "Windmillid49x570Poi")
        AddObjectPOISnap(gModelHandle, "Windmill", "Windmillid50x610Poi")
        AddObjectPOISnap(gModelHandle, "Windmill", "Windmillid51x630Poi")

        AddObjectPOISnap(gModelHandle, "Catapult", "Catapult1Poi")
        AddObjectPOISnap(gModelHandle, "Catapult", "Catapult2Poi")
        AddObjectPOISnap(gModelHandle, "Catapult", "Catapult3Poi")
        AddObjectPOISnap(gModelHandle, "Catapult", "Catapult4Poi")
        AddObjectPOISnap(gModelHandle, "Catapult", "Catapult5Poi")
        AddObjectPOISnap(gModelHandle, "Catapult", "Catapult6Poi")
        AddObjectPOISnap(gModelHandle, "Catapult", "Catapult7Poi")
        AddObjectPOISnap(gModelHandle, "MonkEarthM", "EarthMonk1Poi")
        AddObjectPOISnap(gModelHandle, "MonkEarthM", "EarthMonk2Poi")
        AddObjectPOISnap(gModelHandle, "Archer", "EarthMonk3Poi")
        AddObjectPOISnap(gModelHandle, "MonkEarthM", "EarthMonk4Poi")
        AddObjectPOISnap(gModelHandle, "MonkEarthM", "EarthMonk5Poi")
        AddObjectPOISnap(gModelHandle, "Archer", "EarthMonk6Poi")
        AddObjectPOISnap(gModelHandle, "MonkEarthM", "EarthMonk7Poi")
        AddObjectPOISnap(gModelHandle, "MonkEarthM", "EarthMonk8Poi")
        AddObjectPOISnap(gModelHandle, "Archer", "EarthMonk9Poi")
        AddObjectPOISnap(gModelHandle, "MonkEarthM", "EarthMonk10Poi")

        AddObjectPOI(gModelHandle, "HouseMiddleClassA", "MidClass1Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseMiddleClassA", "MidClass2Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseMiddleClassA", "MidClass3Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseMiddleClassA", "MidClass4Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        AddObjectPOI(gModelHandle, "HouseMiddleClassA", "MidClass5Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadBuilding)
        
        AddObjectPOI(gModelHandle, "SuperGalleonDamaged", "StaticGalleon1Poi")
        SetHitPOInts(gModelHandle, 2000)
        SetDragonSight(gModelHandle, 0)
    }

    FUNCTION fVO_Player (integer whichVO)
    {
        select whichVO
            case VO_ADARAINTRO
            BEGIN
                VoiceOverPlay ( VO_13ad096 )
//              IceDisplay( "The Orcs are hurting, but they've got one Zeenium factory left.  I think it's time you paid them a visit. \n")
            END
            case VO_MULTIWARD
            BEGIN
                VoiceOverPlay ( VO_13ad097 )
//              IceDisplay( "The Orcs just put up Wards all around you.  Something doesn't feel right. \n")
            END
            case VO_RESCUEDSPRITE
            BEGIN
                VoiceOverPlay ( VO_grs005 )
//              IceDisplay( "Thank you for rescuing me. \n")
            END
            case VO_DEADFACTORY
            BEGIN
                VoiceOverPlay ( VO_gnad145 )
//              IceDisplay( "Good job. \n")
            END
            case VO_AMBUSH
            BEGIN
                VoiceOverPlay ( VO_13mk007 )
//              IceDisplay( "Surprise, lizard.  You shall not be underestimated this time. \n")
            END
            case VO_LEAVECITY
            BEGIN
                VoiceOverPlay ( VO_13ad098 )
//              IceDisplay( "It's an ambush!  Orcs everywhere!  You've got to get out of here! . \n")
            END
            case VO_DARKWARD
            BEGIN
                VoiceOverPlay ( VO_13ad099 )
//              IceDisplay( "They sealed the gate!  \n")
            END
            case VO_MANDEKTAUNT
            BEGIN
                VoiceOverPlay ( VO_13mk008 )
//              IceDisplay( "Ha, ha, ha, ha...ha, ha ha ha, ha ha.  Numb miss...No mistakes this time! \n")
            END
            case VO_FINDKEY
            BEGIN
                VoiceOverPlay ( VO_13ad100 )
//              IceDisplay( "There's got to be a Dark Key somewhere in this city; Orcs always keep one around.  Keep blowing up buildings until you find it! \n")
            END
            case VO_GRABKEY
            BEGIN
                VoiceOverPlay ( VO_13ad101 )
//              IceDisplay( "There it is, grab it and get out of here! \n")
            END
            case VO_WARDGONE
            BEGIN
                if ( gGotUpgrade == TRUE ) then
                BEGIN
                    VoiceOverPlay ( VO_GNAD150 )
//                  IceDisplay( "Fly into the glowing sphere... \n")
                END
                else
                BEGIN
                    VoiceOverPlay ( VO_gnad135 )
//                  IceDisplay( "Well Done! \n")
                END
            END
            case VO_LEVELWIN
            BEGIN
                VoiceOverPlay ( VO_13ad102 )
//              IceDisplay( "Cael, I love what you've done with the place, but we barely escaped the ambush and Mandek's troops are right behind us.  Why do I get the feeling you're enjoying yourself? \n")
            END
            case VO_LEVELLOSE
            BEGIN
                VoiceOverPlay ( VO_13mk009 )
//              IceDisplay( "Tonight we feast!  Roast Dragon for all! \n")
            END
            default
            BEGIN
                EXIT
//              IceDisplay( "Why am I here?  What is the meaning of Ice? \n")
            END

        EXIT
    }

    FUNCTION fCave1Spawn()
    {
        set gNewTroop = Random(3)
        if (gNewTroop == 0) then
        BEGIN
//          IceDisplay ("..................Cave1 Mounted Archer!!! \n")
            AddObjectPOISnap(gCave1TroopAHandle, "ArcherMounted", "Cave1SpawnPoi")
            SetBehaviorPatrol(gCave1TroopAHandle, "Cave1Path", PATH_ONEWAY_FORWARD)
            AssignTeamID(gCave1TroopAHandle, 0101)
            set gCave1 = gCave1 - 1
        END
        else if (gNewTroop == 1) then
        BEGIN
//          IceDisplay ("..................Cave1 Wizard!!! \n")
            AddObjectPOI(gCave1TroopBHandle, "MonkWaterA", "Cave1SpawnPoi")
            fAdjustHeightUp( gCave1TroopBHandle, 1.7 )
            //SetObjIceHandler(gCave1TroopBHandle, ICEOBJHANDLER_DEATH, evtCave1Dead)
            SetBehaviorPatrol(gCave1TroopBHandle, "Cave1Path", PATH_ONEWAY_FORWARD_NEVERSLEEP)
            AssignTeamID(gCave1TroopBHandle, 0103)
            set gCave1 = gCave1 - 3
        END
        ELSE //if (gNewTroop == 2) then
        BEGIN
//          IceDisplay ("..................Cave1 War Machine!!! \n")
            AddObjectPOISnap(gCave1TroopCHandle, "Catapult", "Cave1SpawnPoi")
//          AddObjectPOI(gCave1TroopCHandle, "Ballista", "Cave1SpawnPoi")
            //SetObjIceHandler(gCave1TroopCHandle, ICEOBJHANDLER_DEATH, evtCave1Dead)
            SetBehaviorPatrol(gCave1TroopCHandle, "Cave1Path", PATH_ONEWAY_FORWARD_NEVERSLEEP)
            AssignTeamID(gCave1TroopCHandle, 0103)
            set gCave1 = gCave1 - 3
        END

        EXIT
    }

    FUNCTION fCave2Spawn()
    {
        set gNewTroop = Random(3)
        if (gNewTroop == 0) then
        BEGIN
//      IceDisplay ("..................Cave2 Mounted Archer!!! \n")
            AddObjectPOISnap(gCave2TroopAHandle, "ArcherMounted", "Cave2SpawnPoi")
            //SetObjIceHandler(gCave2TroopAHandle, ICEOBJHANDLER_DEATH, evtCave2Dead)
            SetBehaviorPatrol(gCave2TroopAHandle, "Cave2Path", PATH_ONEWAY_FORWARD)
            AssignTeamID(gCave2TroopAHandle, 0201)
            set gCave2 = gCave2 - 1
        END
        else if (gNewTroop == 1) then
        BEGIN
//          IceDisplay ("..................Cave2 Wizard!!! \n")
            AddObjectPOISnap(gCave2TroopBHandle, "MonkAirM", "Cave2SpawnPoi")
            //SetObjIceHandler(gCave2TroopBHandle, ICEOBJHANDLER_DEATH, evtCave2Dead)
            SetBehaviorPatrol(gCave2TroopBHandle, "Cave2Path", PATH_ONEWAY_FORWARD_NEVERSLEEP)
            AssignTeamID(gCave2TroopBHandle, 0202)
            set gCave2 = gCave2 - 2
        END
        ELSE //if (gNewTroop == 2) then
        BEGIN
//          IceDisplay ("..................Cave2 War Machine!!! \n")
            AddObjectPOISnap(gCave2TroopCHandle, "Catapult", "Cave2SpawnPoi")
            //SetObjIceHandler(gCave2TroopCHandle, ICEOBJHANDLER_DEATH, evtCave2Dead)
            SetBehaviorPatrol(gCave2TroopCHandle, "Cave2Path", PATH_ONEWAY_FORWARD_NEVERSLEEP)
            AssignTeamID(gCave2TroopCHandle, 0203)
            set gCave2 = gCave2 - 3
        END

        EXIT
    }

    FUNCTION fCave3Spawn()
    {
        set gNewTroop = Random(3)
        if (gNewTroop == 0) then
        BEGIN
//          IceDisplay ("..................Cave3 Mounted Archer!!! \n")
            AddObjectPOISnap(gCave3TroopAHandle, "ArcherMounted", "Cave3SpawnPoi")
            //SetObjIceHandler(gCave3TroopAHandle, ICEOBJHANDLER_DEATH, evtCave3Dead)
            SetBehaviorPatrol(gCave3TroopAHandle, "Cave3Path", PATH_ONEWAY_FORWARD)
            AssignTeamID(gCave3TroopAHandle, 0301)
            set gCave3 = gCave3 - 1
        END
        else if (gNewTroop == 1) then
        BEGIN
//          IceDisplay ("..................Cave3 Wizard!!! \n")
            AddObjectPOISnap(gCave3TroopBHandle, "ArcherMounted", "Cave3SpawnPoi")
            //SetObjIceHandler(gCave3TroopBHandle, ICEOBJHANDLER_DEATH, evtCave3Dead)
            SetBehaviorPatrol(gCave3TroopBHandle, "Cave3Path", PATH_ONEWAY_FORWARD_NEVERSLEEP)
            AssignTeamID(gCave3TroopBHandle, 0302)
            set gCave3 = gCave3 - 2
        END
        ELSE //if (gNewTroop == 2) then
        BEGIN
//          IceDisplay ("..................Cave3 War Machine!!! \n")
            AddObjectPOISnap(gCave3TroopCHandle, "Catapult", "Cave3SpawnPoi")
            //SetObjIceHandler(gCave3TroopCHandle, ICEOBJHANDLER_DEATH, evtCave3Dead)
            SetBehaviorPatrol(gCave3TroopCHandle, "Cave3Path", PATH_ONEWAY_FORWARD_NEVERSLEEP)
            AssignTeamID(gCave3TroopCHandle, 0303)
            set gCave3 = gCave3 - 3
        END

        EXIT
    }

    FUNCTION fCave4Spawn()
    {
        set gNewTroop = Random(3)
        if (gNewTroop == 0) then
        BEGIN
//          IceDisplay ("..................Cave4 Mounted Archer!!! \n")
            AddObjectPOISnap(gCave4TroopAHandle, "ArcherMounted", "Cave4SpawnPoi")
            //SetObjIceHandler(gCave4TroopAHandle, ICEOBJHANDLER_DEATH, evtCave4Dead)
            SetBehaviorPatrol(gCave4TroopAHandle, "Cave4Path", PATH_ONEWAY_FORWARD)
            AssignTeamID(gCave4TroopAHandle, 0401)
            set gCave4 = gCave4 - 1
        END
        else if (gNewTroop == 1) then
        BEGIN
//          IceDisplay ("..................Cave4 Wizard!!! \n")
            AddObjectPOI(gCave4TroopBHandle, "MonkWaterA", "Cave4SpawnPoi")
            fAdjustHeightUp( gCave4TroopBHandle, 1.7 )
            //SetObjIceHandler(gCave4TroopBHandle, ICEOBJHANDLER_DEATH, evtCave4Dead)
            SetBehaviorPatrol(gCave4TroopBHandle, "Cave4Path", PATH_ONEWAY_FORWARD_NEVERSLEEP)
            AssignTeamID(gCave4TroopBHandle, 0403)
            set gCave4 = gCave4 - 3
        END
        ELSE //if (gNewTroop == 2) then
        BEGIN
//          IceDisplay ("..................Cave4 War Machine!!! \n")
            AddObjectPOISnap(gCave4TroopCHandle, "Catapult", "Cave4SpawnPoi")
//          AddObjectPOI(gCave4TroopCHandle, "Ballista", "Cave4SpawnPoi")
            //SetObjIceHandler(gCave4TroopCHandle, ICEOBJHANDLER_DEATH, evtCave4Dead)
            SetBehaviorPatrol(gCave4TroopCHandle, "Cave4Path", PATH_ONEWAY_FORWARD_NEVERSLEEP)
            AssignTeamID(gCave4TroopCHandle, 0403)
            set gCave4 = gCave4 - 3
        END

        EXIT
    }

    FUNCTION fCave5Spawn()
    {
        set gNewTroop = Random(3)
        if (gNewTroop == 0) then
        BEGIN
//          IceDisplay ("..................Cave5 Mounted Archer!!! \n")
            AddObjectPOISnap(gCave5TroopAHandle, "ArcherMounted", "Cave5SpawnPoi")
            //SetObjIceHandler(gCave5TroopAHandle, ICEOBJHANDLER_DEATH, evtCave5Dead)
            SetBehaviorPatrol(gCave5TroopAHandle, "Cave5Path", PATH_ONEWAY_FORWARD)
            AssignTeamID(gCave5TroopAHandle, 0501)
            set gCave5 = gCave5 - 1
        END
        else if (gNewTroop == 1) then
        BEGIN
//          IceDisplay ("..................Cave5 Wizard!!! \n")
            AddObjectPOISnap(gCave5TroopBHandle, "MonkAirM", "Cave5SpawnPoi")
            //SetObjIceHandler(gCave5TroopBHandle, ICEOBJHANDLER_DEATH, evtCave5Dead)
            SetBehaviorPatrol(gCave5TroopBHandle, "Cave5Path", PATH_ONEWAY_FORWARD_NEVERSLEEP)
            AssignTeamID(gCave5TroopBHandle, 0502)
            set gCave5 = gCave5 - 2
        END
        ELSE //if (gNewTroop == 2) then
        BEGIN
//          IceDisplay ("..................Cave5 War Machine!!! \n")
            AddObjectPOISnap(gCave5TroopCHandle, "Catapult", "Cave5SpawnPoi")
            //SetObjIceHandler(gCave5TroopCHandle, ICEOBJHANDLER_DEATH, evtCave5Dead)
            SetBehaviorPatrol(gCave5TroopCHandle, "Cave5Path", PATH_ONEWAY_FORWARD_NEVERSLEEP)
            AssignTeamID(gCave5TroopCHandle, 0503)
            set gCave5 = gCave5 - 3
        END

        EXIT
    }

    FUNCTION fDocksSpawn()
    {
        set gNewTroop = Random(2)
        if (gNewTroop == 0) then
        BEGIN
//          IceDisplay ("..................Docks Caravel!!! \n")
            AddObjectPOI(gDocksTroopAHandle, "Caravel", "OceanSpawnPoi")
            //SetObjIceHandler(gDocksTroopAHandle, ICEOBJHANDLER_DEATH, evtDocksDead)
            SetBehaviorPatrol(gDocksTroopAHandle, "DocksPath", PATH_ONEWAY_FORWARD_NEVERSLEEP)
            AssignTeamID(gDocksTroopAHandle, 0602)
            set gDocks = gDocks - 2
        END
        ELSE //if (gNewTroop == 1) then
        BEGIN
//          IceDisplay ("..................Docks Galleon!!! \n")
            AddObjectPOI(gDocksTroopBHandle, "Galleon", "OceanSpawnPoi")
            //SetObjIceHandler(gDocksTroopBHandle, ICEOBJHANDLER_DEATH, evtDocksDead)
            SetBehaviorPatrol(gDocksTroopBHandle, "DocksPath", PATH_ONEWAY_FORWARD_NEVERSLEEP)
            AssignTeamID(gDocksTroopBHandle, 0603)
            set gDocks = gDocks - 3
        END

        EXIT
    }


    // this function takes the point at which you want the lightning to start...
    // ...and the point at which you want the lightning to strike...
    // ...then offsets them within the range you provide via dStartOffset and dEndOffset
    FUNCTION fSetLightningLocs()
    {
        create integer dTemp

        set dTemp = Random(2)
        if (dTemp == 0) then
        BEGIN
            set dStartLoc^x = dStartLoc^x + dStartOffset
        END
        ELSE //if (dTemp == 1) then
        BEGIN
            set dStartLoc^x = dStartLoc^x - dStartOffset
        END

        set dTemp = Random(2)
        if (dTemp == 0) then
        BEGIN
            set dStartLoc^y = dStartLoc^y + dStartOffset
        END
        ELSE //if (dTemp == 1) then
        BEGIN
            set dStartLoc^y = dStartLoc^y - dStartOffset
        END

        set dTemp = Random(2)
        if (dTemp == 0) then
        BEGIN
            set dEndLoc^x = dEndLoc^x + dEndOffset
        END
        ELSE //if (dTemp == 1) then
        BEGIN
            set dEndLoc^x = dEndLoc^x - dEndOffset
        END

        set dTemp = Random(2)
        if (dTemp == 0) then
        BEGIN
            set dEndLoc^y = dEndLoc^y + dEndOffset
        END
        ELSE //if (dTemp == 1) then
        BEGIN
            set dEndLoc^y = dEndLoc^y - dEndOffset
        END

        EXIT
    }

// // // // // // // // // // // //
//
// // // // // // // // // // // //
//  Events begin here
// // // // // // // // // // // //
//
// // // // // // // // // // // //
    ONCE ANYOF(initializeScripts) 
    (void void)
    {
//      IceDisplay ("..................initializeScripts \n")
        fInitDaryl(5, AMBUSH)
                    
        fInitModels()

        //Main Gate

        HudRadarEnable (DRAGON1)

        AddObjectPOI(gModelHandle, "ZeeniumFactory", "ProcessingPlantPoi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadPlant)
        SetHitPOInts(gModelHandle, 3300)
        fDRadarObj (PRIMARY, gModelHandle)

        Trigger(evtEricsLightning)
        Trigger(evtWagons)
 
    }

    ONCE ANYOF( evtLevelBegin )
    {
        AddObjectPoi( gAdaraHandle, "Adara", "Dragon1_Start") // Adara Created
        TriggerPulse(500, evtSpriteFollowCael, gAdaraHandle)
    }

    ANYOF (evtWagons)
    (void void)
    {
        if (gWagonCount < 3) then
        BEGIN
            AddObjectPOISnap(gModelHandle, "WagonStandard", "Cave4SpawnPoi")
            SetBehaviorPatrol(gModelHandle, "WagonPath", PATH_ONEWAY_FORWARD_NEVERSLEEP)
            SetMovementSpeed(gModelHandle, 0.8)
            SetDragonSight(gModelHandle, 0)
            SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtRandomGem)
            SetObjIceHandler(gModelHandle, ICEOBJHANDLER_PAD, evtWagonPad)
            set gWagonCount = gWagonCount + 1
            TriggerDelay (3*SECOND, evtWagons)
        END
    }

    ANYOF(evtWagonPad)
    (integer whoGUID string padName)
    {
        create objhandle who
        GUIDtoObjHandle(whoGUID, who)

        if (StringsEqual(padName,"WagonPad") == TRUE) then
        BEGIN   
            RemoveObject (who)
            set gWagonCount = gWagonCount - 1
            if (gWagonCount == 0) then
            BEGIN
                TriggerDelay (10*SECOND, evtWagons)
            END
        END
    }

    ANYOF(evtRandomGem)
    (integer whoGUID integer killerGUID)
    {
        create objhandle who
            
        if (gGemCount < 20) then
        BEGIN
            GUIDtoObjHandle(whoGUID, who)
            GetObjLocation (who, gTempLoc)
            set gTempLoc^z = gTempLoc^z + 0.6

            fDGemCreateLoc (Random(4), gTempLoc)    // DGems.ice has changed to allow all attempts to create gems
            set gGemCount = gGemCount + 1
        END

        set gWagonCount = gWagonCount - 1 
        if (gWagonCount == 0) then
        BEGIN
            TriggerDelay (15*SECOND, evtWagons)
        END
    }

    ANYOF(evtGemDied)
    (void void)
    {
        set gGemCount = gGemCount - 1
    } 

    ONCE ANYOF(evtBonusSprite) 
    (integer whoGUID integer killerGUID)
    {
        create objhandle who
        GUIDtoObjHandle(whoGUID, who)

        GetObjLocation (who, gTempLoc)
        AddObjectLOC(gSprite1Handle, "SpriteFire", gTempLoc, gOrientation)
        TriggerPulse( 1000, evtSpriteFlutter, gSprite1Handle )
        TriggerDelay(10*SECOND, evtKillSprites)

//      IceDisplay ("............Thank you for freeing me!!! \n")
        fVO_Player( VO_RESCUEDSPRITE)
        if (fDCanDragonUpgrade() >= 0) then
        BEGIN
//          IceDisplay ("............Upgrades!!! \n")
            set gGotUpgrade = TRUE
        END
        ELSE if (fDCanDragonUpgrade() < 0) then
        BEGIN
//          IceDisplay ("............Cows!!! \n")
            AddObjectPOISnap(gModelHandle, "Cow", "Cow1Poi")
            AddObjectPOISnap(gModelHandle, "Cow", "Cow2Poi")
            AddObjectPOISnap(gModelHandle, "Cow", "Cow3Poi")
            AddObjectPOISnap(gModelHandle, "Cow", "Cow4Poi")
            AddObjectPOISnap(gModelHandle, "Cow", "Cow5Poi")
        END
    }

    ANYOF( evtSpriteFlutter )
    ( ObjHandle who )
    {
        create xyz newLoc

        set newLoc^x = gTempLoc^x + float(Random(5)) - float(Random(5))
        set newLoc^y = gTempLoc^y + float(Random(5)) - float(Random(5))
        set newLoc^z = gTempLoc^z + float(Random(5)) - float(Random(5))

        SetBehaviorGoTo( who, newLoc )
    }

    ONCE ANYOF(evtKillSprites)
    (void void)
    {
        RemoveObject(gSprite1Handle)
    }


    ONCE ANYOF(evtDeadPlant)
    (integer whoGUID integer killerGUID)
    {
        create xyz tempLoc
        create integer tempInt
        create objhandle who
        GUIDtoObjHandle(whoGUID, who)

        GetPoiLoc("Bonanza1Poi", gTempLoc)
        set gTempLoc^z = gTempLoc^z + 1.0
        fDGemCreateLoc(Random(4), gTempLoc)
        GetPoiLoc("Bonanza2Poi", gTempLoc)
        set gTempLoc^z = gTempLoc^z + 1.0
        fDGemCreateLoc(Random(4), gTempLoc)
        GetPoiLoc("Bonanza3Poi", gTempLoc)
        set gTempLoc^z = gTempLoc^z + 1.0
        fDGemCreateLoc(Random(4), gTempLoc)

        KillObject (gEarthWardGeneratorHandle)
        fVO_Player( VO_DEADFACTORY )
        AddObjectPoi(gExitRockHandle, "BoulderMedA", "AdaraPoi")
        set gExitMarker = fDRadarObj( PRIMARY, gExitRockHandle)
        set gIsPlantAlive = FALSE
        AddObjectPOISnap(gDarkWagonHandle, "WagonStandard", "DarkWardGeneratorPoi")
        SetHitPOInts(gDarkWagonHandle, 5000)
        Trigger(evtAmbush)
        TriggerDelay(8*SECOND, evtAmbush)
        TriggerDelay(16*SECOND, evtAmbush)
    }

    ANYOF(evtAmbush)
    (void void)
    {
//      IceDisplay ("..................Wave!!! \n")
            
        fCave1Spawn()
        AddObjectPOISnap(gModelHandle, "Archer", "Cave1SpawnPoi")
        SetBehaviorPatrol(gModelHandle, "Cave1Path", PATH_ONEWAY_FORWARD_NEVERSLEEP)
        AddObjectPOISnap(gModelHandle, "ArcherMounted", "Cave1SpawnPoi")
        SetBehaviorPatrol(gModelHandle, "Cave1Path", PATH_ONEWAY_FORWARD_NEVERSLEEP)
        fCave2Spawn()
        AddObjectPOISnap(gModelHandle, "Archer", "Cave2SpawnPoi")
        SetBehaviorPatrol(gModelHandle, "Cave2Path", PATH_ONEWAY_FORWARD_NEVERSLEEP)
        AddObjectPOISnap(gModelHandle, "ArcherMounted", "Cave2SpawnPoi")
        SetBehaviorPatrol(gModelHandle, "Cave2Path", PATH_ONEWAY_FORWARD_NEVERSLEEP)
        fCave3Spawn()
        AddObjectPOISnap(gModelHandle, "ArcherMounted", "Cave3SpawnPoi")
        SetBehaviorPatrol(gModelHandle, "Cave3Path", PATH_ONEWAY_FORWARD_NEVERSLEEP)
        fCave4Spawn()
        AddObjectPOISnap(gModelHandle, "Archer", "Cave4SpawnPoi")
        SetBehaviorPatrol(gModelHandle, "Cave4Path", PATH_ONEWAY_FORWARD_NEVERSLEEP)
        fCave5Spawn()
        AddObjectPOISnap(gModelHandle, "ArcherMounted", "Cave5SpawnPoi")
        SetBehaviorPatrol(gModelHandle, "Cave5Path", PATH_ONEWAY_FORWARD_NEVERSLEEP)
        fDocksSpawn()
    }


    ANYOF(evtDeadBuilding)
    (integer whoGUID integer killerGUID)
    {
        create objhandle who
        GUIDtoObjHandle(whoGUID, who)

        set gBuildingCount = gBuildingCount + 1
//      IceDisplay ("..................DeadBuilding \n")
        if ((gGateVOs == TRUE) AND (gIsKeyAlive == FALSE)) then
        BEGIN
            set gPreKeyCount = gPreKeyCount + 1
            set gKeyCount = Random(38)
            if (((gKeyCount <= gBuildingCount) AND (gPreKeyCount > 4)) OR (gBuildingCount >= 41)) then //if keycount is within the range of buildingcount
            BEGIN
                set gIsKeyAlive = TRUE
                GetObjLocation (who, gGemLoc)
                set gGemLoc^z = gGemLoc^z + 1.0
                AddObjectLOC(gDarkKeyHandle, "DarkKey", gGemLoc, gOrientation)
                fDRadarObj( PRIMARY, gDarkKeyHandle)
                MakeWardKey(gDarkKeyHandle)
                fVO_Player( VO_GRABKEY)
                //fAdaraVO( VO_GRABKEY, 5000 )
            END
        END
    }

    ONCE ANYOF (evtItemAquired) 
    (integer playerNum integer itemType)
    {
        set gExitMarker = fDRadarObj( PRIMARY, gExitRockHandle)
        if (gGotUpgrade == TRUE) then
        BEGIN
            fDUpgradeCreate()
        END
    }

    ONCE ANYOF (evtItemReleased) 
    (integer playerNum integer itemType)
    {
        UnTrigger(evtSpriteFollowCael)
        GetPoiLoc( "AdaraPoi", gTempLoc )
        TriggerPulse( 1000, evtSpriteFlutter, gAdaraHandle )
        SetNeverSleepFlag( gAdaraHandle )
        fVO_Player( VO_WARDGONE)
    }


    ANYOF(evtDragonPad)
    (integer whoGUID string padName)
    {
        create objhandle who
        GUIDtoObjHandle(whoGUID, who)

        if ((StringsEqual(padName,"MultiWardPad") == TRUE) AND (gIsMultiWardAlive == FALSE)) then
        BEGIN
            fDWardCreatePOI(EARTH, "MultiWardPoi", 12.0, 19.0)
            fDWardCreatePOI(FIRE, "MultiWardPoi", 10.0, 19.0)
            set gIsMultiWardAlive = TRUE
            fVO_Player( VO_MULTIWARD)
            //fAdaraVO( VO_MULTIWARD, 10000 )
        END
        ELSE if ((StringsEqual(padName,"AmbushVOPad") == TRUE) AND (gIsPlantAlive == FALSE) AND (gAmbushVOs == FALSE))  then
        BEGIN
            fVO_Player( VO_AMBUSH)
            fVO_Player( VO_LEAVECITY)
            //fAdaraVO( VO_LEAVECITY, 10000 )
            set gAmbushVOs = TRUE
        END
        ELSE if ((StringsEqual(padName,"MainGatePad") == TRUE) AND (gGateVOs == FALSE))  then
        BEGIN
            if (gIsPlantAlive == FALSE) then
            BEGIN
                KillObject (gDarkWagonHandle)
                fDWardCreatePOI(DARK, "DarkWardGeneratorPoi", 10.0, 14.0)
                set gExitMarker = fDRadarObj( SECONDARY, gExitRockHandle)
                fVO_Player( VO_DARKWARD)
                //fAdaraVO( VO_DARKWARD, 14000 )
                fVO_Player( VO_MANDEKTAUNT)
                fVO_Player( VO_FINDKEY)
                set gEndGame = TRUE
                set gGateVOs = TRUE
                if (gBuildingCount == 44) then
                BEGIN
                    AddObjectLOC(gDarkKeyHandle, "DarkKey", gEmergencyKeyLoc, gOrientation)
                    SetObjIceHandler(gDarkKeyHandle, ICEOBJHANDLER_DEATH, evtDarkKey)
                    fDRadarObj( PRIMARY, gDarkKeyHandle)
                    MakeWardKey(gDarkKeyHandle)
                END
            END
        END
        ELSE if ((StringsEqual(padName,"EndPad") == TRUE) AND (gEndGame == TRUE) AND (gGotUpgrade == FALSE)) then
        BEGIN
            fAltEnd(WIN)
//          IceDisplay(".................End Pad!!! \n")
        END
    }

    // Cave 1 death.
    ANYOF(evtObjDiedTeam1)
    (integer theInt void)
    {
        set gCave1 = gCave1 + theInt

        TriggerDelay(3*SECOND, evtRespawnCave1 )

        if (gCave1Start == FALSE) then
        BEGIN
            TriggerDelay( 180*SECOND, evtCave1Dead)
            set gCave1Start = TRUE
        END
    }

    ANYOF( evtRespawnCave1 )
    {
        while (gCave1 > 3)
        BEGIN
            fCave1Spawn()
        END
    }

    ONCE ANYOF( evtCave1Dead )
    {
        set gCave1 = -99
    }

    // Cave 2 death.
    ANYOF(evtObjDiedTeam2)
    (integer theInt void)
    {
        set gCave2 = gCave2 + theInt

        TriggerDelay(3*SECOND, evtRespawnCave2 )

        if (gCave2Start == FALSE) then
        BEGIN
            TriggerDelay( 180*SECOND, evtCave2Dead)
            set gCave2Start = TRUE
        END
    }

    ANYOF( evtRespawnCave2 )
    {
        while (gCave2 > 3)
        BEGIN
            fCave2Spawn()
        END
    }

    ONCE ANYOF( evtCave2Dead )
    {
        set gCave2 = -99
    }

    // Cave 3 death.
    ANYOF(evtObjDiedTeam3)
    (integer theInt void)
    {
        set gCave3 = gCave3 + theInt

        TriggerDelay(3*SECOND, evtRespawnCave3 )

        if (gCave3Start == FALSE) then
        BEGIN
            TriggerDelay( 180*SECOND, evtCave3Dead)
            set gCave3Start = TRUE
        END
    }

    ANYOF( evtRespawnCave3 )
    {
        while (gCave3 > 3) 
        BEGIN
            fCave3Spawn()
        END
    }

    ONCE ANYOF( evtCave3Dead )
    {
        set gCave3 = -99
    }

    // Cave 4 death.
    ANYOF(evtObjDiedTeam4)
    (integer theInt void)
    {
        set gCave4 = gCave4 + theInt

        TriggerDelay(3*SECOND, evtRespawnCave4 )

        if (gCave4Start == FALSE) then
        BEGIN
            TriggerDelay( 180*SECOND, evtCave4Dead)
            set gCave4Start = TRUE
        END
    }

    ANYOF( evtRespawnCave4 )
    {
        while (gCave4 > 3)
        BEGIN
            fCave4Spawn()
        END
    }

    ONCE ANYOF( evtCave4Dead )
    {
        set gCave4 = -99
    }

    // Cave 5 death.
    ANYOF(evtObjDiedTeam5)
    (integer theInt void)
    {
        set gCave5 = gCave5 + theInt

        TriggerDelay(3*SECOND, evtRespawnCave5 )

        if (gCave5Start == FALSE) then
        BEGIN
            TriggerDelay( 180*SECOND, evtCave5Dead)
            set gCave5Start = TRUE
        END
    }

    ANYOF( evtRespawnCave5 )
    {
        while (gCave5 > 3)
        BEGIN
            fCave5Spawn()
        END
    }

    ONCE ANYOF( evtCave5Dead )
    {
        set gCave5 = -99
    }

    // Docks death.
    ANYOF(evtObjDiedTeam6)
    (integer theInt void)
    {
        set gDocks = gDocks + theInt

        TriggerDelay(3*SECOND, evtDocksRespawn )
    }

    ANYOF( evtDocksRespawn )
    {
        while (gDocks > 3)
        BEGIN
            fDocksSpawn()
        END
    }

ANYOF(evtEricsLightning)
(void void)
{
    create integer dTemp
//  //IceDisplay("evtEricsLightning\n")
    //
    // choose an area
    //

    set dTemp = Random(9) //number of active areas

    select dTemp
    case 0
    BEGIN
//      //IceDisplay("location choice 0 \n")
        set dEndLoc = (44.0, 114.4, 2.8)
        set dStartLoc = dEndLoc
        set dStartLoc^z = dStartLoc^z + 10.0
        set dStartOffset = 5.0
        set dEndOffset = 0.0
    END
    case 1
    BEGIN
//      //IceDisplay("location choice 1 \n")
        set dEndLoc = (50.9, 114.5, 2.9)
        set dStartLoc = dEndLoc
        set dStartLoc^z = dStartLoc^z + 10.0
        set dStartOffset = 10.0
        set dEndOffset = 0.0
    END
    case 2
    BEGIN
//      //IceDisplay("location choice 1 \n")
        set dEndLoc = (56.9, 112.4, 2.7)
        set dStartLoc = dEndLoc
        set dStartLoc^z = dStartLoc^z + 10.0
        set dStartOffset = 10.0
        set dEndOffset = 0.0
    END
    case 3
    BEGIN
//      //IceDisplay("location choice 1 \n")
        set dEndLoc = (58.9, 107.9, 3.0)
        set dStartLoc = dEndLoc
        set dStartLoc^z = dStartLoc^z + 10.0
        set dStartOffset = 10.0
        set dEndOffset = 0.0
    END
    case 4
    BEGIN
//      //IceDisplay("location choice 1 \n")
        set dEndLoc = (59.0, 103.5, 3.8)
        set dStartLoc = dEndLoc
        set dStartLoc^z = dStartLoc^z + 10.0
        set dStartOffset = 10.0
        set dEndOffset = 0.0
    END
    case 5
    BEGIN
//      //IceDisplay("location choice 1 \n")
        set dEndLoc = (41.7, 110.3, 0.9)
        set dStartLoc = dEndLoc
        set dStartLoc^z = dStartLoc^z + 10.0
        set dStartOffset = 5.0
        set dEndOffset = 0.0
    END
    case 6
    BEGIN
//      //IceDisplay("location choice 1 \n")
        set dEndLoc = (51.9, 109.9, 0.8)
        set dStartLoc = dEndLoc
        set dStartLoc^z = dStartLoc^z + 10.0
        set dStartOffset = 5.0
        set dEndOffset = 0.0
    END
    case 7
    BEGIN
//      //IceDisplay("location choice 1 \n")
        set dEndLoc = (54.9, 101.4, 1.1)
        set dStartLoc = dEndLoc
        set dStartLoc^z = dStartLoc^z + 10.0
        set dStartOffset = 10.0
        set dEndOffset = 0.0
    END
    case 8
    BEGIN
//      //IceDisplay("location choice 1 \n")
        set dEndLoc = (59.0, 103.5, 1.0)
        set dStartLoc = dEndLoc
        set dStartLoc^z = dStartLoc^z + 10.0
        set dStartOffset = 5.0
        set dEndOffset = 0.0
    END
    default
    BEGIN
        EXIT
//      IceDisplay("sdfbweberbzsdrrbzwegewzbwerwgwebrwr \n")
    END

    fSetLightningLocs()

    //
    // choose type of bolt to shoot in that area
    //

    set dTemp = Random(3)
    select dTemp
    case 0
    BEGIN
//      //IceDisplay("Config choice 0 \n")
        set dLparam1 = ELIGHTNING_EFFECT_OPTION_THICK // choose one of (ELIGHTNING_EFFECT_OPTION_THICK, ELIGHTNING_EFFECT_OPTION_THIN)
        set dLparam2 = ELIGHTNING_EFFECT_OPTION_BRANCH // choose one of (ELIGHTNING_EFFECT_OPTION_BOLT, ELIGHTNING_EFFECT_OPTION_SHAFT, ELIGHTNING_EFFECT_OPTION_BRANCH)
        set dLparam3 = ELIGHTNING_EFFECT_OPTION_COLD // choose one of (ELIGHTNING_EFFECT_OPTION_HOT, ELIGHTNING_EFFECT_OPTION_WARM, ELIGHTNING_EFFECT_OPTION_COOL, ELIGHTNING_EFFECT_OPTION_COLD, ELIGHTNING_EFFECT_OPTION_FROZEN)
        set dLparam4 = ELIGHTNING_EFFECT_OPTION_END_SPOT + ELIGHTNING_EFFECT_OPTION_START_SPOT + ELIGHTNING_EFFECT_OPTION_FADE // choose any combination of (ELIGHTNING_EFFECT_OPTION_START_SPOT, ELIGHTNING_EFFECT_OPTION_END_SPOT, ELIGHTNING_EFFECT_OPTION_FADE, ELIGHTNING_EFFECT_OPTION_GROW)
        //
        // launch the bolt at the chosen location in the chosen area
        //
        CreateLightning(dStartLoc, dEndLoc, dLparam1+dLparam2+dLparam3+dLparam4, FLOAT(Random(700))*0.001)

        set dLparam1 = ELIGHTNING_EFFECT_OPTION_THICK // choose one of (ELIGHTNING_EFFECT_OPTION_THICK, ELIGHTNING_EFFECT_OPTION_THIN)
        set dLparam2 = ELIGHTNING_EFFECT_OPTION_BOLT // choose one of (ELIGHTNING_EFFECT_OPTION_BOLT, ELIGHTNING_EFFECT_OPTION_SHAFT, ELIGHTNING_EFFECT_OPTION_BRANCH)
        set dLparam3 = ELIGHTNING_EFFECT_OPTION_COLD // choose one of (ELIGHTNING_EFFECT_OPTION_HOT, ELIGHTNING_EFFECT_OPTION_WARM, ELIGHTNING_EFFECT_OPTION_COOL, ELIGHTNING_EFFECT_OPTION_COLD, ELIGHTNING_EFFECT_OPTION_FROZEN)
        set dLparam4 = ELIGHTNING_EFFECT_OPTION_END_SPOT + ELIGHTNING_EFFECT_OPTION_START_SPOT + ELIGHTNING_EFFECT_OPTION_FADE // choose any combination of (ELIGHTNING_EFFECT_OPTION_START_SPOT, ELIGHTNING_EFFECT_OPTION_END_SPOT, ELIGHTNING_EFFECT_OPTION_FADE, ELIGHTNING_EFFECT_OPTION_GROW)
        //
        // launch the bolt at the chosen location in the chosen area
        //
        CreateLightning(dStartLoc, dEndLoc, dLparam1+dLparam2+dLparam3+dLparam4, FLOAT(Random(600))*0.001)
    END
    case 1
    BEGIN
//      //IceDisplay("Config choice 1 \n")
        set dLparam1 = ELIGHTNING_EFFECT_OPTION_THICK // choose one of (ELIGHTNING_EFFECT_OPTION_THICK, ELIGHTNING_EFFECT_OPTION_THIN)
        set dLparam2 = ELIGHTNING_EFFECT_OPTION_BRANCH // choose one of (ELIGHTNING_EFFECT_OPTION_BOLT, ELIGHTNING_EFFECT_OPTION_SHAFT, ELIGHTNING_EFFECT_OPTION_BRANCH)
        set dLparam3 = ELIGHTNING_EFFECT_OPTION_COLD // choose one of (ELIGHTNING_EFFECT_OPTION_HOT, ELIGHTNING_EFFECT_OPTION_WARM, ELIGHTNING_EFFECT_OPTION_COOL, ELIGHTNING_EFFECT_OPTION_COLD, ELIGHTNING_EFFECT_OPTION_FROZEN)
        set dLparam4 = ELIGHTNING_EFFECT_OPTION_END_SPOT + ELIGHTNING_EFFECT_OPTION_START_SPOT // choose any combination of (ELIGHTNING_EFFECT_OPTION_START_SPOT, ELIGHTNING_EFFECT_OPTION_END_SPOT, ELIGHTNING_EFFECT_OPTION_FADE, ELIGHTNING_EFFECT_OPTION_GROW)
        //
        // launch the bolt at the chosen location in the chosen area
        //
        CreateLightning(dStartLoc, dEndLoc, dLparam1+dLparam2+dLparam3+dLparam4, FLOAT(Random(600))*0.001)

        set dLparam1 = ELIGHTNING_EFFECT_OPTION_THICK // choose one of (ELIGHTNING_EFFECT_OPTION_THICK, ELIGHTNING_EFFECT_OPTION_THIN)
        set dLparam2 = ELIGHTNING_EFFECT_OPTION_BOLT // choose one of (ELIGHTNING_EFFECT_OPTION_BOLT, ELIGHTNING_EFFECT_OPTION_SHAFT, ELIGHTNING_EFFECT_OPTION_BRANCH)
        set dLparam3 = ELIGHTNING_EFFECT_OPTION_COLD // choose one of (ELIGHTNING_EFFECT_OPTION_HOT, ELIGHTNING_EFFECT_OPTION_WARM, ELIGHTNING_EFFECT_OPTION_COOL, ELIGHTNING_EFFECT_OPTION_COLD, ELIGHTNING_EFFECT_OPTION_FROZEN)
        set dLparam4 = ELIGHTNING_EFFECT_OPTION_END_SPOT + ELIGHTNING_EFFECT_OPTION_START_SPOT // choose any combination of (ELIGHTNING_EFFECT_OPTION_START_SPOT, ELIGHTNING_EFFECT_OPTION_END_SPOT, ELIGHTNING_EFFECT_OPTION_FADE, ELIGHTNING_EFFECT_OPTION_GROW)
        //
        // launch the bolt at the chosen location in the chosen area
        //
        CreateLightning(dStartLoc, dEndLoc, dLparam1+dLparam2+dLparam3+dLparam4, FLOAT(Random(500))*0.001)

        set dLparam1 = ELIGHTNING_EFFECT_OPTION_THICK // choose one of (ELIGHTNING_EFFECT_OPTION_THICK, ELIGHTNING_EFFECT_OPTION_THIN)
        set dLparam2 = ELIGHTNING_EFFECT_OPTION_BOLT // choose one of (ELIGHTNING_EFFECT_OPTION_BOLT, ELIGHTNING_EFFECT_OPTION_SHAFT, ELIGHTNING_EFFECT_OPTION_BRANCH)
        set dLparam3 = ELIGHTNING_EFFECT_OPTION_COLD // choose one of (ELIGHTNING_EFFECT_OPTION_HOT, ELIGHTNING_EFFECT_OPTION_WARM, ELIGHTNING_EFFECT_OPTION_COOL, ELIGHTNING_EFFECT_OPTION_COLD, ELIGHTNING_EFFECT_OPTION_FROZEN)
        set dLparam4 = ELIGHTNING_EFFECT_OPTION_END_SPOT + ELIGHTNING_EFFECT_OPTION_START_SPOT // choose any combination of (ELIGHTNING_EFFECT_OPTION_START_SPOT, ELIGHTNING_EFFECT_OPTION_END_SPOT, ELIGHTNING_EFFECT_OPTION_FADE, ELIGHTNING_EFFECT_OPTION_GROW)
        //
        // launch the bolt at the chosen location in the chosen area
        //
        CreateLightning(dStartLoc, dEndLoc, dLparam1+dLparam2+dLparam3+dLparam4, FLOAT(Random(500))*0.001)
    END
    case 2
    BEGIN
//      //IceDisplay("Config choice 2 \n")
        set dLparam1 = ELIGHTNING_EFFECT_OPTION_THIN // choose one of (ELIGHTNING_EFFECT_OPTION_THICK, ELIGHTNING_EFFECT_OPTION_THIN)
        set dLparam2 = ELIGHTNING_EFFECT_OPTION_BOLT // choose one of (ELIGHTNING_EFFECT_OPTION_BOLT, ELIGHTNING_EFFECT_OPTION_SHAFT, ELIGHTNING_EFFECT_OPTION_BRANCH)
        set dLparam3 = ELIGHTNING_EFFECT_OPTION_COLD // choose one of (ELIGHTNING_EFFECT_OPTION_HOT, ELIGHTNING_EFFECT_OPTION_WARM, ELIGHTNING_EFFECT_OPTION_COOL, ELIGHTNING_EFFECT_OPTION_COLD, ELIGHTNING_EFFECT_OPTION_FROZEN)
        set dLparam4 = ELIGHTNING_EFFECT_OPTION_END_SPOT + ELIGHTNING_EFFECT_OPTION_START_SPOT // choose any combination of (ELIGHTNING_EFFECT_OPTION_START_SPOT, ELIGHTNING_EFFECT_OPTION_END_SPOT, ELIGHTNING_EFFECT_OPTION_FADE, ELIGHTNING_EFFECT_OPTION_GROW)
        //
        // launch the bolt at the chosen location in the chosen area
        //
        CreateLightning(dStartLoc, dEndLoc, dLparam1+dLparam2+dLparam3+dLparam4, FLOAT(Random(500))*0.001)

        set dLparam1 = ELIGHTNING_EFFECT_OPTION_THIN // choose one of (ELIGHTNING_EFFECT_OPTION_THICK, ELIGHTNING_EFFECT_OPTION_THIN)
        set dLparam2 = ELIGHTNING_EFFECT_OPTION_BOLT // choose one of (ELIGHTNING_EFFECT_OPTION_BOLT, ELIGHTNING_EFFECT_OPTION_SHAFT, ELIGHTNING_EFFECT_OPTION_BRANCH)
        set dLparam3 = ELIGHTNING_EFFECT_OPTION_COLD // choose one of (ELIGHTNING_EFFECT_OPTION_HOT, ELIGHTNING_EFFECT_OPTION_WARM, ELIGHTNING_EFFECT_OPTION_COOL, ELIGHTNING_EFFECT_OPTION_COLD, ELIGHTNING_EFFECT_OPTION_FROZEN)
        set dLparam4 = ELIGHTNING_EFFECT_OPTION_END_SPOT + ELIGHTNING_EFFECT_OPTION_START_SPOT // choose any combination of (ELIGHTNING_EFFECT_OPTION_START_SPOT, ELIGHTNING_EFFECT_OPTION_END_SPOT, ELIGHTNING_EFFECT_OPTION_FADE, ELIGHTNING_EFFECT_OPTION_GROW)
        //
        // launch the bolt at the chosen location in the chosen area
        //
        CreateLightning(dStartLoc, dEndLoc, dLparam1+dLparam2+dLparam3+dLparam4, FLOAT(Random(400))*0.001)
    END
    default
    BEGIN
        EXIT
//      IceDisplay("!!!!!!!!!    you have two few cases in your select statment \n")
    END
    
    BEGIN
        if (gIsPlantAlive == TRUE) then
        BEGIN
            TriggerDelay(Random(900)+200, evtEricsLightning)
//          //IceDisplay("reTriggering evtEricsLightning \n")
        END
    END
}

..\TECH\DATA\AMBUSH\AMBUSH.CML#

<CASTLE version="1" >
    <KEEP name="AssaultTurretWaterT" id="0" x="100.222229" y="56.666668" z="0.000000" yaw="1.505000" pitch="0.000000" roll="0.000000" />
    <KEEP name="AssaultTurretWaterT" id="1" x="23.888889" y="47.777779" z="0.000000" yaw="-0.915000" pitch="0.000000" roll="0.000000" />
    <KEEP name="AssaultTurretWaterT" id="2" x="35.666664" y="52.222225" z="0.000000" yaw="-0.215000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="3" x="82.313133" y="48.313129" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="KeepOctStone" id="4" x="82.000000" y="37.000000" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="5" x="90.000000" y="89.000000" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="6" x="82.000000" y="98.000000" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="7" x="90.888893" y="61.666668" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="KeepOctStone" id="8" x="18.181818" y="81.909096" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="9" x="41.006050" y="103.709099" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="10" x="42.090908" y="106.090912" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="11" x="11.363636" y="68.363640" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="12" x="17.818182" y="74.636360" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="13" x="24.454544" y="74.818176" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="14" x="28.000000" y="72.000000" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="15" x="13.929293" y="77.909088" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="AssaultTurretFireT" id="16" x="19.959597" y="79.868690" z="0.000000" yaw="4.256000" pitch="0.000000" roll="0.000000" />
    <KEEP name="AssaultTurretFireT" id="17" x="20.939394" y="82.212120" z="0.000000" yaw="4.756000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="18" x="18.454544" y="90.727272" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="19" x="19.909088" y="90.181824" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="AssaultTurretFireT" id="20" x="21.848484" y="89.796982" z="0.000000" yaw="5.056000" pitch="0.000000" roll="0.000000" />
    <KEEP name="AssaultTurretFireT" id="21" x="23.222223" y="85.746468" z="0.000000" yaw="4.756000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="22" x="31.545454" y="71.181816" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="23" x="37.818180" y="94.454544" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="24" x="29.222219" y="94.555557" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="25" x="52.000000" y="110.000000" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="26" x="55.000000" y="107.000000" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="27" x="55.000000" y="101.000000" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="28" x="44.111111" y="114.000000" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="29" x="51.000000" y="114.000000" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="30" x="57.000000" y="112.000000" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="31" x="59.000000" y="108.000000" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="32" x="58.656563" y="103.545456" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="33" x="42.999996" y="110.000000" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="34" x="36.309528" y="61.065083" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="35" x="35.914280" y="69.814285" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="36" x="38.974602" y="59.647755" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <KEEP name="TowerTallStoneArch" id="37" x="39.133335" y="66.000000" z="0.000000" yaw="0.000000" pitch="0.000000" roll="0.000000" />
    <WALL name="StoneWall" start="31" end="32" />
    <WALL name="StoneWall" start="30" end="31" />
    <WALL name="StoneWall" start="29" end="30" />
    <WALL name="StoneWall" start="28" end="29" />
    <WALL name="StoneWall" start="26" end="27" />
    <WALL name="StoneWall" start="25" end="26" />
    <WALL name="StoneWall" start="33" end="25" />
    <WALL name="StoneWall" start="10" end="33" />
    <WALL name="StoneWall" start="9" end="10" />
    <WALL name="StoneWall" start="24" end="23" />
    <WALL name="StoneWall" start="19" end="18" />
    <WALL name="StoneWall" start="20" end="19" />
    <WALL name="StoneWall" start="21" end="20" />
    <WALL name="StoneWall" start="16" end="17" />
    <WALL name="StoneWall" start="15" end="16" />
    <WALL name="StoneWall" start="11" end="12" />
    <WALL name="StoneWall" start="13" end="12" />
    <WALL name="StoneWall" start="14" end="13" />
    <WALL name="StoneWall" start="22" end="14" />
    <WALL name="StoneWall" start="35" end="22" />
    <WALL name="StoneWall" start="34" end="35" />
    <WALL name="StoneWall" start="36" end="37" />
</CASTLE>

..\TECH\DATA\AMBUSH\AMBUSH.PMF#

<?xml version="1.0" encoding="UTF-8"?>
<PADS VER="1">
    <PAD NAME="WagonPad"  X="35" Y="86" DX="5" DY="5" />
    <PAD NAME="MultiWardPad"  X="72" Y="34" DX="30" DY="5" />
    <PAD NAME="MainGatePad"  X="65" Y="80" DX="26" DY="5" />
    <PAD NAME="AmbushVOPad"  X="15" Y="94" DX="27" DY="5" />
    <PAD NAME="EndPad"  X="110" Y="95" DX="5" DY="19" />
</PADS>

..\TECH\DATA\AMBUSH\AMBUSH.POI#

Tree80Poi                             33.346      32.443       0.000       0.000       0.000       2.000 TreeDead2
Tree79Poi                             33.111      34.333       0.000       0.000       0.000       0.000 TreeDead2
Tree78Poi                             30.556      35.778       0.000       0.000       0.000       0.000 TreeDead2
Tree77Poi                             26.444      29.444       0.000       0.000       0.000       0.000 TreeDead2
Tree76Poi                             27.000      40.111       0.000       0.000       0.000       0.000 TreeDecid
Tree75Poi                             28.222      37.889       0.000       0.000       0.000       0.000 TreeDecid
Tree74Poi                             26.111      34.889       0.000       0.000       0.000       0.000 TreeDecid
Tree73Poi                             32.556      30.333       0.000       0.000       0.000       0.000 TreeDecid
Tree72Poi                             30.889      33.667       0.000       0.000       0.000       0.000 TreeDecid
Tree71Poi                             27.889      31.778       0.000       0.000       0.000       0.000 TreeDecid
Tree70Poi                             28.434      36.647       0.000       0.000       0.000      -0.006 TreeDecid
Tree69Poi                             31.693      30.360       0.000       0.000       0.000       1.094 TreeDecid
Tree68Poi                             28.800      27.800       0.000       0.000       0.000       0.829 TreeDecid
Tree67Poi                             34.613      55.176       0.000       0.000       0.000       0.000 TreeDecid
Tree66Poi                             32.584      58.449       0.000       0.000       0.000      -2.004 TreeDecid
Tree65Poi                             32.742      63.425       0.000       0.000       0.000      -2.518 TreeDead2
Tree64Poi                             27.142      63.890       0.000       0.000      -0.045       0.212 TreeDead2
Tree63Poi                             34.236      61.602       0.000       0.000       0.000       0.612 TreeDead2
Tree62Poi                             24.369      40.395       0.000       0.000       0.000      -0.391 TreeDead2
Tree61Poi                             34.015      29.545       0.000       0.000       0.000       0.811 TreeDead2
Windmillid51x630Poi                   63.203      75.346       0.000       0.000       0.000       0.911 
Windmillid50x610Poi                   59.996      72.051       0.000       0.000       0.000       1.000 
Windmillid49x570Poi                   57.000      68.000       0.000       0.000       0.000       0.930 
Ballistaid8x7000Poi                   70.000      79.000       0.000       0.000       0.000       0.000 
Ballistaid7x7100Poi                   38.760      56.093       0.000       0.000       0.000       0.786 
Ballistaid6x7300Poi                   38.945      55.299       0.000       0.000       0.000       1.476 
Ballistaid5x7500Poi                   37.868      54.282       0.000       0.000       0.000       1.385 
OrcTowerOctid4x2600Poi                25.022       9.044       0.000       0.000       0.000      -0.641 
HouseLowerClassBid3x7700Poi           77.000      40.300       0.000       0.000       0.000      -0.074 
HouseLowerClassBid2x7900Poi           78.564      40.591       0.000       0.000       0.000       1.684 
HouseLowerClassBid1x8100Poi           80.622      40.000       0.000       0.000       0.000      -0.241 
StaticGalleon1Poi                     88.146      38.505       3.062      -0.026      -0.232      -1.583 
StaticGalleon2Poi                     90.566      43.001       3.000       0.000       0.000       1.554 
Catapultid91x330Poi                   24.576      81.111       0.000       0.000       0.000       0.000 
Catapultid90x280Poi                   26.778      85.667       0.000       0.000       0.000       0.000 
Catapultid89x720Poi                   75.333      50.000       0.000       0.000       0.000       0.000 
Catapultid88x660Poi                   66.000      46.000       0.000       0.000       0.000       0.000 
Catapultid87x610Poi                   61.000      47.000       0.000       0.000       0.000      -0.936 
HouseLowerClassBid77x260Poi           30.225      58.121       0.000       0.000       0.000       1.827 
HouseLowerClassBid76x260Poi           27.441      54.368       0.000       0.000       0.000      -1.076 
HouseLowerClassBid75x230Poi           30.669      55.045       0.000       0.000       0.000       3.951 
HouseLowerClassBid74x220Poi           28.459      58.676       0.000       0.000       0.000       0.493 
HouseLowerClassBid73x240Poi           34.829      56.883       0.000       0.000       0.000      -1.384 
HouseLowerClassBid72x210Poi           25.781      53.883       0.000       0.000       0.000       0.424 
HouseLowerClassBid71x230Poi           20.513      54.305       0.000       0.000       0.000      -0.603 
HouseLowerClassBid70x220Poi           24.595      59.929       0.000       0.000       0.000       4.443 
HouseLowerClassBid69x240Poi           25.967      61.601       0.000       0.000       0.000       0.255 
HouseLowerClassBid68x220Poi           25.993      64.097       0.000       0.000       0.000      -0.348 
HouseLowerClassBid67x780Poi           77.778      33.333       0.000       0.000       0.000       0.150 
HouseLowerClassBid66x760Poi           76.000      33.000       0.000       0.000       0.000       1.418 
HouseLowerClassBid65x780Poi           76.455      36.857       0.000       0.000       0.000       1.293 
HouseLowerClassBid64x760Poi           76.040      34.261       0.000       0.000       0.000      -0.305 
HouseLowerClassBid63x780Poi           78.040      35.268       0.000       0.000       0.000       2.693 
HouseLowerClassBid62x760Poi           76.420      38.357       0.000       0.000       0.000      -0.711 
HouseLowerClassBid61x850Poi           85.076      65.691       0.000       0.000       0.000       1.746 
HouseLowerClassBid60x830Poi           83.339      63.240       0.000       0.177       0.002      -0.509 
HouseLowerClassBid59x870Poi           87.000      62.000       0.000       0.000       0.000      -1.217 
HouseLowerClassBid58x850Poi           84.353      58.033       0.000       0.000       0.167      -2.051 
HouseLowerClassBid57x830Poi           82.931      55.964       0.000       0.000       0.000       0.235 
HouseLowerClassBid56x870Poi           87.845      63.260       0.000       0.000       0.000       1.059 
HouseLowerClassBid55x840Poi           84.343      60.106       0.000       0.096       0.000      -0.726 
HouseLowerClassBid54x830Poi           82.920      60.179       0.000       0.000       0.000       0.119 
GreatHallid53x280Poi                  30.350      60.694       0.000       0.000       0.000      -0.098 
GreatHallid52x106Poi                 106.395      57.078       0.000       0.000       0.000       3.439 
Tree60Poi                            104.742      58.815       0.000       0.000       0.000      -0.874 TreeDead2
Tree59Poi                             24.111     103.444       0.000       0.000       0.000      -1.178 TreeDead2
Tree58Poi                             78.667      87.001       0.000       0.000       0.000       1.160 TreeDead2
Tree57Poi                             86.672      65.727       0.000       0.000       0.000      -1.181 TreeDead2
Tree56Poi                            109.448      59.160       0.000       0.000       0.000       0.997 TreeDead2
Tree55Poi                             84.292      61.776       0.000       0.000       0.000      -2.319 TreeDead2
Tree54Poi                             76.889      87.889       0.000       0.000       0.000       1.749 TreeDead2
Dragon1_Start                        102.534      10.074      10.100       0.000       0.000       0.267 
Tree40Poi                             27.537      58.465       0.000       0.014       0.267       2.586 TreeDead2
Tree39Poi                             26.387      60.503       0.000       0.000       0.000       1.031 TreeDead2
Tree38Poi                             58.669      42.614       0.000       0.000       0.000      -4.871 TreeDead2
Tree37Poi                             31.111      29.778       0.000       0.000       0.000      -0.534 TreeDead2
Tree36Poi                             28.000      34.444       0.000       0.000       0.000      -0.969 TreeDead2
Tree35Poi                             24.667      99.778       0.000       0.000       0.000       0.530 TreeDead2
Tree34Poi                             26.778     101.556       0.000       0.000       0.000      -1.411 TreeDead2
Tree33Poi                             27.222      97.333       0.000       0.000       0.000      -0.206 TreeDead2
Tree32Poi                             26.445      96.555       0.000       0.000       0.000       1.643 TreeDead2
Tree31Poi                             27.333      94.222       0.000       0.000       0.000      -0.554 TreeDead2
Tree30Poi                             76.222      52.131       0.000       0.000       0.000       1.010 TreeDead2
Tree29Poi                             70.667      47.556       0.000       0.000       0.000      -2.000 TreeDead2
Tree28Poi                             69.778      49.333       0.000       0.000       0.000       0.505 TreeDead2
Tree27Poi                             68.667      47.000       0.000       0.000       0.000      -0.923 TreeDead2
Tree26Poi                             62.675      52.639       0.000       0.000       0.000       1.282 TreeDead2
Tree25Poi                             62.000      53.560       0.000       0.000       0.000      -1.438 TreeDead2
Tree24Poi                             60.059      54.516       0.000       0.000       0.000       0.282 TreeDead2
Tree23Poi                             62.333      61.444       0.000       0.000       0.000       1.979 TreeDead2
Tree22Poi                             67.889      66.556       0.000       0.000       0.000      -1.637 TreeDead2
Tree21Poi                             75.444      65.111       0.000       0.000       0.000       0.835 TreeDead2
Tree20Poi                             29.333      31.333       0.000       0.000       0.000      -0.197 TreeDecid
Tree19Poi                             28.333      30.333       0.000       0.000       0.000      -1.881 TreeDecid
Tree18Poi                             31.373      32.770       0.000       0.017       0.000      -1.864 TreeDecid
Tree17Poi                             29.333      32.667       0.000       0.000       0.000      -0.653 TreeDecid
Tree16Poi                             65.667      68.334       0.000       0.000       0.000      -0.619 TreeDecid
Tree15Poi                             23.111      95.889       0.000       0.000       0.000       1.565 TreeDecid
Tree14Poi                             24.111      91.667       0.000       0.000       0.000      -0.578 TreeDecid
Tree13Poi                             26.889      92.889       0.000      -0.001       0.000      -0.659 TreeDecid
Tree12Poi                             27.962      88.213       0.000       0.056       0.000      -0.609 TreeDecid
Tree11Poi                             36.556      90.333       0.000       0.000       0.000      -1.267 TreeDecid
Tree10Poi                             75.529      62.972       0.000       0.000       0.000      -1.226 TreeDecid
Tree9Poi                              73.556      65.333       0.000       0.000       0.000      -1.116 TreeDecid
Tree8Poi                              64.444      64.111       0.000       0.000       0.000       1.161 TreeDecid
Tree7Poi                              74.702      68.879       0.000       0.000       0.000       0.604 TreeDecid
Tree6Poi                              71.778      65.889       0.000       0.000       0.000      -1.043 TreeDecid
Tree5Poi                              70.000      71.000       0.000       0.000       0.000       1.103 TreeDecid
Tree4Poi                              67.444      68.444       0.000       0.000       0.000      -0.919 TreeDecid
Tree3Poi                              65.556      64.778       0.000       0.000       0.000       1.293 TreeDecid
Tree2Poi                              69.667      67.333       0.000       0.000       0.000      -0.232 TreeDecid
Tree1Poi                              68.889      69.333       0.000       0.000       0.000       2.378 TreeDecid
DarkWardGeneratorPoi                  90.441      97.737       0.000       0.000       0.000      -0.840 
PlantDefender8Poi                     43.312     105.409       0.000       0.000       0.000       0.000 
PlantDefender7Poi                     39.556      98.222       0.000       0.000       0.000       0.000 
PlantDefender6Poi                     39.711     104.078       0.000       0.000       0.000       0.000 
PlantDefender5Poi                     42.421     103.257       0.000       0.000       0.000       0.000 
PlantDefender4Poi                     49.689     107.933       0.000       0.000       0.000       0.000 
PlantDefender3Poi                     40.456      99.520       0.000       0.000       0.000       0.000 
PlantDefender2Poi                     39.111     101.438       0.000       0.000       0.000       0.000 
PlantDefender1Poi                     49.786     105.514       0.000       0.000       0.000       0.000 
FarmCPeasant1Poi                      19.600      81.600       0.000       0.000       0.000       0.000 
FarmCPig2Poi                          17.400      80.600       0.000       0.000       0.000       0.000 Sheep
FarmCPig1Poi                          17.545      84.636       0.000       0.000       0.000       0.000 Sheep
FarmCCow1Poi                          21.564      84.273       0.000       0.000       0.000       0.000 Sheep
DistrictCPeasant3Poi                  31.309      77.436       0.000       0.000       0.000       0.000 
DistrictCPeasant2Poi                  34.655      88.618       0.000       0.000       0.000       0.000 
DistrictCPeasant1Poi                  30.273      81.600       0.000       0.000       0.000       0.000 
DistrictCDefender4Poi                 26.600      79.800       0.000       0.000       0.000       0.000 
DistrictCDefender3Poi                 31.400      85.200       0.000       0.000       0.000       0.000 
DistrictCDefender2Poi                 26.547      81.509       0.000       0.000       0.000       0.000 
DistrictCDefender1Poi                 31.600      89.600       0.000       0.000       0.000       0.000 
DistrictBPeasant4Poi                  41.600      52.000       0.000       0.000       0.000       0.000 
DistrictBPeasant3Poi                  38.378      54.467       0.000       0.000       0.000       0.000 
DistrictBPeasant2Poi                  24.400      63.756       0.000       0.000       0.000       0.000 
DistrictBPeasant1Poi                  31.917      58.432       0.000       0.000       0.000       0.000 
DistrictBDefender5Poi                 50.600      48.800       0.000       0.000       0.000       0.000 
DistrictBDefender4Poi                 42.600      55.800       0.000       0.000       0.000       0.000 
DistrictBDefender3Poi                 36.400      57.156       0.000       0.000       0.000       0.000 
DistrictBDefender2Poi                 28.475      59.356       0.000       0.000       0.000       0.000 
DistrictBDefender1Poi                 29.000      63.978       0.000       0.000       0.000       0.000 
FarmBPeasant2Poi                      38.289      35.844       0.000       0.000       0.000       0.000 
FarmBPeasant1Poi                      35.400      38.000       0.000       0.000       0.000       0.000 
FarmBPig3Poi                          31.400      38.800       0.000       0.000       0.000       0.000 Sheep
FarmBPig2Poi                          38.200      31.800       0.000       0.000       0.000       0.000 Sheep
FarmBPig1Poi                          38.200      37.800       0.000       0.000       0.000       0.000 Sheep
FarmBCow4Poi                          32.200      31.400       0.000       0.000       0.000       0.000 Sheep
FarmBCow3Poi                          29.000      36.400       0.000       0.000       0.000       0.000 Sheep
FarmBCow2Poi                          36.978      33.289       0.000       0.000       0.000       0.000 Sheep
FarmBCow1Poi                          41.378      38.133       0.000       0.000       0.000       0.000 Sheep
CavalryGroup3Poi                      69.582      41.240       0.000       0.000       0.000       0.000 
CavalryGroup2Poi                      67.709      42.252       0.000       0.000       0.000       0.000 
CavalryGroup1Poi                      71.491      42.200       0.000       0.000       0.000       0.000 
FarmADefender1Poi                     65.400      48.400       0.000       0.000       0.000       0.000 Archer
FarmAPeasant3Poi                      65.711      66.400       0.000       0.000       0.000       0.000 
FarmAPeasant2Poi                      60.491      60.545       0.000       0.000       0.000       0.000 
FarmAPeasant1Poi                      71.800      71.200       0.000       0.000       0.000       0.000 
FarmACow5Poi                          71.289      49.267       0.000       0.000       0.000       0.000 Sheep
FarmACow4Poi                          77.600      60.000       0.000       0.000       0.000       0.000 Sheep
FarmACow3Poi                          61.800      64.600       0.000       0.000       0.000       0.000 Sheep
FarmACow2Poi                          73.200      67.000       0.000       0.000       0.000       0.000 Sheep
FarmACow1Poi                          70.000      73.600       0.000       0.000       0.000       0.000 Sheep
GateDefender3Poi                      85.285      90.994       0.000       0.000       0.000       0.000 
GateDefender2Poi                      84.242      91.067       0.000       0.000       0.000       0.000 
GateDefender1Poi                      83.848      92.345       0.000       0.000       0.000       0.000 
DistrictAPeasant4Poi                  85.911      68.044       0.000       0.000       0.000       0.000 
DistrictAPeasant3Poi                  88.022      60.578       0.000       0.000       0.000       0.000 
DistrictAPeasant2Poi                  85.800      58.000       0.000       0.000       0.000       0.000 
DistrictAPeasant1Poi                  81.600      41.700       0.000       0.000       0.000       0.000 
DistrictADefender6Poi                 82.400      36.200       0.000       0.000       0.000       0.000 
DistrictADefender5Poi                 78.745      43.656       0.000       0.000       0.000       0.000 
DistrictADefender4Poi                 82.400      68.800       0.000       0.000       0.000       0.000 
DistrictADefender3Poi                104.756      56.222       0.000       0.000       0.000       0.000 
DistrictADefender2Poi                108.511      58.800       0.000       0.000       0.000       0.000 
DistrictADefender1Poi                 85.800      73.600       0.000       0.000       0.000       0.000 
Cave1SpawnPoi                         35.255      87.775       0.009       0.000       0.000       1.643 
Cave2SpawnPoi                         35.943      44.463       0.000       0.000       0.000       1.091 
Cave3SpawnPoi                         81.620      33.153       0.000       0.000       0.000       0.000 
Cave4SpawnPoi                         94.062      63.068       0.000       0.000       0.000       2.693 
Cave5SpawnPoi                         66.565      72.739       0.000       0.000       0.000      -2.000 
OceanSpawnPoi                         91.450      11.667       0.000       0.000       0.000       0.000 
Boat1Poi                              89.328      47.906       0.000       0.000       0.000       0.000 
Boat2Poi                              93.975      52.150       0.000       0.000       0.000       0.000 
Boat3Poi                              90.400      35.200       0.000       0.000       0.000       0.000 
Tree41Poi                             23.494      60.813       0.000       0.000       0.000       1.130 TreeDead2
Tree42Poi                             28.961      57.638       0.000       0.000       0.000      -0.681 TreeDead2
Tree43Poi                             26.810      53.721       0.000       0.000       0.000      -1.146 TreeDead2
Tree44Poi                             28.327      54.910       0.000       0.000       0.000       1.091 TreeDead2
Tree45Poi                             32.690      55.847       0.000       0.000       0.000      -1.660 TreeDead2
Tree46Poi                             76.480      36.151       0.000       0.000       0.000       1.317 TreeDead2
Tree47Poi                             55.000      41.889       0.000       0.000       0.000      -0.235 TreeDead2
Tree48Poi                             87.419      56.581       0.000       0.000       0.000       0.761 TreeDead2
Tree49Poi                             78.883      38.141       0.000       0.000       0.000       3.670 TreeDead2
Tree50Poi                             78.738      33.974       0.000       0.000       0.000      -2.671 TreeDead2
Tree51Poi                             82.708      64.404       0.000       0.000       0.000       1.166 TreeDead2
Tree52Poi                             76.001      87.333       0.000       0.000       0.000       1.096 TreeDead2
Tree53Poi                            101.859      60.646       0.000       0.000       0.000      -0.914 TreeDead2
FireWardGeneratorPoi                  47.222     106.667       0.000       0.000       0.000      -0.912 
Catapult2Poi                          42.444      36.667       0.000       0.000       0.000       0.000 
Catapult3Poi                          43.778      34.889       0.000       0.000       0.000       0.000 
Catapult4Poi                          77.028      65.000       0.000       0.000       0.000       0.000 
Catapult6Poi                          29.667     108.667       0.000       0.000       0.000       0.000 
Catapult7Poi                          34.000     109.778       0.000       0.000       0.000       0.000 
EarthMonk1Poi                         31.667      88.000       0.000       0.000       0.000       0.000 
EarthMonk3Poi                         81.556      34.333       0.000       0.000       0.000       0.000 
EarthMonk4Poi                         81.589      45.239       0.000       0.000       0.000       0.000 
EarthMonk5Poi                         83.533      39.667       0.000       0.000       0.000       0.000 
EarthMonk6Poi                         85.000      89.445       0.000       0.000       0.000       0.000 
EarthMonk7Poi                         82.778      92.000       0.000       0.000       0.000       0.000 
EarthMonk8Poi                         95.667      59.111       0.000       0.000       0.000       0.000 
EarthMonk9Poi                         98.528      61.139       0.000       0.000       0.000       0.000 
EarthMonk10Poi                        95.333      60.666       0.000       0.000       0.000       0.000 
ProcessingPlantPoi                    47.700     103.999       0.000       0.000       0.000      -0.067 
WagonCityPoi                          29.145      58.095       0.000       0.000       0.000       0.000 
WagonDocksPoi                        111.790      59.921       0.000       0.000       0.000       0.000 
WagonPierPoi                          83.111      44.167       0.000       0.000       0.000       0.000 
Tavern1Poi                            82.103      58.031       0.000       0.000       0.000       1.505 
Tavern2Poi                            86.128      64.099       0.000       0.000       0.000      -0.959 
Tavern3Poi                            26.394      56.723       0.000       0.000       0.000       0.000 
Tavern4Poi                            26.380      57.516       0.026       0.018       0.018       0.001 
Tavern5Poi                            33.610      53.341       0.000       0.000       0.000      -3.328 
WaterWardGeneratorPoi                102.874      56.240       0.000       0.000       0.000       0.000 
MoreTown1Poi                          22.135      57.837       0.000       0.000       0.000       0.683 
MoreTown2Poi                          33.691      56.497       0.000       0.000       0.000       0.223 
MoreTown3Poi                          22.219      55.839       0.000       0.000       0.000       0.000 
MoreTown4Poi                          23.385      56.216       0.000       0.000       0.000      -0.566 
MoreTown5Poi                          24.064      64.562       0.000       0.000       0.000      -0.196 
MidClass1Poi                          31.520      58.181       0.000       0.000       0.000       1.355 
MidClass2Poi                          23.398      53.880       0.000       0.000       0.000       4.823 
MidClass3Poi                          22.090      63.951       0.000       0.000       0.000       1.995 
MidClass4Poi                          22.519      59.289       0.000       0.000       0.000       2.155 
MidClass5Poi                          34.446      63.563       0.000       0.000       0.000       0.639 
Cave1Poi                              35.752      87.827      -0.140       0.000       0.029      -1.679 Cave
Cave2Poi                              36.545      44.046       0.029       0.000       0.000      -2.028 Cave
Cave3Poi                              81.586      32.428       0.092       0.000       0.087       3.253 Cave
Cave4Poi                              94.461      63.693       0.010       0.000       0.000      -0.378 Cave
Cave5Poi                              66.020      73.203      -0.027      -0.158       0.023       0.715 Cave
Bonanza1Poi                           46.223     105.000       0.000       0.000       0.000       0.000 
Bonanza3Poi                           46.555     102.223       0.000       0.000       0.000       0.000 
Bonanza2Poi                           49.334     104.000       0.000       0.000       0.000       0.000 
MultiWardPoi                          99.605      21.440       0.161       0.000       0.506       0.000 
MooCow_253                            29.750      87.125       0.000       0.000       0.000       0.000 Cow
MooCow_254                            28.750      81.500       0.000       0.000       0.000       0.000 Cow
MooCow_255                            27.750      79.125       0.000       0.000       0.000       0.000 Cow
MooCow_256                            33.750      37.000       0.000       0.000       0.000       0.000 Cow
MooCow_257                            37.875      34.500       0.000       0.000       0.000       0.000 Cow
MooCow_258                            30.125      31.375       0.000       0.000       0.000       0.000 Cow
MooCow_259                            28.125      62.625       0.000       0.000       0.000       0.000 Cow
MooCow_260                            31.000      62.375       0.000       0.000       0.000       0.000 Cow
MooCow_261                            67.125      71.000       0.000       0.000       0.000       0.000 Cow
MooCow_262                            72.875      69.375       0.000       0.000       0.000       0.000 Cow
MooCow_263                            75.000      67.250       0.000       0.000       0.000       0.000 Cow
MooCow_264                            61.205      50.284       0.000       0.000       0.000       0.000 Cow
MooCow_265                            67.875      49.625       0.000       0.000       0.000       0.000 Cow
MooCow_266                           102.750      58.250       0.000       0.000       0.000       0.000 Cow
MooCow_267                           103.500      60.625       0.000       0.000       0.000       0.000 Cow
UpgradeFirePOI                       113.011     106.784       0.000       0.000       0.000       0.000 
UpgradeWaterPOI                      113.023     104.489       0.000       0.000       0.000       0.000 
UpgradeAirPOI                        113.216     101.875       0.000       0.000       0.000       0.000 
UpgradeEarthPOI                      113.136      99.670       0.000       0.000       0.000       0.000 
AdaraPoi                             115.568     103.011      -4.000       0.000       0.000       0.000 
SpriteBuildingPoi                     20.000      87.064       0.000       0.000       0.000       0.000 
Cow1Poi                               19.272      84.455       0.000       0.000       0.000       0.000 
Cow2Poi                               18.182      85.364       0.000       0.000       0.000       0.000 
Cow3Poi                               20.455      85.091       0.000       0.000       0.000       0.000 
Cow4Poi                               22.091      85.636       0.000       0.000       0.000       0.000 
Cow5Poi                               19.636      83.545       0.000       0.000       0.000       0.000 
BoulderMedB_279                       30.846     104.122       0.000       0.000       0.000       0.000 BoulderMedA
BoulderMedB_280                       26.822     104.460       0.000       0.000       0.000       0.000 DragSkull
BoulderMedB_281                       25.854     104.896       0.000       0.000       0.000       0.792 BoulderMedA
BoulderMedB_282                       35.050      97.556       0.000       0.000       0.000      -0.247 DragSkull
BoulderMedB_283                       32.240     103.684       0.000       0.000       0.000      -2.804 BoulderMedA
BoulderMedB_284                       30.570      97.403       0.000       0.000       0.000      -2.639 BoulderMedA
Sheep_284                             31.000      86.333       0.000       0.000       0.000       0.000 Sheep
Sheep_285                             28.333      84.500       0.000       0.000       0.000       0.000 Sheep
Sheep_286                             30.462      79.659       0.000       0.000       0.000       0.000 Sheep
Sheep_287                             31.750      35.417       0.000       0.000       0.000       0.000 Sheep
Sheep_288                             28.833      34.583       0.000       0.000       0.000       0.000 Sheep
Sheep_289                             69.833      46.667       0.000       0.000       0.000       0.000 Sheep
Sheep_290                             77.583      57.667       0.000       0.000       0.000       0.000 Sheep
BoulderMedB_285                       64.660      39.686       0.000       0.000       0.000       0.000 BoulderMedA
BoulderMedB_286                       65.649      39.671       0.000       0.000       0.000      -1.064 BoulderMedA
BoulderMedB_287                       57.932      42.637       0.000       0.000       0.000      -1.484 BoulderMedA
BoulderMedA_284                       45.394      61.390       0.000       0.000       0.000       1.847 BoulderMedA
BoulderMedA_285                       45.107      61.870       0.000       0.000       0.000       0.074 BoulderMedA
ENDOFPOIFILE

..\TECH\DATA\ARMADA\ARMADA.ICE#

include "../scripts/Dtypes.ice"
include "../scripts/dlightning.ice"
include "../scripts/dBalloons.ice"

constant MAXGALLEONS = 6
constant MAXTROOPS = 30
constant GHOSTHEALTH = 50000
constant FLGHOSTHEALTH = 50000.0
constant MANDEKSHEALTH = 25000
constant DAMAGECAP = 300
constant DAMAGEWELL = 3000

create ObjHandle gModelHandle
create ObjHandle gSpriteHandle
create ObjHandle gGhostHandle
create xyz gObjectLoc
create xyz gObjectOrientation

create integer gSpriteFound
create integer gManHPcur = MANDEKSHEALTH
create integer gGhostHPcur = GHOSTHEALTH
create integer gDamageWell = 0
create float gPrcntGodHP

////////////////remove Mandek fresh super galleon model, swap it with wrecked super gallson model when it flees////////////
        // These are generic object creation variables
create integer gGalleonCount
create integer gNextWave
create integer gWave9 = FALSE
create integer gMaxFuryCharge
create integer gTroopCount = 0

make string tArrayOf6Strings[6]
make objHandle tArrayOf6ObjHandles[6]
//Dmake integer tArrayOf20Integers[20]
create integer gNextTBoat
create integer gReleaseMines
create tArrayOf6Strings[] gTBoatHeads
create tArrayOf6Strings[] gTBoatLanes
create tArrayOf6Strings[] gTBoatPads
create tArrayOf6Strings[] gTBoatTails
create tArrayOf6ObjHandles[] gTBoatHandles = ((NONE,NONE),(NONE,NONE),(NONE,NONE),(NONE,NONE),(NONE,NONE),(NONE,NONE))

make objHandle tArrayOf5ObjHandles[5]
create tArrayOf5ObjHandles[] gTowerHandles = ((NONE,NONE),(NONE,NONE),(NONE,NONE),(NONE,NONE),(NONE,NONE))

create ObjHandle gSuperGalleonHandle
create ObjHandle gShrineHandle
create ObjHandle gShrineEffectHandle
create ObjHandle gFriendlyhandle
create ObjHandle gAdaraHandle

create xyz gModelLoc
create xyz gModelOrientation
//create xyz gTempLoc
create xyz gGemLoc
create xyz gLocation
create xyz gOrientation = (0, 0, 0)


            // integer variable declarations
    create integer gAWPUWPlayer

            // bool variable declarations
    create integer gGotKeyBool //Shows whether or not the Player is carrying the Key
    create integer gShutDownBool //Shuts down the boat waves
    
    constant enum VOs 
    {
        VO_GREETINGS = 0,
        VO_OH_DEAR,
        VO_WATCH_OUT,
        VO_I_REMEMBER,
        VO_HANG_IN_THERE,
        VO_SO_ITS_TRUE,
        VO_YOUR_NOT_BEING,
        VO_AARGH_YOU_FOOLS,
        VO_THANK_YOU,
        VO_IM_SORRY_CAEL,
        FLY_INTO_THE_SPHERE
    }


    FUNCTION fVO_Player( integer vo) 
    {
        select vo
            case VO_GREETINGS
            BEGIN 
////                IceDisplay("Greetings, I'm The Great General Mandek  \n")
                VoiceOverPlay( VO_10mk001 )     
            END
            case VO_OH_DEAR
            BEGIN 
//              IceDisplay("Oh dear, so many Orcs in boats.   \n")
                VoiceOverPlay( VO_10ad078 )     
            END
            case VO_WATCH_OUT 
            BEGIN 
//              IceDisplay("Watch out, they're bringing in reinforcements.\n")
                VoiceOverPlay( VO_gnad141 )     
            END
            case VO_I_REMEMBER
            BEGIN 
//              IceDisplay(" I remember there being a Shrine near here.\n")
                VoiceOverPlay( VO_gnad153 )     
            END
            case VO_HANG_IN_THERE 
            BEGIN 
//              IceDisplay("Hang in there, this is the last attack wave!\n")
                VoiceOverPlay( VO_gnad154 )     
            END
            case VO_SO_ITS_TRUE
            BEGIN 
//              IceDisplay("So it's true; one puny Dragon causing this trouble\n")
                VoiceOverPlay( VO_10mk002 )
            END
            case VO_YOUR_NOT_BEING 
            BEGIN 
//              IceDisplay("You're not being nice Dragon.\n")
                VoiceOverPlay( VO_10mk002 )     
            END
            case VO_AARGH_YOU_FOOLS 
            BEGIN 
//              IceDisplay("Aargh!  Put that fire out, you fools!\n")
                VoiceOverPlay( VO_10mk003 ) 
            END
            case VO_THANK_YOU 
            BEGIN 
//              IceDisplay("Thank you. I was able to get free when you crippled that ship\n")
                VoiceOverPlay( VO_10rs002 ) //RANDOM SPRITE
            END
            case VO_IM_SORRY_CAEL

            BEGIN 
//              IceDisplay(" I'm sorry Cael; Mandek was just too powerful.\n")
                VoiceOverPlay( VO_10ad079) //CAELS DEATH
            END
            case FLY_INTO_THE_SPHERE
            BEGIN 
//              IceDisplay(" fly int the shere of your choice and be granted your upgrade\n")
                VoiceOverPlay( VO_GNAD151 ) //upgrades
            END
            default 
                EXIT
//          IceDisplay(" BABY DID A BAD BAD THANG")
        }
    //---------------------------------------------------
    // Function declarations  
    //---------------------------------------------------

    FUNCTION fInitModelPlacement()
    {
        create xyz tempLoc
        create xyz ori
        create ObjHandle gStrawHandle
        create ObjHandle gWoodHandle
        create ObjHandle gBrickHandle
        create integer spriteLoc

        AddObjectPOI(gModelHandle, "FishingBoat", "InitialFleet5Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtMakeMonk)
//          IceDisplay( "SHIP 1AHOY MATEY!!!!/n")
        AddObjectPOI(gModelHandle, "FishingBoat", "InitialFleet2Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtMakeMonk)
//          IceDisplay( "SHIP 2AHOY MATEY!!!!/n")
        AddObjectPOI(gModelHandle, "FishingBoat", "InitialFleet3Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtMakeMonk)
//          IceDisplay( "SHIP3 AHOY MATEY!!!!/n")

        AddObjectPOI(gStrawHandle, "FishingBoat", "InitialFleet4Poi")
//          IceDisplay( "SHIP4 AHOY MATEY!!!!/n")
        AddObjectPOI(gWoodHandle, "FishingBoat", "InitialFleet1Poi")
//          IceDisplay( "SHIP 5AHOY MATEY!!!!/n")
        AddObjectPOI(gBrickHandle, "Caravel",     "InitialFleet6Poi")
//          IceDisplay( "SHIP6 AHOY MATEY!!!!/n")
        AddObjectPOI(gModelHandle, "FishingBoat", "InitialFleet7Poi")
//          IceDisplay( "SHIP 7 AHOY MATEY!!!!/n")

        AddObjectPOISnap(gModelHandle, "Cow", "IslandAPeasant1Poi")
        AddObjectPOISnap(gModelHandle, "Sheep", "IslandACow1Poi")
        AddObjectPOISnap(gModelHandle, "Sheep", "IslandACow2Poi")

        AddObjectPOISnap(gModelHandle, "Cow", "IslandCDefender1Poi")
        AddObjectPOISnap(gModelHandle, "Cow", "IslandCDefender2Poi")
        AddObjectPOISnap(gModelHandle, "Sheep", "IslandCSheep1Poi")

        AddObjectPOISnap(gModelHandle, "Cow", "IslandDDefender1Poi")
        AddObjectPOISnap(gModelHandle, "Cow", "IslandDDefender2Poi")
        AddObjectPOISnap(gModelHandle, "Sheep", "IslandDSheep1Poi")
        AddObjectPOISnap(gModelHandle, "Cow", "Cow1_Poi")
        AddObjectPOISnap(gModelHandle, "Cow", "Cow2_Poi")
        AddObjectPOISnap(gModelHandle, "Cow", "Cow3_Poi")

        AddObjectPOISnap(gModelHandle, "Cow", "IslandFPeasant1Poi")
        AddObjectPOISnap(gModelHandle, "Cow", "IslandXPeasant1Poi")
        AddObjectPOISnap(gModelHandle, "Sheep", "IslandFCow1Poi")
        AddObjectPOISnap(gModelHandle, "Sheep", "IslandFCow2Poi")
        AddObjectPOISnap(gModelHandle, "Cow", "IslandGDefender1Poi")
        AddObjectPOISnap(gModelHandle, "Cow", "IslandGDefender2Poi")

        AddObjectPOI(gModelHandle, "Windmill", "Wind01_Poi")
            SetNeverSleepFlag(gModelHandle)
        AddObjectPOI(gModelHandle,  "Windmill", "Wind02_Poi")
            SetNeverSleepFlag(gModelHandle)
        AddObjectPOI(gModelHandle, "Windmill", "Wind03_Poi")
            SetNeverSleepFlag(gModelHandle)

        ////////////setting up random sprite
        set spriteLoc = Random (3)
        select spriteLoc // i switched to a selection instead of if-elsing, too
        case 0 
        BEGIN
//          IceDisplay("option1 \n")
            SetObjIceHandler(gStrawHandle, ICEOBJHANDLER_DEATH, evtMakeSprite)
        END
        case 1 
        BEGIN
//          IceDisplay("option2 \n")
            SetObjIceHandler(gWoodHandle, ICEOBJHANDLER_DEATH, evtMakeSprite)
        END
        case 2
        BEGIN
//          IceDisplay("option3 \n")
            SetObjIceHandler(gBrickHandle, ICEOBJHANDLER_DEATH, evtMakeSprite)
        END
        default
        BEGIN
            EXIT

//          IceDisplay( "Bad select on spriteLoc in initializeScripts\n" )
        END


        /////////////////////////////////
            //GetPoiLoc("ShrinePoi", tempLoc)
        //  fDShrineCreateLoc(tempLoc)
        fDShrineCreatePoi("ShrinePoi")
        fDShrineCreatePoi("Shrine2_Poi")


                ////////////Towers for Ballon bombs to come out of they need to only produce one, 
        /////////// about 10 seconds into the game.
        AddObjectPOI(gTowerHandles[0], "TowerTallWood", "Tower1_Poi")
        TriggerDelay(4*SECOND, evtTowerBalloons, gTowerHandles[0])
        AddObjectPOI(gTowerHandles[1], "TowerTallWood", "Tower2_Poi")
        TriggerDelay(6*SECOND, evtTowerBalloons, gTowerHandles[1])
        AddObjectPOI(gTowerHandles[2], "TowerTallWood", "Tower3_Poi")
        TriggerDelay(6*SECOND, evtTowerBalloons, gTowerHandles[2])
        AddObjectPOI(gTowerHandles[3], "TowerTallWood", "Tower4_Poi")
        TriggerDelay(5*SECOND, evtTowerBalloons, gTowerHandles[3])
        AddObjectPOI(gTowerHandles[4], "TowerTallWood", "Tower5_Poi")
        TriggerDelay(3*SECOND, evtTowerBalloons, gTowerHandles[4])

        set tempLoc^x = 0
        set tempLoc^y = 0
        set tempLoc^z = -50.0
        AddObjectLOC(gGhostHandle, "Silo", tempLoc, ori)
        SetInvulnerable( gGhostHandle, FALSE )
        SetHitPoints( gGhostHandle, 100 )                                                               // set Ghost's HP to the percentage remaining value: Ghost starts at 100HP, HUDMeter starts at 100% full
        SetInvulnerable( gGhostHandle, TRUE )
    }

    //---------------------------------------------------
    // AnyOf declarations
    //---------------------------------------------------


    ONCE ANYOF( initializeScripts )
    (void void)
    {
        fInitDaryl(20, ARMADA)
//Daryl: Removed fSetUpgradeAllowance() from Dxxx.ice files
//D         fSetUpgradeAllowance (3, 3, 3, 3)

        set gNextTBoat = 0 //transport lane
        set gReleaseMines = 0
        set gGalleonCount = 0

        set gTBoatHeads[0] = "TBoat1_Poi"
        set gTBoatHeads[1] = "TBoat2_Poi"
        set gTBoatHeads[2] = "TBoat3_Poi"
        set gTBoatHeads[3] = "TBoat4_Poi"
        set gTBoatHeads[4] = "TBoat5_Poi"
        set gTBoatHeads[5] = "TBoat6_Poi"

        set gTBoatLanes[0] = "TBoat1Path"
        set gTBoatLanes[1] = "TBoat2Path"
        set gTBoatLanes[2] = "TBoat3Path"
        set gTBoatLanes[3] = "TBoat4Path"
        set gTBoatLanes[4] = "TBoat5Path"
        set gTBoatLanes[5] = "TBoat6Path"

        set gTBoatPads[0] = "TBoat1EndPad"
        set gTBoatPads[1] = "TBoat2EndPad"
        set gTBoatPads[2] = "TBoat3EndPad"
        set gTBoatPads[3] = "TBoat4EndPad"
        set gTBoatPads[4] = "TBoat5EndPad"
        set gTBoatPads[5] = "TBoat6EndPad"

        set gTBoatTails[0] = "TLand1_Poi"
        set gTBoatTails[1] = "TLand2_Poi"
        set gTBoatTails[2] = "TLand3_Poi"
        set gTBoatTails[3] = "TLand4_Poi"
        set gTBoatTails[4] = "TLand5_Poi"
        set gTBoatTails[5] = "TLand6_Poi"   
    }


    ANYOF( evtLevelBegin )
    ( integer nothing integer nothing )
    {
        fInitModelPlacement()
        AddObjectPoi( gAdaraHandle, "Adara", "Dragon1_Start") // Adara Created
        TriggerPulse(500, evtSpriteFollowCael, gAdaraHandle) // Adara bops around Cael

        TriggerDelay(10*SECOND, evtWave1)
        TriggerDelay(5*SECOND, evtTBoat)
        TriggerDelay(5*SECOND, evtTBoat)
        TriggerDelay(5*SECOND, evtTBoat)
        TriggerDelay(5*SECOND, evtTBoat)
        TriggerDelay(5*SECOND, evtTBoat)
        TriggerDelay(5*SECOND, evtTBoat)
    }

    ANYOF (evtMakeMonk) (integer whoGUID)
    {
        create objhandle who
        create xyz monkLoc
        GUIDtoObjHandle(whoGUID, who)
        GetObjLocation (who, monkLoc)

        AddObjectLOC(gModelhandle, "MonkAirA", monkLoc, gOrientation)
        SetHeightAboveGround(gModelhandle, 3.0)
    }           

    //---------------------------------------------------
    // odds n ends declarations
    //---------------------------------------------------



    ANYOF( evtMakeSprite )
    (integer whoGUID )
    {
        create objhandle who
        create xyz spriteLoc
        GUIDtoObjHandle(whoGUID, who)
        GetObjLocation (who, spriteLoc)

        set spriteLoc^z = spriteLoc^z + 0.4
        AddObjectLOC(gModelhandle, "SpriteFire", spriteLoc, gOrientation)
        SetInvulnerable (gModelhandle, 1)
        SetBehaviorWander (gModelhandle, 3.0 )
        fVO_Player( VO_THANK_YOU )

        set gSpriteFound = TRUE
    }
    
    //---------------------------------------------------
    // 55 declarations
    //---------------------------------------------------

    ANYOF(evtMandekCheck)
    (void void)
    {
        create integer hpDiff
        create integer healthbar
        
        set gManHPcur = GetHitPoints( gSuperGalleonHandle )
        
        if ( gManHPcur < MANDEKSHEALTH OR gDamageWell > 0) then                         // if Mandek's current health is less than the previous grab: Mandek took damage
        BEGIN
            set hpDiff = MANDEKSHEALTH - gManHPcur                      // get the difference between Mandek's previous health and his current: how much damage did Mandek take
            if (hpDiff > DAMAGECAP)
            BEGIN 
                set gDamageWell = gDamageWell + (hpDiff - DAMAGECAP)
                if (gDamageWell > DAMAGEWELL) set gDamageWell = DAMAGEWELL
                set hpDiff = DAMAGECAP
//              IceDisplay ("Taking off 300 from damage\n")
            END
            else if (hpDiff = 0)
            BEGIN
                if (gDamageWell > DAMAGECAP)
                BEGIN
                    set hpDiff = DAMAGECAP
                    set gDamageWell = gDamageWell - DAMAGECAP
//                  IceDisplay ("Taking off 300 from well\n")
                END
                else
                BEGIN
                    set hpDiff = gDamageWell
                    set gDamageWell = 0
//                  IceDisplay("Taking off remainder of well\n")
                END
            END
            set gGhostHPcur = gGhostHPcur - hpDiff                  // subtract that difference from God's current HP: offload Mandek's damage onto God...don't we wish we all could
            set gPrcntGodHP = FLOAT(gGhostHPcur) / FLGHOSTHEALTH        // get the percentage at which God's current health stands as compared to God's starting health: what percentage of health does God have left
            set healthBar = INTEGER(100.0 * gPrcntGodHP)        // set this value equal to the percentage of health remaining for God
            SetInvulnerable( gGhostHandle, FALSE )
            SetHitPoints( gGhostHandle, healthBar )                 // set Ghost's HP to the percentage remaining value: Ghost starts at 100HP, HUDMeter starts at 100% full
            SetInvulnerable( gGhostHandle, TRUE )
            SetHitPoints( gSuperGalleonHandle, MANDEKSHEALTH )      // if he took damage, then give it back to him
        
            if (healthBar < 1)
            BEGIN
                RemoveObject(gSuperGalleonHandle)
                Trigger(evtMandekDeath)
            END     
        END
    }


    ANYOF(evtMandekDeath)
    {
        create xyz loc
        create xyz ori
        set ori =(0,0,1)

        DisableHudMeter()
        
        // Store Location of Mandek.
        GetObjLocation (gSuperGalleonHandle, loc)

        // Swap model for damaged one.
        AddObjectLoc (gSuperGalleonHandle,"SuperGalleonDamaged", loc, ori)
        fZapLoc(loc)
        SetInvulnerable(gSuperGalleonHandle, 1)
        
//      IceDisplay ("..................Mandek is running!!! \n")

        // Change Mandek state.
        SetDragonSight(gSuperGalleonHandle, 0)
        SetObjIceHandler(gSuperGalleonHandle, ICEOBJHANDLER_PAD, evtMandekEscape)
        SetBehaviorPatrol(gSuperGalleonHandle, "MandekEscapePath", PATH_ONEWAY_FORWARD_NEVERSLEEP)
        SetMovementSpeed(gSuperGalleonHandle,1.5)
        ObjAttachEmitter(gSuperGalleonHandle, "EmitSmokeMandekAft")
        ObjAttachEmitter(gSuperGalleonHandle, "EmitSmokeMandekFore")

        // EXPRESSLY REMOVED FROM DVOS.ICE!!!
        VoiceOverPlay( VO_10MK003 )

        // Win..
        if ( gSpriteFound == TRUE ) AND ( fDCanDragonUpgrade() >= 0 ) then
        BEGIN
            fDUpgradeCreate()
            fVO_Player(FLY_INTO_THE_SPHERE)
        END
        else
        BEGIN
            TriggerDelay (10000, evtArmadaEnd)
        END
    }

    ANYOF (evtArmadaEnd)
    {
        StartFXSequence( P1DragonHandle, FXSEQUENCE_TYPE_WIN, 10000, 0 )
    }
    
    ANYOF(evtMandekEscape)
    (integer whoGUID string padName)
    {
        create objhandle mandek
            
        // Bail if it's not mandek's escape pad that we hit..
        if ( padName != "MandekEscapePad" ) then EXIT

        // Get mandek's handle.
        GUIDtoObjHandle(whoGUID, mandek)

        // Remove Mandek.
        RemoveObject(mandek)
        
        // Display.. Remove.
//      IceDisplay("..................Mandek is gone.. You Win!!! \n")
    }

    //---------------------------------------------------
    // transport declarations
    //---------------------------------------------------

    create integer gGemCount = 0
    
    ANYOF(evtDeadTBoat)
    (integer whoGUID integer killerGUID)
    {
    create objhandle who
    create objhandle assassin

        
        if (GUIDtoObjHandle(killerGUID, assassin) == 0) then
            exit
        else
//          IceDisplay ("..................skating Gem \n")

        GUIDtoObjHandle(whoGUID, who)

        if ( gGemCount < 5 )
        BEGIN
//          IceDisplay ("..................Creating Gem \n")
            GetObjLocation (who, gGemLoc)
            set gGemLoc^z = gGemLoc^z + 1.3
            fDGemCreateLoc(Random(3), gGemLoc)
            set gGemCount = gGemCount + 1
        END

    //respawn transport
    TriggerDelay(25*SECOND, evtTBoat)
    }

    ANYOF( evtGemDied )
    {
        set gGemCount = gGemCount - 1
    }

    ANYOF(evtTBoat)
    (void void)
    {
        create objHandle tmpHandle

//      IceDisplay ("..................Creating Transport \n")
        AddObjectPOI(tmpHandle, "TransportBoat", gTBoatHeads[gNextTBoat])
        SetMovementSpeed  (tmpHandle, 2)
        // Turn on radar marker.
    //  HudRadarEnableMarker(fDRadarObj(SECONDARY, tmpHandle), 1)

        SetObjIceHandler(tmpHandle, ICEOBJHANDLER_DEATH, evtDeadTBoat)
        SetObjIceHandler(tmpHandle, ICEOBJHANDLER_PAD, evtTBoatEscape)

    
        SetDragonSight(tmpHandle, 0)
        SetBehaviorPatrol(tmpHandle, gTBoatLanes[gNextTBoat],PATH_ONEWAY_FORWARD_NEVERSLEEP)

        set gTBoatHandles[gNextTBoat] = tmpHandle
        TriggerDelay(20*SECOND, evtCheckMineRelease, gNextTBoat)

        //increment boat ring counter
        set gNextTBoat = gNextTBoat + 1
        if (gNextTBoat >= 6) then
            set gNextTBoat = 0
        
        //set up Balloon releases
    }

    //////around the poi function
    FUNCTION AddObjectAroundPOI ( Objhandle gilligan,String name, String where )
    {
        create xyz finalLoc

        GetPoiLoc (where, finalLoc)
        set finalLoc = fPerturbXYZ( 2.0, finalLoc )
        AddObjectLocSnap( gilligan, name, finalLoc, gOrientation )
    }

    ANYOF(evtTBoatEscape)
    (integer whoGUID string where)
    {
    create integer n
    create integer rnd
    create objhandle who

        GUIDtoObjHandle(whoGUID, who)
        set n = 0

        while (n<6) // loop through the number of tBoats that exist
        BEGIN
            if (StringsEqual(where, gTBoatPads[n]) == TRUE) then // check if this is the proper pad for this boat.
            BEGIN
                if (gTroopCount < MAXTROOPS) then // Is there room to drop off more people?
                BEGIN
//                  IceDisplay ("..................Unloading troops \n")
                    //spawn troops
                    set rnd = Random(10)
                    if (rnd < 4)
                    BEGIN
                        AddObjectAroundPOI(gModelHandle, "Archer", gTBoatTails[n])
                        AssignTeamID(gModelHandle, 2000)
                        AddObjectAroundPOI(gModelHandle, "Archer", gTBoatTails[n])
                        AssignTeamID(gModelHandle, 2000)
                        AddObjectAroundPOI(gModelHandle, "Archer", gTBoatTails[n])
                        AssignTeamID(gModelHandle, 2000)
                        AddObjectAroundPOI(gModelHandle, "Cow", gTBoatTails[n])
                        AssignTeamID(gModelHandle, 2000)
                        set gTroopCount = gTroopCount + 4
                    
                    END
                    else if (rnd < 7)
                    BEGIN
                        AddObjectAroundPOI(gModelHandle, "Skirmisher", gTBoatTails[n])
                        AssignTeamID(gModelHandle, 2000)
                        AddObjectAroundPOI(gModelHandle, "Skirmisher", gTBoatTails[n])
                        AssignTeamID(gModelHandle, 2000)
                        AddObjectAroundPOI(gModelHandle, "Skirmisher", gTBoatTails[n])
                        AssignTeamID(gModelHandle, 2000)
                        AddObjectAroundPOI(gModelHandle, "Cow", gTBoatTails[n])
                        AssignTeamID(gModelHandle, 2000)
                        set gTroopCount = gTroopCount + 4
                
                    END
                    else if (rnd < 9)
                    BEGIN
                        AddObjectAroundPOI(gModelHandle, "MonkEarthM", gTBoatTails[n])
                        AssignTeamID(gModelHandle, 2000)
                        set gTroopCount = gTroopCount + 1
                    END
                    else
                    BEGIN
                        AddObjectAroundPOI(gModelHandle, "MonkWaterM", gTBoatTails[n])
                        AssignTeamID(gModelHandle, 2000)
                        set gTroopCount = gTroopCount + 1
                    END
                END // check for room

                KillObject(who) //sink boat
                //respawn transport
                TriggerDelay(25*SECOND, evtTBoat)
                exit
            END // correct pad for this boat
            set n = n + 1
        END // while (n < 6)
    }

    ANYOF (evtObjDiedTeam20)
    {
        set gTroopCount = gTroopCount - 1
    }
        

    //---------------------------------------------------
    // baloon release declarations
    //---------------------------------------------------

    create integer gBalloonCount

    ANYOF (evtCheckMineRelease)
    (integer who void)
    {
    create xyz tempLoc
    create xyz tempGoalLoc                  // creating a temporary goal loc because I didn't have a predefined one
    create objHandle tmpHandle
    create integer TBoatHealth

        set tmpHandle = gTBoatHandles[who]
        TriggerDelay((Random(20)+20)*SECOND, evtCheckMineRelease, who)

        if (gReleaseMines == 0 ) EXIT
        if ( gBalloonCount >= 25 ) EXIT
        if ( IsObjectAlive( tmpHandle ) == 0 ) EXIT

//      IceDisplay ("..................Releasing a MINE. \n")

        //create a Balloon.
        GetObjLocation(tmpHandle, tempLoc)
        set tempLoc^z = tempLoc^z + 0.4


        set tempGoalLoc = tempLoc               // set the Balloon's goal loc equal to the origin loc...
        set tempGoalLoc^Z = tempGoalLoc^Z + 1.0         // ...then increase the goal^Z value by 5.0 so the Balloon floats up from the wagon

        set dBalloonYaw = 3.14                  // set the Balloon facing this direction
        set dBalloonRadius = 4.5                    // set the length of the Balloon's leash to a radial distance of 5.0
        fDBalloonCreateLoc( MINE, tempLoc, tempGoalLoc) // make the Balloon with all the info supplied within and set above
        SetObjIceHandler( dModelHandle, ICEOBJHANDLER_DEATH, evtBalloonDeath)
        fSandman( dModelHandle, 10*SECOND )
        set gBalloonCount = gBalloonCount + 1
    }

    ANYOF( evtBalloonDeath )
    {
        set gBalloonCount = gBalloonCount - 1
    }

    ANYOF (evtTowerBalloons)
    (objHandle who void)
    {
    create xyz tempLoc
    create xyz tempGoalLoc                  // creating a temporary goal loc because I didn't have a predefined one
        
//      IceDisplay ("..................Releasing a BOMB. \n")

        //create a Balloon.
        GetObjLocation(who, tempLoc)
        set tempLoc^z = tempLoc^z + 1.6
        set tempLoc^x = tempLoc^x - 3.0


        set tempGoalLoc = tempLoc               // set the Balloon's goal loc equal to the origin loc...
        set tempGoalLoc^Z = tempGoalLoc^Z + 1.9         // ...then increase the goal^Z value by 5.0 so the Balloon floats up from the wagon

        set dBalloonYaw = 3.14                  // set the Balloon facing this direction
        set dBalloonRadius = 5.0                    // set the length of the Balloon's leash to a radial distance of 5.0
        fDBalloonCreateLoc( BOMB, tempLoc, tempGoalLoc) // make the Balloon with all the info supplied within and set above
        fSandman( dModelHandle, 10*SECOND )
    }

    //---------------------------------------------------
    // other ship declarations ???
    //---------------------------------------------------

    FUNCTION fMakeAGalleon(string PoiName, string PathName)
    {
        AddObjectPOI( gModelHandle, "Galleon", PoiName )
            SetBehaviorPatrol( gModelHandle, PathName, PATH_ONEWAY_FORWARD_NEVERSLEEP )
            fZap( PoiName )
//D         fPrimaryRadar( gModelHandle) // Turn on radar marker.
            fDRadarObj( PRIMARY, gModelHandle )
            AssignTeamID( gModelHandle, 3000 )
            SetDragonSight( gModelHandle, 0 )

        set gGalleonCount = gGalleonCount + 1
//      Debug(gGalleonCount)
    }
    
    FUNCTION fMakeACaravel(string PoiName, string PathName)
    {
        AddObjectPOI(gModelHandle, "Caravel", PoiName)
            fZap( PoiName )
            SetBehaviorPatrol(gModelHandle, PathName, PATH_ONEWAY_FORWARD_NEVERSLEEP)
            SetDragonSight(gModelHandle, 0)
    }

    FUNCTION fMakeAZeppelin(string PoiName, string PathName)
    {
        AddObjectPOI(gModelHandle, "Zeppelin", PoiName)
        fZap( PoiName )
            SetBehaviorPatrol(gModelHandle, PathName, PATH_ONEWAY_FORWARD_NEVERSLEEP)
            SetDragonSight(gModelHandle, 0)
            SetHeightAboveGround(gModelHandle, 7.0)
    }

    ANYOF (evtObjDiedTeam30) (integer unitID)
    {
        set gGalleonCount = gGalleonCount - 1
    }
    
    ONCE ANYOF(evtWave1)
    { 
        
//      IceDisplay ("..................Wave1 \n")
        fMakeACaravel("WestBoatSpawnEPoi", "WestPath")
        fZap( "WestBoatSpawnEPoi" )
        TriggerDelay(2*SECOND, evtWave1B)
    }
        
    ANYOF(evtWave1B)
    {
        if (gGalleonCount > MAXGALLEONS)
        BEGIN
//          IceDisplay ("TOO MANY GALLEONS, will try 1B in a sec...\n")
            TriggerDelay (1*SECOND, evtWave1B)
        END
        
        else
        BEGIN
            fMakeAGalleon ("NorthBoatSpawnEPoi", "NorthPath")
            fZap( "NorthBoatSpawnEPoi" )
            TriggerDelay(4*SECOND, evtWave2)
//          IceDisplay ("1st Galleon\n")
        END
    }
 
    ONCE ANYOF(evtWave2)
    {


//      IceDisplay ("..................Wave2 \n")
        fMakeACaravel("NorthWestBoatSpawnAPoi", "NorthWestPath")
        fZap( "NorthWestBoatSpawnAPoi" )
        TriggerDelay(7*SECOND, evtWave2B)
    }
    
    ONCE ANYOF(evtWave2B)
    {
        fMakeACaravel("EastBoatSpawnPoi", "EastshipPath")
        fZap("EastBoatSpawnPoi" )
        TriggerDelay(6*SECOND, evtWave2C)
    }

    ANYOF(evtWave2C)
    {
        if (gGalleonCount > MAXGALLEONS)
        BEGIN
//          IceDisplay ("TOO MANY GALLEONS, will try 2C in a sec...\n")
            TriggerDelay (1*SECOND, evtWave2C)
        END
        
        else
        BEGIN
            fMakeAGalleon ("NorthWestBoatSpawnBPoi", "NorthWestPathC")
            fZap("NorthWestBoatSpawnBPoi" )
            TriggerDelay(6*SECOND, evtWave2D)
//          IceDisplay ("2nd Galleon\n")
        END
    }

    ANYOF(evtWave2D)
    {
        if (gGalleonCount > MAXGALLEONS)
        BEGIN
//          IceDisplay ("TOO MANY GALLEONS, will try 2D in a sec...\n")
            TriggerDelay (1*SECOND, evtWave2D)
        END
        
        else
        BEGIN
            fMakeAGalleon ("NorthWestBoatSpawnEPoi", "NorthWestPath")
            fZap("NorthWestBoatSpawnEPoi" )
            TriggerDelay(5*SECOND, evtWave3)
//          IceDisplay ("3rd Galleon\n")
        END
    }

    ONCE ANYOF(evtWave3)
    {
//      IceDisplay ("..................Wave3 \n")
        fMakeACaravel("NorthBoatSpawnAPoi", "NorthPath")
        fZap("NorthBoatSpawnAPoi")
        TriggerDelay(2*SECOND, evtWave3B)
    }

    ONCE ANYOF(evtWave3B)
    {
        fMakeACaravel("NorthBoatSpawnDPoi", "NorthPath")
        fZap("NorthBoatSpawnDPoi")
        TriggerDelay(4*SECOND, evtWave3C)
    }
    
    ONCE ANYOF(evtWave3C)
    {
        fVO_Player(VO_I_REMEMBER) 
        fMakeACaravel("NorthBoatSpawnEPoi", "NorthPath")
        fZap("NorthBoatSpawnEPoi")
        TriggerDelay(4*SECOND, evtWave3D)
    }

    ANYOF(evtWave3D)
    {
        if (gGalleonCount > MAXGALLEONS)
        BEGIN
//          IceDisplay ("TOO MANY GALLEONS, will try 3D in a sec...\n")
            TriggerDelay (1*SECOND, evtWave3D)
        END
        
        else
        BEGIN
            fMakeAGalleon ("EastBoatSpawnPoi", "EastshipPath")
            fZap("EastBoatSpawnPoi")
            TriggerDelay(5*SECOND, evtWave4)
//          IceDisplay ("4th Galleon\n")
        END
    }

    ONCE ANYOF(evtWave4)
    {
//      IceDisplay ("..................Wave4 \n")
        fMakeACaravel("WestBoatSpawnDPoi", "WestPath")
        fZap("WestBoatSpawnDPoi")
        TriggerDelay(6*SECOND, evtWave4B)
    }
        
    ONCE ANYOF(evtWave4B)
    {
        fMakeACaravel("WestBoatSpawnEPoi", "WestPath")
        fZap("WestBoatSpawnEPoi")
        TriggerDelay(6*SECOND, evtWave4C)

    }
        
    ONCE ANYOF(evtWave4C)
    {
        fMakeACaravel("WestBoatSpawnAPoi", "WestPath")
        fZap("WestBoatSpawnAPoi")
        TriggerDelay(14*SECOND, evtWave4D)
    }
        
    ANYOF(evtWave4D)
    {
        if (gGalleonCount > MAXGALLEONS)
        BEGIN
//          IceDisplay ("TOO MANY GALLEONS, will try 4D in a sec...\n")
            TriggerDelay (1*SECOND, evtWave4D)
        END
        
        else
        BEGIN
            fMakeAGalleon ("WestBoatSpawnCPoi", "WestPath")
            fZap("WestBoatSpawnCPoi")
            TriggerDelay(5*SECOND, evtWave5)
//          IceDisplay ("5th Galleon\n")
        END
    }

    ONCE ANYOF(evtWave5)
    {
//      IceDisplay ("..................Wave5 \n")
        fMakeACaravel("NorthWestBoatSpawnAPoi", "NorthWestPath")
        fZap("NorthWestBoatSpawnAPoi")
        TriggerDelay(6*SECOND, evtWave5B)
    }
        
    ONCE ANYOF(evtWave5B)
    {
        fMakeACaravel("NorthWestBoatSpawnBPoi", "NorthWestPath")
        fZap("NorthWestBoatSpawnBPoi")
        TriggerDelay(9*SECOND, evtWave5C)
    }
            
    ANYOF(evtWave5B)
    {
        if (gGalleonCount > MAXGALLEONS)
        BEGIN
//          IceDisplay ("TOO MANY GALLEONS, will try 5D in a sec...\n")
            TriggerDelay (1*SECOND, evtWave5B)
        END
        
        else
        BEGIN
            fMakeAGalleon ("NorthWestBoatSpawnEPoi", "NorthWestPath")
            fZap("NorthWestBoatSpawnEPoi")
            TriggerDelay(5*SECOND, evtWave6)
//          IceDisplay ("6th Galleon\n")
        END
    }

    ONCE ANYOF(evtWave6)
    {
//      IceDisplay ("..................Wave6 \n")
        fMakeACaravel("EastBoatSpawnPoi", "EastshipPath")
        fZap("EastBoatSpawnPoi")
        TriggerDelay(6*SECOND, evtWave6B)
    }

    ONCE ANYOF(evtWave6B)
    {
//          IceDisplay ("**********8MINES TURNED OFF ***************MINES TURNED OFF!!!******** \n")
            set gReleaseMines = 0
        fMakeAZeppelin("EastBoatSpawnPoi", "EastshipPath") 
        fZap("EastBoatSpawnPoi")
        SetBehaviorPatrol(gModelHandle, "EastshipPath", PATH_ONEWAY_FORWARD_NEVERSLEEP)
            ActAsLeader( gModelHandle, X_FORMATION, DONT_TRANSMIT_LEADERSHIP, 1.0 )

            AddObjectPoi(gFriendlyhandle, "MonkWaterA","LilFriendly1_Poi" )
            fZap("LilFriendly1_Poi")
            SetHeightAboveGround(gFriendlyhandle, 1.6)
            SetBehaviorFollow( gFriendlyhandle, gModelHandle )
        TriggerDelay(6*SECOND, evtWave6C)
    }

    ANYOF(evtWave6C)
    {
        if (gGalleonCount > MAXGALLEONS)
        BEGIN
//          IceDisplay ("TOO MANY GALLEONS, will try 6C in a sec...\n")
            TriggerDelay (1*SECOND, evtWave6C)
        END
        
        else
        BEGIN
            fMakeAGalleon ("NorthBoatSpawnEPoi", "NorthPath")
            fZap("NorthBoatSpawnEPoi")
            TriggerDelay(6*SECOND, evtWave6D)
//          IceDisplay ("7th Galleon\n")
        END
    }

    ANYOF(evtWave6D)
    {   
        if (gGalleonCount > MAXGALLEONS)
        BEGIN
//          IceDisplay ("TOO MANY GALLEONS, will try 6D in a sec...\n")
            TriggerDelay (1*SECOND, evtWave6D)
        END
        
        else
        BEGIN
            fMakeAGalleon ("EastBoatSpawnPoi", "EastshipPath")
            fZap("EastBoatSpawnPoi")
            TriggerDelay(5*SECOND, evtWave7)
        END
    }

    ONCE ANYOF(evtWave7)
    {
        set gReleaseMines = 1
//      IceDisplay ("..................Wave7 \n")
        fMakeAZeppelin("WestBoatSpawnBPoi", "WestPath") 
        fZap("WestBoatSpawnBPoi")
        TriggerDelay(2*SECOND, evtWave7B)
    }

    ANYOF(evtWave7B)
    {

        if (gGalleonCount > MAXGALLEONS)
        BEGIN
//          IceDisplay ("TOO MANY GALLEONS, will try 7B in a sec...\n")
            TriggerDelay (1*SECOND, evtWave7B)
        END
        
        else
        BEGIN
            fVO_Player( VO_WATCH_OUT)
            fMakeAGalleon ("WestBoatSpawnAPoi", "WestPath")
            fZap("WestBoatSpawnAPoi")
            TriggerDelay(6*SECOND, evtWave7C)
//          IceDisplay ("8th Galleon\n")
        END
    }

    ANYOF(evtWave7C)
    {
        if (gGalleonCount > MAXGALLEONS)
        BEGIN
//          IceDisplay ("TOO MANY GALLEONS, will try 7C in a sec...\n")
            TriggerDelay (1*SECOND, evtWave7C)
        END
        
        else
        BEGIN
            fMakeAGalleon ("WestBoatSpawnEPoi", "WestPath")
            fZap("WestBoatSpawnEPoi")
            TriggerDelay(7*SECOND, evtWave8)
//          IceDisplay ("9th Galleon\n")
        END
    }

    ONCE ANYOF(evtWave8)
    {
//      IceDisplay ("..................Wave8 \n")
        fMakeAZeppelin("NorthWestBoatSpawnAPoi", "NorthWestPath")
        fZap("NorthWestBoatSpawnAPoi")
        TriggerDelay(10*SECOND, evtWave8B)
    }

    ANYOF(evtWave8B)
    {
        if (gGalleonCount > MAXGALLEONS)
        BEGIN
//          IceDisplay ("TOO MANY GALLEONS, will try 8B in a sec...\n")
            TriggerDelay (1*SECOND, evtWave8B)
        END
        
        else
        BEGIN
            fMakeAGalleon ("NorthWestBoatSpawnBPoi", "NorthWestPath")
            fZap("NorthWestBoatSpawnBPoi")
            TriggerDelay(9*SECOND, evtWave8C)
//          IceDisplay ("10th Galleon\n")
        END
    }

    ANYOF(evtWave8C)
    {
        if (gGalleonCount > MAXGALLEONS)
        BEGIN
//          IceDisplay ("TOO MANY GALLEONS, will try 8C in a sec...\n")
            TriggerDelay (1*SECOND, evtWave8C)
        END
        
        else
        BEGIN
            fMakeAGalleon ("NorthWestBoatSpawnCPoi", "NorthWestPath")
            fZap("NorthWestBoatSpawnCPoi")
            TriggerDelay(8*SECOND, evtWave9)
//          IceDisplay ("11th Galleon\n")
        END
    }

    ONCE ANYOF(evtWave9)
    {
//      IceDisplay ("..................Wave9 \n")
        fMakeACaravel("NorthBoatSpawnBPoi", "NorthPath")
        fZap("NorthBoatSpawnBPoi")
        TriggerDelay(3*SECOND, evtWave9B)
    }

    ONCE ANYOF(evtWave9B)
    {
        fMakeACaravel("NorthBoatSpawnDPoi", "NorthPath")
        fZap("NorthBoatSpawnDPoi")
        TriggerDelay(3*SECOND, evtWave9C)
    }
        
    ANYOF(evtWave9C)
    {
        if (gGalleonCount > MAXGALLEONS)
        BEGIN
//          IceDisplay ("TOO MANY GALLEONS, will try 9C in a sec...\n")
            TriggerDelay (1*SECOND, evtWave9C)
        END
        
        else
        BEGIN
            fMakeAGalleon ("NorthBoatSpawnEPoi", "NorthPath")
            fZap("NorthBoatSpawnEPoi")
            TriggerDelay(6*SECOND, evtWave9D)
//          IceDisplay ("12th Galleon\n")
        END
    }
    
    ANYOF(evtWave9D)
    {
        if (gGalleonCount > MAXGALLEONS)
        BEGIN
//          IceDisplay ("TOO MANY GALLEONS, will try 9D in a sec...\n")
            TriggerDelay (1*SECOND, evtWave9D)
        END
        
        else
        BEGIN
            fMakeAGalleon ("NorthBoatSpawnAPoi", "NorthPath")
            fZap("NorthBoatSpawnAPoi")
            TriggerDelay(5*SECOND, evtWave9E)
//          IceDisplay ("13th Galleon\n")
        END
    }
        
    ANYOF(evtWave9E)
    {
        if (gGalleonCount > MAXGALLEONS)
        BEGIN
//          IceDisplay ("TOO MANY GALLEONS, will try 9E in a sec...\n")
            TriggerDelay (1*SECOND, evtWave9E)
        END
        
        else
        BEGIN
            set gWave9 = TRUE
            fMakeAGalleon ("NorthBoatSpawnCPoi", "NorthPath")
            fZap("NorthBoatSpawnCPoi")
            TriggerDelay(8*SECOND, evtWave10)
//          IceDisplay ("14th Galleon\n")
        END
    }

    ONCE ANYOF(evtWave10)
    {
        fVO_Player(VO_HANG_IN_THERE)
//      IceDisplay ("..................Wave10 \n")
        fMakeACaravel("NorthWestBoatSpawnAPoi", "NorthWestPath")
        fZap("NorthWestBoatSpawnAPoi")
        TriggerDelay(8*SECOND, evtWave10B)
    }
    
    ONCE ANYOF(evtWave10B)
    {
        fMakeACaravel("NorthWestBoatSpawnCPoi", "NorthWestPathC")
        fZap("NorthWestBoatSpawnCPoi")
        TriggerDelay(8*SECOND, evtWave10C)
    }

    ANYOF(evtWave10C)
    {
        if (gGalleonCount > MAXGALLEONS)
        BEGIN
//          IceDisplay ("TOO MANY GALLEONS, will try 10C in a sec...\n")
            TriggerDelay (1*SECOND, evtWave10C)
        END
        
        else
        BEGIN
            fMakeAGalleon ("NorthWestBoatSpawnDPoi", "NorthWestPath")
            fZap("NorthWestBoatSpawnDPoi")
            TriggerDelay(6*SECOND, evtWave10D)
//          IceDisplay ("15th Galleon\n")
        END
    }

    ANYOF(evtWave10D)
    {
        if (gGalleonCount > MAXGALLEONS)
        BEGIN
//          IceDisplay ("TOO MANY GALLEONS, will try 10D in a sec...\n")
            TriggerDelay (1*SECOND, evtWave10D)
        END
        
        else
        BEGIN
            fMakeAGalleon ("NorthWestBoatSpawnBPoi", "NorthWestPathC")
            fZap("NorthWestBoatSpawnBPoi")
            TriggerDelay(1*SECOND, evtWave11)
        END
    }

    ANYOF(evtWave11)
    (void void)
    {
        create integer i

        if ( gGalleonCount != 0 )
        BEGIN
//          IceDisplay ("TOO MANY GALLEONS, will try 11 in two secs...\n")
            TriggerDelay ( 2*SECOND, evtWave11 )
        END
        
        else
        BEGIN
//          IceDisplay ("..................SUPER GALLEON!!! \n")

            AddObjectPOI(gSuperGalleonHandle, "SuperGalleon", "Mandek_Poi")//"SuperGalleon"
            fZap("Mandek_Poi")
                SetMovementSpeed  (gSuperGalleonHandle, 2.3)
                SetFireRate (gSuperGalleonHandle, 0.5 )
                SetBehaviorPatrol(gSuperGalleonHandle, "MandekPath", PATH_ONEWAY_FORWARD_NEVERSLEEP)
                ActAsLeader( gSuperGalleonHandle, X_FORMATION, DONT_TRANSMIT_LEADERSHIP, 2.5 )
                SetObjIceHandler (gSuperGalleonHandle, ICEOBJHANDLER_UPDATE, evtMandekCheck)                
            
            fVO_Player(VO_SO_ITS_TRUE)

            // Clear all primary markers.
//D         fPrimaryRadarClearAll()
            while i < 20
            BEGIN
                HudRadarDisableMarker( i, DRAGON1 )
                set i = i + 1
            END
            // Turn on radar marker.
            fDRadarObj( PRIMARY, gSuperGalleonHandle )
            
            EnableHudHealthMeter (gGhostHandle)
            SetHudMeterCaption ( "Mandek's Flagship" )
            
            
            AddObjectPoi(gFriendlyhandle, "MonkFireA","LilFriendly2_Poi" )
            fZap("LilFriendly2_Poi")
                SetBehaviorFollow( gFriendlyhandle, gSuperGalleonHandle )
                SetMovementSpeed  (gFriendlyhandle, 2.1)
                SetHeightAboveGround(gFriendlyhandle, 3.7)
            
            AddObjectPoi(gFriendlyhandle, "MonkFireA","LilFriendly2_Poi" )
            fZap("LilFriendly2_Poi")
                SetBehaviorFollow( gFriendlyhandle, gSuperGalleonHandle )
                SetMovementSpeed  (gFriendlyhandle, 2.1)
                SetHeightAboveGround(gFriendlyhandle, 2.5)
        END
    }

..\TECH\DATA\ARMADA\ARMADA.CML#

<CASTLE version="1" >
</CASTLE>

..\TECH\DATA\ARMADA\ARMADA.PMF#

<?xml version="1.0" encoding="UTF-8"?>
<PADS VER="1">
    <PAD NAME="TBoat5EndPad"  X="103" Y="18" DX="7" DY="5" />
    <PAD NAME="TBoat6EndPad"  X="78" Y="28" DX="5" DY="6" />
    <PAD NAME="TBoat2EndPad"  X="97" Y="51" DX="5" DY="6" />
    <PAD NAME="TBoat3EndPad"  X="58" Y="12" DX="6" DY="5" />
    <PAD NAME="TBoat4EndPad"  X="95" Y="85" DX="6" DY="7" />
    <PAD NAME="TBoat1EndPad"  X="60" Y="47" DX="4" DY="5" />
    <PAD NAME="MandekEscapePad"  X="38" Y="116" DX="9" DY="7" />
</PADS>

..\TECH\DATA\ARMADA\ARMADA.POI#

IslandAPeasant1Poi                    59.000      22.200       0.000       0.000       0.000      -0.053 
IslandGDefender2Poi                   97.749      81.207       0.000       0.000       0.000      -0.034 
IslandGDefender1Poi                   55.971      20.840       0.000       0.000       0.000      -0.991 
IslandDDefender2Poi                   58.247      42.172       0.000       0.000       0.000       0.024 
IslandDDefender1Poi                   65.143      48.491       0.000       0.000       0.000      -1.337 
IslandCDefender2Poi                   82.370      29.608       0.000       0.000       0.000      -1.318 
IslandCDefender1Poi                   78.535      26.543       0.000       0.000       0.000       0.130 
IslandCSheep1Poi                      56.215      19.184       0.000       0.000       0.000      -0.030 
IslandACow2Poi                        58.527      12.987       0.000       0.000       0.000       0.002 
IslandACow1Poi                        57.600      20.800       0.000       0.000       0.000      -1.057 
IslandFCow2Poi                       106.419      19.243       0.000       0.000       0.000       0.761 
IslandFPeasant2Poi                    97.125      41.400       0.000       0.000       0.000       0.000 
IslandFCow1Poi                        85.625      40.700       0.000       0.000       0.000       0.000 
IslandFPeasant1Poi                    96.275      49.198       0.000       0.000       0.000      -1.081 
Dragon1_Start                        115.089      10.011       8.619      -0.346       0.268       0.064 
TBoat1_Poi                            24.400     124.400      -1.237       0.000       0.000      -3.119 
WestBoatSpawnCPoi                      2.200      66.600      -1.237       0.000       0.000      -1.679 
NorthWestBoatSpawnCPoi                 6.000     118.600      -1.237       0.000       0.000      -1.679 
NorthBoatSpawnCPoi                    52.400     127.000      -1.237       0.000       0.000      -3.119 
InitialFleet1Poi                      28.200      38.000       0.000       0.000       0.000       0.000 
InitialFleet3Poi                      56.200      99.000       0.000       0.000       0.000       0.000 
InitialFleet5Poi                     106.200      30.200       0.000       0.000       0.000       0.000 
InitialFleet7Poi                      25.200      62.800       0.000       0.000       0.000       0.000 
InitialFleet6Poi                      42.400      43.000       0.000       0.000       0.000       0.000 
IslandDSheep1Poi                      64.079      42.245       0.000       0.000       0.000       0.000 
InitialFleet2Poi                      36.800      80.600       0.000       0.000       0.000       0.000 
IslandGDefender3Poi                   96.409      82.385       0.000       0.000       0.000      -1.157 
ShrinePoi                             87.202      88.031       0.460       0.000       0.000      -1.838 
NorthBoatSpawnAPoi                    33.867     125.800      -1.237       0.000       0.000      -3.119 
NorthBoatSpawnBPoi                    42.600     126.600      -1.237       0.000       0.000      -3.119 
NorthBoatSpawnDPoi                    53.200     125.600      -1.237       0.000       0.000      -3.119 
NorthBoatSpawnEPoi                    53.800     124.200       0.000       0.000       0.000      -3.119 
NorthWestBoatSpawnAPoi                12.400     125.200      -1.237       0.000       0.000      -1.679 
NorthWestBoatSpawnBPoi                 6.000     124.000      -1.237       0.000       0.000      -1.679 
NorthWestBoatSpawnDPoi                 3.200     111.000      -1.237       0.000       0.000      -1.679 
NorthWestBoatSpawnEPoi                 3.000     102.133      -1.237       0.000       0.000      -1.679 
WestBoatSpawnAPoi                      6.800      74.600      -1.237       0.000       0.000      -1.679 
WestBoatSpawnBPoi                      3.200      71.000      -1.237       0.000       0.000      -1.679 
WestBoatSpawnDPoi                      1.000      61.600      -1.237       0.000       0.000      -1.679 
WestBoatSpawnEPoi                      2.600      55.000      -1.237       0.000       0.000      -1.237 
Farmhouse_045                        100.216      44.122      -0.004       0.000       0.000      -0.566 Farmhouse
Farmhouse_046                         99.563      48.061      -0.034       0.242       0.002      -2.669 Farmhouse
Farmhouse_048                         80.942      27.903      -0.012       0.000       0.000      -1.173 Farmhouse
Farmhouse_049                         59.406      21.249      -0.035       0.000       0.000      -4.441 Farmhouse
Silo_049                             101.344      43.990      -0.064      -0.095       0.000       3.917 Silo
Silo_050                              55.970      15.570      -0.076       0.000       0.000      -1.832 Silo
Wind02_Poi                            85.456      42.264      -0.076      -0.075       0.000      -5.125 
Wind01_Poi                           108.363      18.624      -0.119       0.008      -0.025       0.821 
TreeEvergreen_052                     56.778      16.944       0.000       0.000       0.000      -4.087 TreeEvergreen
TreeEvergreen_053                     60.695      22.651       0.000       0.000       0.000      -2.422 TreeEvergreen
TreeEvergreen_054                     57.125      21.625       0.000       0.000       0.000      -1.021 TreeEvergreen
TreeEvergreen_055                     57.359      22.730       0.000       0.000       0.000      -1.960 TreeEvergreen
TreeEvergreen_056                     56.477      17.318       0.000       0.000       0.000      -2.336 TreeEvergreen
TreeEvergreen_057                     55.255      16.358       0.000       0.000       0.000      -0.680 TreeEvergreen
TreeEvergreen_058                     78.102      28.445       0.000       0.000       0.000      -2.180 TreeEvergreen
TreeEvergreen_059                     76.746      24.779       0.000       0.000       0.000      -1.385 TreeEvergreen
TreeEvergreen_060                     79.953      28.443       0.000       0.000       0.000      -1.067 TreeEvergreen
TreeEvergreen_061                     80.572      28.977       0.000       0.000       0.000      -2.914 TreeEvergreen
TreeEvergreen_062                     83.572      28.404       0.000       0.000       0.000      -0.443 TreeEvergreen
TreeEvergreen_063                     84.069      29.378       0.000       0.000       0.000      -0.534 TreeEvergreen
TreeEvergreen_064                     90.694      27.407       0.000       0.000       0.000       0.000 TreeEvergreen
TreeEvergreen_065                    105.828      18.764       0.000       0.000       0.000      -2.258 TreeEvergreen
TreeEvergreen_066                     90.977      25.050       0.000       0.000       0.000      -2.563 TreeEvergreen
TreeEvergreen_067                     99.293      43.009       0.000       0.000       0.000      -1.592 TreeEvergreen
TreeEvergreen_068                    100.875      42.750       0.000       0.000       0.000      -2.240 TreeEvergreen
TreeEvergreen_069                    101.592      45.126       0.000       0.000       0.000       0.000 TreeEvergreen
TreeEvergreen_070                    101.371      45.931       0.000       0.000       0.000      -4.888 TreeEvergreen
TreeEvergreen_071                     98.082      51.733       0.000       0.000       0.000       0.000 TreeEvergreen
TreeEvergreen_072                     82.934      41.553       0.000       0.000       0.000       0.000 TreeEvergreen
TreeEvergreen_073                     84.082      41.248       0.000       0.000       0.000       0.000 TreeEvergreen
TreeEvergreen_074                     78.245      29.615       0.000       0.000       0.000       0.000 TreeEvergreen
TreeEvergreen_075                     97.873      50.623       0.000       0.000       0.000      -1.188 TreeEvergreen
TreeEvergreen_076                     96.751      53.885       0.000       0.000       0.000       0.000 TreeEvergreen
TreeEvergreen_077                     99.102      49.047       0.000       0.000       0.000       0.000 TreeEvergreen
TreeEvergreen_078                     99.712      75.169       0.000       0.000       0.000       0.005 TreeEvergreen
TreeEvergreen_079                     95.971      79.249       0.000       0.000       0.000       0.000 TreeEvergreen
TreeEvergreen_085                     84.411      42.267       0.000       0.000       0.000      -1.389 TreeEvergreen
TreeEvergreen_090                    105.718      20.025       0.000       0.000       0.000      -0.915 TreeEvergreen
TBoat4_Poi                            92.800     123.800      -1.237       0.000       0.000      -3.119 
TBoat5_Poi                            11.133      37.333      -1.237       0.000       0.000      -1.679 
TBoat6_Poi                           103.800     118.333      -1.237       0.000       0.000      -3.119 
TBoat2_Poi                            10.400      69.600      -1.237       0.000       0.000      -1.679 
TBoat3_Poi                            12.400      15.600      -1.237       0.000       0.000      -1.679 
Tower1_Poi                            97.179      79.888       0.105       0.000       0.039      -4.010 
Tower2_Poi                            61.593      20.962       0.000       0.000       0.000       0.476 
Tower4_Poi                            87.626      28.569       0.122       0.000       0.014      -2.145 
Bomb01_Poi                            95.227      77.312       0.000       0.000       0.000      -1.679 
Bomb02_Poi                           101.653      49.094       0.000       0.000       0.000      -0.875 
Tower5_Poi                            77.125      22.528       0.061      -0.067       0.000       1.300 
Bomb03_Poi                            81.535      30.102       0.000       0.000       0.000      -0.699 
Bomb04_Poi                            61.000      17.543       0.000       0.000       0.000      -1.349 
Bomb05_Poi                            59.600      46.800       0.000       0.000       0.000       0.757 
InitialFleet4Poi                      70.800      88.000       0.000       0.000       0.000       0.000 
Tower3_Poi                            74.600      48.800       0.000       0.000       0.000       0.000 
Stone1_Poi                            85.900      83.433       0.000       5.238      -0.209      -4.565 StandingStoneTall
Stone2_Poi                            88.833      89.644       0.000       0.201       0.000      -2.861 StandingStoneTall
Stone3_Poi                            87.733      83.800       0.000      -0.366       0.000      -2.736 StandingStoneTall
Stone4_Poi                            91.700      89.167       0.000      -0.488       0.000       0.610 StandingStoneTall
Stone5_Poi                            84.100      88.600       0.000      -0.315       0.000       0.000 
Stone6_Poi                            91.267      86.533       0.000      -0.481       0.000      -2.235 StandingStoneTall
Wreck1_Poi                            90.542      76.488       0.161       0.321       0.236      -3.119 RuinsWreckedGalleon
UpgradeFirePoi                        62.925      25.893       2.184       0.000       0.000       0.018 
UpgradeEarthPOI                       69.122      49.220       2.007       0.000       0.219       0.075 
UpgradeWaterPOI                       75.251      54.925       2.741       0.000       0.000       0.454 
UpgradeAirPOI                         72.304      40.825       3.708       1.142       0.681      -0.221 
UpgradeFirePOI                        80.336      47.420       2.263       0.000      -0.647      -1.176 
Wind03_Poi                            95.150      84.278      -0.103      -0.084       0.002      -2.759 
POI_114                               53.308      32.710       0.257       0.000       0.000       1.728 GuardTurretAirT
POI_116                               90.040      84.394      -0.002      -0.587       0.050      -1.427 RuinsStoneTower
POI_117                               83.568      89.152       0.227       0.118      -0.265      -1.688 RuinsStoneTower
POI_118                               84.139      82.999      -0.243      -0.655       0.044      -0.089 RuinsStoneTower
POI_120                               53.201      37.512      -0.960       0.597       0.319       5.535 RuinsWreckedGalleon
Mandek_Poi                           125.634      59.267      -1.237       0.000       0.000       1.300 
EastBoatSpawnPoi                     124.400     102.800      -1.237       0.000       0.000      -3.119 
Shrine2_Poi                           44.333      20.000       0.000       0.000       0.000       0.000 
Cow1_Poi                              57.388      19.446       0.000       0.000       0.000      -1.130 
Cow2_Poi                              61.502      40.917       0.000       0.000       0.000       0.692 
Cow3_Poi                              95.100      80.634       0.000       0.000       0.000      -0.159 
IslandXPeasant1Poi                    97.333      51.396       0.000       0.000       0.000      -0.053 
TLand2_Poi                            98.667      45.833       0.000       0.000       0.000       0.000 
TLand4_Poi                            96.167      80.933       0.000       0.000       0.000       0.000 
TLand1_Poi                            61.833      45.833       0.000       0.000       0.000       0.000 
TLand6_Poi                            82.500      27.500       0.000       0.000       0.000       0.000 
TLand5_Poi                           108.500      19.500       0.000       0.000       0.000       0.000 
TLand3_Poi                            56.667      14.500       0.000       0.000       0.000       0.000 
LilFriendly1_Poi                     122.200     103.200      -1.237       0.000       0.000       0.000 
LilFriendly2_Poi                     123.400      57.000      -1.237       0.000       0.000       0.000 
ENDOFPOIFILE

..\TECH\DATA\COLLSON\BEND.TXT#

SUBSPHERE
0.0f, 0.0f, 0.0f, 5.25f
0.0f, -3.0f, 0.0f, 1.5f
0.0f, -3.0f, 1.0f, 1.5f
0.0f, -3.0f, 2.0f, 1.5f
0.0f, -3.0f, 3.0f, 1.5f
0.0f, -2.0f, 3.0f, 0.75f
0.0f, -0.8f, 2.7f, 1.0f
0.0f,  0.0f, 2.3f, 0.75f
0.0f,  1.0f, 1.9f, 0.75f
0.0f,  2.0f, 1.3f, 0.75f
0.0f,  3.0f, 0.8f, 0.75f
0.0f,  4.0f, 0.0f, 0.75f

..\TECH\DATA\COLLSON\BSPAN.TXT#

SUBSPHERE
0.0f, 0.0f, 0.0f, 6.5f
0.0f, 0.0f, 0.1f, 1.1f
0.0f, 1.0f, 0.0f, 0.8f
0.0f, 2.0f, -0.25f, 0.7f
0.0f, 3.0f, -0.25f, 0.85f
0.0f, 4.4f, -0.7f, 0.8f
0.0f, 5.4f, -0.7f, 0.75f
0.0f, -1.0f, 0.0f, 0.8f
0.0f, -2.0f, -0.25f, 0.7f
0.0f, -3.0f, -0.25f, 0.85f
0.0f, -4.4f, -0.7f, 0.8f
0.0f, -5.4f, -0.7f, 0.75f

..\TECH\DATA\COLLSON\CAPN.TXT#

SUBSPHERE
0.0f  0.0f  0.6f    0.6f  

..\TECH\DATA\COLLSON\COLLSON.INI#

BEGIN_COLLISION_FILES_LIST
2 dragon.txt
100 walker.txt
2 windmill.txt
2 galvilla.txt
2 trikeep.txt
2 zfactory.txt
2 grthall.txt
2 mine.txt
2 zepp.txt
2 bspan.txt
2 bend.txt
2 capn.txt
10 roar.txt
1 pier.txt
1 incbator.txt
END_COLLISION_FILES_LIST

BEGIN_LEVEL_CUSTOMIZE demoa
END_LEVEL_CUSTOMIZE

BEGIN_LEVEL_CUSTOMIZE dwalpineb
END_LEVEL_CUSTOMIZE


BEGIN_LEVEL_CUSTOMIZE tom
END_LEVEL_CUSTOMIZE

BEGIN_LEVEL_CUSTOMIZE dragon1
END_LEVEL_CUSTOMIZE


BEGIN_LEVEL_CUSTOMIZE escape
END_LEVEL_CUSTOMIZE
    

BEGIN_LEVEL_CUSTOMIZE scramble
END_LEVEL_CUSTOMIZE
    

BEGIN_LEVEL_CUSTOMIZE homeland
END_LEVEL_CUSTOMIZE
    

BEGIN_LEVEL_CUSTOMIZE defend
END_LEVEL_CUSTOMIZE
    

BEGIN_LEVEL_CUSTOMIZE revenge
END_LEVEL_CUSTOMIZE
    

BEGIN_LEVEL_CUSTOMIZE training
END_LEVEL_CUSTOMIZE
    

BEGIN_LEVEL_CUSTOMIZE payback
END_LEVEL_CUSTOMIZE
    

BEGIN_LEVEL_CUSTOMIZE trap
END_LEVEL_CUSTOMIZE
    

BEGIN_LEVEL_CUSTOMIZE rescue
END_LEVEL_CUSTOMIZE
    

BEGIN_LEVEL_CUSTOMIZE armada
END_LEVEL_CUSTOMIZE
    

BEGIN_LEVEL_CUSTOMIZE cove
END_LEVEL_CUSTOMIZE
    

BEGIN_LEVEL_CUSTOMIZE gold
END_LEVEL_CUSTOMIZE
    

BEGIN_LEVEL_CUSTOMIZE ambush
END_LEVEL_CUSTOMIZE
    

BEGIN_LEVEL_CUSTOMIZE war
END_LEVEL_CUSTOMIZE
    

BEGIN_LEVEL_CUSTOMIZE rampage
END_LEVEL_CUSTOMIZE
    

BEGIN_LEVEL_CUSTOMIZE tower
END_LEVEL_CUSTOMIZE
    

BEGIN_LEVEL_CUSTOMIZE egg1
END_LEVEL_CUSTOMIZE
    

BEGIN_LEVEL_CUSTOMIZE egg2
END_LEVEL_CUSTOMIZE
    

BEGIN_LEVEL_CUSTOMIZE feed1
END_LEVEL_CUSTOMIZE
    

BEGIN_LEVEL_CUSTOMIZE feed2
END_LEVEL_CUSTOMIZE
    

BEGIN_LEVEL_CUSTOMIZE duel1
END_LEVEL_CUSTOMIZE
    

BEGIN_LEVEL_CUSTOMIZE duel2
END_LEVEL_CUSTOMIZE

..\TECH\DATA\COLLSON\DRAGON.TXT#

SUBSPHERE
0.0f, 0.0f, 0.0f, 0.35f,
0.0f, 0.0f, 0.0f, 0.125f,
0.20f, 0.0f, 0.0f, 0.08f,
-0.20f, 0.0f, 0.0f, 0.08f

..\TECH\DATA\COLLSON\GALVILLA.TXT#

SUBSPHERE
0.00f, 0.00f, 0.00f, 7.00f,
-3.00f, -1.00f, -0.30f, 4.00f,
3.00f, -1.00f, -0.30f, 4.00f,
-0.70f, 1.50f, 1.00f, 2.50f,
-0.70f, 1.50f, 3.30f, 2.50f,

..\TECH\DATA\COLLSON\GRTHALL.TXT#

SUBSPHERE
0.00f, 0.00f, 0.00f, 7.00f,
-3.00f, -1.00f, -0.30f, 4.00f,
3.00f, -1.00f, -0.30f, 4.00f,
-0.70f, 1.50f, 1.00f, 2.50f,
-0.70f, 1.50f, 3.30f, 2.50f,

..\TECH\DATA\COLLSON\INCBATOR.TXT#

SUBSPHERE
0.0f, 0.0f, 0.0f, 2.75f,
0.0f, 0.0f, 0.5f, 1.75f,
2.0f, 0.0f, 0.3f, 0.5f,
0.0f, -2.0f, 0.3f, 0.75f,

..\TECH\DATA\COLLSON\MINE.TXT#

CYLINDER
1.5f  2.5f  1.0f      

..\TECH\DATA\COLLSON\PIER.TXT#

SUBSPHERE
0.0f, 0.0f, 0.0f, 5.5f
0.0f, 0.0f, 0.5f, 1.75f
0.0f, 1.5f, 0.5f, 1.75f
0.0f, 3.25f, 0.5f, 1.0f
0.0f, -1.5f, 0.5f, 1.75f
0.0f, -3.0f, 0.5f, 2.0f
0.5f, 0.5f, 2.5f, 0.5f

..\TECH\DATA\COLLSON\ROAR.TXT#

SUBSPHERE
0.0f, 0.0f, 0.0f, 0.3f

..\TECH\DATA\COLLSON\TRIKEEP.TXT#

SUBSPHERE
0.00f, 0.00f, 1.00f, 3.00f,
0.00f, 1.00f, 0.0f, 1.30f,
0.95f, -1.10f, 0.00f, 1.30f,
-0.95f, -0.40f, 0.00f, 1.30f,
-1.00f, -0.45f, 1.51f, 0.60f,

..\TECH\DATA\COLLSON\WALKER.TXT#

SUBSPHERE
0.0f  0.0f  0.2f    0.2f  

..\TECH\DATA\COLLSON\WINDMILL.TXT#

CYLINDER
1.0f  2.0f  1.0

..\TECH\DATA\COLLSON\ZEPP.TXT#

SUBSPHERE
0.0f  0.0f  -0.7f    2.8f  

..\TECH\DATA\COLLSON\ZFACTORY.TXT#

SUBSPHERE
0.0f, 0.0f, 0.0f, 5.0f
0.0f, 0.0f, 2.0f, 2.0f
0.0f, 0.0f, 0.0f, 2.5f
3.0f, 0.0f, -0.5f, 2.0f
-3.0f, 0.0f, -0.5f, 2.0f

..\TECH\DATA\COVE\COVE.ICE#

include "../scripts/dtypes.ice"
include "../scripts/dballoons.ice"

create ObjHandle gModelHandle
create xyz gObjectLoc
create xyz gObjectOrientation

constant NUM_BOMB_BALLOONS = 8

constant enum VOICE_OVERS
{
    VO_ADARAINTRO,
    VO_DARKKEYCLUE,
    VO_AIRGEMCLUE,
    VO_RESCUEDSPRITE,
    VO_GOTDARKKEY,
    VO_MANDEKTAUNT,
    VO_COVEDESTROYED,
    VO_LEVELLOSE,
    VO_LEVELWIN
}   

constant TEAM_TBOAT = 5400

make integer IntArray10[10]
make string stringArrayBomb[NUM_BOMB_BALLOONS]
make string stringArrayTwentyOne[21]

    create IntArray10[] gTBoatGemFlag

    //POIs
    create stringArrayBomb[] gBomberPOIArray = (
        "BombBalloon1Poi", "BombBalloon2Poi", "BombBalloon3Poi", "BombBalloon4Poi", 
        "BombBalloon5Poi", "BombBalloon6Poi", "BombBalloon7Poi", "BombBalloon8Poi"
    )

    create stringArrayTwentyOne[] gMinePOIArray = (
        "MineBalloon1Poi", "MineBalloon2Poi", "MineBalloon3Poi", "MineBalloon4Poi", 
        "MineBalloon5Poi", "MineBalloon6Poi", "MineBalloon7Poi", "MineBalloon8Poi",
        "MineBalloon9Poi", "MineBalloon10Poi", "MineBalloon11Poi", "MineBalloon12Poi", 
        "MineBalloon13Poi", "MineBalloon14Poi", "MineBalloon15Poi", "MineBalloon16Poi",
        "MineBalloon17Poi", "MineBalloon18Poi", "MineBalloon19Poi", "MineBalloon20Poi",
        "MineBalloon21Poi"
    )


//  fVO_Player( VO_LEVELLOSE)

    create integer gCoveMarker
    create integer gBaseCount = 3 //Counting destroyed buildings at the zeppelin base
    create integer gCoveCount = 3 //Counting destroyed buildings in the Cove
    create integer gMaxFuryCharge
    create integer gAirVO = FALSE
    create integer gDarkVO = FALSE
    create integer gTauntVO = FALSE
    create integer gZBaseDead = FALSE
    create integer gNextBoat = FALSE
    create integer gTBoatCount
    create integer gGemCount
    create ObjHandle gDarkKeyHandle
    create ObjHandle gDarkWardHandle
    create ObjHandle gDarkWardGeneratorHandle
    create ObjHandle gZeppelinBaseHandle
    create ObjHandle gCoveBaseHandle
    create ObjHandle gMandekHandle
    create ObjHandle gSprite1Handle
    create ObjHandle gSprite2Handle
    create ObjHandle gAdaraHandle
    create xyz gPoiLoc
    create xyz gTempLoc
    create xyz gGemLoc
    create xyz gLocation
    create xyz gOrientation = (0.0, 0.0, 0.0)
    create float gDragonDistance

    create integer gGotKeyBool //Shows whether or not the Player is carrying the Key
    create integer gGotGemBool
    create integer gFoundKeyBool //so as not to play the "find the key" VO if already found
    create integer gGotUpgrade = FALSE

    create ObjHandle gPatrolAHandle
    create ObjHandle gPatrolBHandle
    create ObjHandle gPatrolCHandle
    create ObjHandle gPatrolDHandle
    create ObjHandle gPatrolEHandle

    create ObjHandle gCoveDefender1Handle
    create ObjHandle gCoveDefender2Handle
    create ObjHandle gCoveDefender3Handle
    create ObjHandle gCoveDefender4Handle
    create ObjHandle gCoveDefender5Handle
    create ObjHandle gCoveDefender6Handle
    create ObjHandle gCoveDefender7Handle
    create ObjHandle gCoveDefender8Handle
    create ObjHandle gFireTurret1Handle
    create ObjHandle gFireTurret2Handle
    create ObjHandle gFireTurret3Handle
    create ObjHandle gFireTurret4Handle
    create ObjHandle gFireTurret5Handle
    create ObjHandle gFireTurret6Handle
    create ObjHandle gFireTurret7Handle
    create ObjHandle gFireTurret8Handle
    create ObjHandle gFireTower1Handle
    create ObjHandle gFireTower2Handle
    create ObjHandle gFireTower3Handle
    create ObjHandle gBarnHandle

    create ObjHandle gCoveBase1Handle
    create ObjHandle gCoveBase2Handle
    create ObjHandle gCoveBase3Handle


    //---------------------------------------------------
    // Function declarations
    //---------------------------------------------------

    
    ////////////////////////////////////////////////////////////////////////////////
    // ZAP MODULE
    ////////////////////////////////////////////////////////////////////////////////

    // fPerturbFloat
    FUNCTION fPerturbFloat RETURN float( integer radius float myFloat)
    {
        RETURN myFloat - FLOAT( radius) + FLOAT( Random( 1+2*radius))
    }

    FUNCTION fPerturbXYZ RETURN xyz( integer radius xyz myLoc)
    {
        create xyz tempLoc

        set tempLoc = (0.0, 0.0, 0.0)
        set tempLoc^x = fPerturbFloat( radius, myLoc^x)
        set tempLoc^y = fPerturbFloat( radius, myLoc^y)
        set tempLoc^z = myLoc^z

        RETURN tempLoc
    }

    // fZapLoc
    FUNCTION fZapLoc( xyz zapLoc )
    {
        create xyz effectLoc
        create xyz skyLoc

        set effectLoc = fPerturbXYZ(2, zapLoc)
        set effectLoc^z = effectLoc^z+4.0
        //set skyLoc = fPerturbXYZ(20, (64.0, 64.0, 30.0))
        set skyLoc = zapLoc
        set skyLoc^z = skyLoc^z + 15.0


        //bolt comes down from sky
        //branches comes up from poi
        //fade out bolt for immediate effect
        //grow in branches for delayed effect 

            // bolt from sky
        CreateLightning( skyLoc, zapLoc, ELIGHTNING_EFFECT_OPTION_THICK+ELIGHTNING_EFFECT_OPTION_SHAFT+ELIGHTNING_EFFECT_OPTION_COOL+ELIGHTNING_EFFECT_OPTION_END_SPOT+ELIGHTNING_EFFECT_OPTION_FADE+ELIGHTNING_EFFECT_OPTION_SOUNDFX, 0.5 )
            //branch from ground
        CreateLightning( zapLoc, effectLoc, ELIGHTNING_EFFECT_OPTION_THIN+ELIGHTNING_EFFECT_OPTION_BRANCH+ELIGHTNING_EFFECT_OPTION_COLD+ELIGHTNING_EFFECT_OPTION_GROW, 0.6 )
    }


    // fZap
    FUNCTION fZap ( string poi)
    {
        create xyz zapLoc

        GetPoiLoc( poi, zapLoc )
        fZapLoc( zapLoc )
    }



    FUNCTION fInitModelPlacement()
    {
        // Dark Ward
        fDWardCreatePOI(DARK, "DarkWardGeneratorPoi", 7.0, 16.0)
        set gDarkWardGeneratorHandle = dModelHandle

        //  Shrine
        GetPoiLoc("ShrinePoi", gTempLoc)
        fDShrineCreateLoc(gTempLoc)
        GetPoiLoc("Shrine2Poi", gTempLoc)
        fDShrineCreateLoc(gTempLoc)

        // Air Ward at base
        fDWardCreatePOI(AIR, "AirWardGeneratorPoi", 10.0, 15.0)
        AddObjectPOI(gZeppelinBaseHandle, "GreatHall", "WarehousePoi")
        SetObjIceHandler(gZeppelinBaseHandle, ICEOBJHANDLER_DEATH, evtMakeDarkKey)
        AddObjectPOI(gModelHandle, "KeepOctStone", "SpriteBuildingPoi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtBonusSprite)
        AddObjectPOI(gModelHandle, "BombBalloon", "GroundBalloon1Poi")
        DisableWeapon (gModelHandle)
        SetDragonSight(gModelHandle, 0)
        AddObjectPOI(gModelHandle, "BombBalloon", "GroundBalloon2Poi")
        DisableWeapon (gModelHandle)
        SetDragonSight(gModelHandle, 0)
        AddObjectPOI(gModelHandle, "BombBalloon", "GroundBalloon3Poi")
        DisableWeapon (gModelHandle)
        SetDragonSight(gModelHandle, 0)
        AddObjectPOI(gModelHandle, "HouseMiddleClassB", "GemBuilding1Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtGemBuilding)
        AddObjectPOI(gModelHandle, "HouseMiddleClassB", "GemBuilding2Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtGemBuilding)


        //Cove
        AddObjectPOI(gCoveBase1Handle, "KeepTriStone", "CoveBuilding3Poi")
        SetObjIceHandler(gCoveBase1Handle, ICEOBJHANDLER_DEATH, evtCoveBase)
        AddObjectPOI(gCoveBase2Handle, "KeepOctStone", "CoveBuilding7Poi")
        SetObjIceHandler(gCoveBase2Handle, ICEOBJHANDLER_DEATH, evtCoveBase)
        AddObjectPOI(gCoveBase3Handle, "KeepTriStone", "CoveBuilding10Poi")
        SetObjIceHandler(gCoveBase3Handle, ICEOBJHANDLER_DEATH, evtCoveBase)
        AddObjectPOISnap(gCoveDefender1Handle, "MonkFireM", "CoveDefender1Poi")
        DisableWeapon (gCoveDefender1Handle)
        AddObjectPOISnap(gCoveDefender2Handle, "MonkFireM", "CoveDefender2Poi")
        DisableWeapon (gCoveDefender2Handle)
        AddObjectPOISnap(gCoveDefender3Handle, "MonkFireM", "CoveDefender3Poi")
        DisableWeapon (gCoveDefender3Handle)
        AddObjectPOISnap(gCoveDefender4Handle, "MonkFireM", "CoveDefender4Poi")
        DisableWeapon (gCoveDefender4Handle)
        AddObjectPOISnap(gCoveDefender5Handle, "MonkFireM", "CoveDefender5Poi")
        DisableWeapon (gCoveDefender5Handle)
        AddObjectPOISnap(gCoveDefender6Handle, "MonkFireM", "CoveDefender6Poi")
        DisableWeapon (gCoveDefender6Handle)
        AddObjectPOISnap(gCoveDefender7Handle, "MonkFireM", "CoveDefender7Poi")
        DisableWeapon (gCoveDefender7Handle)
        AddObjectPOISnap(gCoveDefender8Handle, "MonkFireM", "CoveDefender8Poi")
        DisableWeapon (gCoveDefender8Handle)
        AddObjectPOI(gFireTurret1Handle, "AssaultTurretFireT", "FireTurret1Poi")
        DisableWeapon (gFireTurret1Handle)
        AddObjectPOI(gFireTurret2Handle, "AssaultTurretFireT", "FireTurret2Poi")
        DisableWeapon (gFireTurret2Handle)
        AddObjectPOI(gFireTurret3Handle, "AssaultTurretFireT", "FireTurret3Poi")
        DisableWeapon (gFireTurret3Handle)
        AddObjectPOI(gFireTurret4Handle, "AssaultTurretFireT", "FireTurret4Poi")
        DisableWeapon (gFireTurret4Handle)
        AddObjectPOI(gFireTurret5Handle, "AssaultTurretFireT", "FireTurret5Poi")
        DisableWeapon (gFireTurret5Handle)
        AddObjectPOI(gFireTurret6Handle, "AssaultTurretFireT", "FireTurret6Poi")
        DisableWeapon (gFireTurret6Handle)
        AddObjectPOI(gFireTurret7Handle, "AssaultTurretFireT", "FireTurret7Poi")
        DisableWeapon (gFireTurret7Handle)
        AddObjectPOI(gFireTurret8Handle, "AssaultTurretFireT", "FireTurret8Poi")
        DisableWeapon (gFireTurret8Handle)
        AddObjectPOI(gMandekHandle, "SuperGalleonDamaged", "MandekPoi")
        SetObjIceHandler(gMandekHandle, ICEOBJHANDLER_PAD, evtMandekEscape)
        SetInvulnerable (gMandekHandle, 1)
        //SetDragonSight(gMandekHandle, 0)
        //DisableWeapon(gMandekHandle)
        SetMovementSpeed(gMandekHandle, 1.4)
        AddObjectPOI(gModelHandle, "HouseLowerClassB", "GemBuilding3Poi")
        SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtGemBuilding)

        //Patrol 1
        AddObjectPOI(gPatrolAHandle, "Zeppelin", "Patrol1ASpawnPoi")
        SetHeightAboveGround(gPatrolAHandle, 8.0)
        SetDragonSight(gPatrolAHandle, 0)
        SetMovementSpeed(gPatrolAHandle, 1.3)
        ActAsLeader (gPatrolAHandle, RING_FORMATION, TRANSMIT_LEADERSHIP, 4.5)
        SetBehaviorPatrol(gPatrolAHandle, "PatrolPath1", PATH_LOOPING_FORWARD_NEVERSLEEP)   
        AddObjectPOI(gModelHandle, "Zeppelin", "Patrol1BSpawnPoi")
        SetHeightAboveGround(gModelHandle, 6.0)
        SetMovementSpeed(gModelHandle, 1.3)
        SetBehaviorFollow (gModelHandle, gPatrolAHandle)
        AddObjectPOI(gModelHandle, "Zeppelin", "Patrol1CSpawnPoi")
        SetHeightAboveGround(gModelHandle, 7.0)
        SetMovementSpeed(gModelHandle, 1.3)
        SetBehaviorFollow (gModelHandle, gPatrolAHandle)

        //Patrol 2
        AddObjectPOI(gPatrolBHandle, "Galleon", "Patrol2ASpawnPoi")
        SetDragonSight(gPatrolBHandle, 0)
        SetMovementSpeed(gPatrolBHandle, 1.3)
        ActAsLeader (gPatrolBHandle, RING_FORMATION, TRANSMIT_LEADERSHIP, 2.5)
        SetBehaviorPatrol(gPatrolBHandle, "PatrolPath2", PATH_LOOPING_FORWARD_NEVERSLEEP)
        AddObjectPOI(gModelHandle, "Caravel", "Patrol2BSpawnPoi")
        SetMovementSpeed(gModelHandle, 1.3)
        SetBehaviorFollow (gModelHandle, gPatrolBHandle)
        AddObjectPOI(gModelHandle, "Caravel", "Patrol2CSpawnPoi")
        SetMovementSpeed(gModelHandle, 1.3)
        SetBehaviorFollow (gModelHandle, gPatrolBHandle)
        AddObjectPOI(gModelHandle, "Caravel", "Patrol2DSpawnPoi")
        SetMovementSpeed(gModelHandle, 1.3)
        SetBehaviorFollow (gModelHandle, gPatrolBHandle)
        AddObjectPOI(gModelHandle, "Caravel", "Patrol2ESpawnPoi")
        SetMovementSpeed(gModelHandle, 1.3)
        SetBehaviorFollow (gModelHandle, gPatrolBHandle)
   
        //Patrol 3
        AddObjectPOI(gPatrolCHandle, "Galleon", "Patrol3ASpawnPoi")
        SetDragonSight(gPatrolCHandle, 0)
        SetMovementSpeed(gPatrolCHandle, 1.3)
        ActAsLeader (gPatrolCHandle, RING_FORMATION, TRANSMIT_LEADERSHIP, 2.5)
        SetBehaviorPatrol(gPatrolCHandle, "PatrolPath3", PATH_LOOPING_FORWARD_NEVERSLEEP)
        AddObjectPOI(gModelHandle, "Caravel", "Patrol3BSpawnPoi")
        SetMovementSpeed(gModelHandle, 1.3)
        SetBehaviorFollow (gModelHandle, gPatrolCHandle)
        AddObjectPOI(gModelHandle, "Caravel", "Patrol3CSpawnPoi")
        SetMovementSpeed(gModelHandle, 1.3)
        SetBehaviorFollow (gModelHandle, gPatrolCHandle)
        AddObjectPOI(gModelHandle, "Caravel", "Patrol3DSpawnPoi")
        SetMovementSpeed(gModelHandle, 1.3)
        SetBehaviorFollow (gModelHandle, gPatrolCHandle)
        AddObjectPOI(gModelHandle, "Caravel", "Patrol3ESpawnPoi")
        SetMovementSpeed(gModelHandle, 1.3)
        SetBehaviorFollow (gModelHandle, gPatrolCHandle)

        // patrol 4
        AddObjectPOI(gPatrolDHandle, "Galleon", "Patrol4ASpawnPoi")
        SetDragonSight(gPatrolDHandle, 0)
        SetMovementSpeed(gPatrolDHandle, 1.3)
        ActAsLeader (gPatrolDHandle, RING_FORMATION, TRANSMIT_LEADERSHIP, 2.5)
        SetBehaviorPatrol(gPatrolDHandle, "PatrolPath4", PATH_LOOPING_FORWARD_NEVERSLEEP)
        AddObjectPOI(gModelHandle, "Caravel", "Patrol4BSpawnPoi")
        SetMovementSpeed(gModelHandle, 1.3)
        SetBehaviorFollow (gModelHandle, gPatrolDHandle)
        AddObjectPOI(gModelHandle, "Caravel", "Patrol4CSpawnPoi")
        SetMovementSpeed(gModelHandle, 1.3)
        SetBehaviorFollow (gModelHandle, gPatrolDHandle)
        AddObjectPOI(gModelHandle, "Caravel", "Patrol4DSpawnPoi")
        SetMovementSpeed(gModelHandle, 1.3)
        SetBehaviorFollow (gModelHandle, gPatrolDHandle)
        AddObjectPOI(gModelHandle, "Caravel", "Patrol4ESpawnPoi")
        SetMovementSpeed(gModelHandle, 1.3)
        SetBehaviorFollow (gModelHandle, gPatrolDHandle)

        // patrol 5
        AddObjectPOI(gPatrolEHandle, "Zeppelin", "Patrol5ASpawnPoi")
        SetHeightAboveGround(gPatrolEHandle, 8.0)
        SetDragonSight(gPatrolEHandle, 0)
        SetMovementSpeed(gPatrolEHandle, 1.3)
        ActAsLeader (gPatrolEHandle, RING_FORMATION, TRANSMIT_LEADERSHIP, 4.5)
        SetBehaviorPatrol(gPatrolEHandle, "PatrolPath5", PATH_LOOPING_FORWARD_NEVERSLEEP)
        AddObjectPOI(gModelHandle, "Zeppelin", "Patrol5BSpawnPoi")
        SetHeightAboveGround(gModelHandle, 7.0)
        SetMovementSpeed(gModelHandle, 1.3)
        SetBehaviorFollow (gModelHandle, gPatrolEHandle)
        AddObjectPOI(gModelHandle, "Zeppelin", "Patrol5CSpawnPoi")
        SetHeightAboveGround(gModelHandle, 6.0)
        SetMovementSpeed(gModelHandle, 1.3)
        SetBehaviorFollow (gModelHandle, gPatrolEHandle)
    }

    FUNCTION fVO_Player (integer whichVO)
    {
        select whichVO
            case VO_ADARAINTRO
            BEGIN
                VoiceOverPlay ( VO_11AD080 )
////                IceDisplay( "Time to get moving.  Destroy the island fortress near here and you'll scatter their navy.  No more navy, no more transporting Dragon eggs or Zeenium. \n")
            END
            case VO_DARKKEYCLUE
            BEGIN
                VoiceOverPlay ( VO_11AD081 )
//              IceDisplay( "There's another base near here.  That must be where they're hiding the Dark Key. \n")
            END
            case VO_AIRGEMCLUE
            BEGIN
                VoiceOverPlay ( VO_11AD082 )
//              IceDisplay( "That's an Air Ward.  There must be an Air Gem around here somewhere. \n")
            END
            case VO_RESCUEDSPRITE
            BEGIN
                VoiceOverPlay ( VO_grs005 )
//              IceDisplay( "Thank you for rescuing me. \n")
            END
            case VO_GOTDARKKEY
            BEGIN
                VoiceOverPlay ( VO_11AD083 )
//              IceDisplay( "Now let's find that Orc base. \n")
            END
            case VO_MANDEKTAUNT
            BEGIN
                VoiceOverPlay ( VO_11MK004 )
//              IceDisplay( "Ha, welcome to your death.  A pity I can't stay and watch, but I have other matters to attend to. \n")
            END
            case VO_COVEDESTROYED
            BEGIN
                VoiceOverPlay ( VO_GNAD150 )
//              IceDisplay( "Fly into the glowing sphere... \n")
            END
            case VO_LEVELLOSE
            BEGIN
                VoiceOverPlay ( VO_11MK005 )
//              IceDisplay( "Spiced Dragon blood for all! Save the head; it will look good hanging from my wall. \n")
            END
            case VO_LEVELWIN
            BEGIN
                VoiceOverPlay ( VO_11AD085 )
//              IceDisplay( "Very nice!  I wonder where Mandek went off to in such a hurry. \n")
            END
            default
            BEGIN
                EXIT
//              IceDisplay( "Why am I here?  What is the meaning of Ice? \n")
            END

        EXIT
    }

    ONCE ANYOF(initializeScripts) 
    (void void)
    {
        create AnimalGenerator rFarmInfo

        fInitDaryl(10, COVE)

        fInitModelPlacement() 

        set rFarmInfo = 
        (
            POIStart:       "BarnPoi",
            POIGoTo:        "AnimalGotoPoi",
            Cap:            3,
            minRate:        4000,
            maxRate:        8000,
            chanceCow:      25,
            chancePig:      0,
            chanceSheep:    75  
        )

        AddObjectPOI(gBarnHandle, "Barn", "BarnPoi")

        fStartAnimalGen( rFarmInfo, gBarnHandle )

        set gCoveMarker = fDRadarObj(PRIMARY, gDarkWardGeneratorHandle)

        Trigger(evtMakeBalloons)
        Trigger(evtTBoat)
        TriggerPulse(40*SECOND, evtTBoat) 
    }
    
    ONCE ANYOF( evtLevelBegin )
    {
        AddObjectPoi( gAdaraHandle, "Adara", "Dragon1_Start") // Adara Created
        TriggerPulse(500, evtSpriteFollowCael, gAdaraHandle)
    }


    ONCE ANYOF(evtMakeBalloons) 
    (void void)
    {
        create integer loopValue
        create xyz originLoc
        create xyz goalLoc
        set dBalloonYaw = 3.14  
        set dBalloonRadius = 2.0

        set loopValue = 0
        while loopValue < NUM_BOMB_BALLOONS
        BEGIN
            GetPoiLoc( gBomberPOIArray[loopValue], originLoc)
            set goalLoc = originLoc
            fDBalloonCreateLoc( BOMB, originLoc, goalLoc)

            set loopValue = loopValue + 1
        END

        set loopValue = 0
        while loopValue < 21
        BEGIN
            GetPoiLoc( gMinePOIArray[loopValue], originLoc)
            set goalLoc = originLoc
            fDBalloonCreateLoc( MINE, originLoc, goalLoc)

            set loopValue = loopValue + 1
        END
    }

    ONCE ANYOF(evtBonusSprite) 
    (integer whoGUID integer killerGUID)
    {
        create objhandle who
        GUIDtoObjHandle(whoGUID, who)

        GetObjLocation (who, gGemLoc)
        AddObjectLOC(gSprite1Handle, "SpriteFire", gGemLoc, gOrientation)
        TriggerPulse( 1000, evtSpriteFlutter, gSprite1Handle )
        TriggerDelay(15*SECOND, evtKillSprites)

//      IceDisplay ("............Thank you for freeing me!!! \n")
        fVO_Player( VO_RESCUEDSPRITE)
        if (fDCanDragonUpgrade() >= 0) then
        BEGIN
//          IceDisplay ("............Upgrades!!! \n")
            set gGotUpgrade = TRUE
        END
    }

    ANYOF( evtSpriteFlutter )
    ( ObjHandle who )
    {
        create xyz newLoc

        set newLoc^x = gGemLoc^x + float(Random(5)) - float(Random(5))
        set newLoc^y = gGemLoc^y + float(Random(5)) - float(Random(5))
        set newLoc^z = gGemLoc^z + float(Random(5)) - float(Random(5))

        SetBehaviorGoTo( who, newLoc )
    }

    ONCE ANYOF(evtKillSprites)
    (void void)
    {
        RemoveObject(gSprite1Handle)
    }

    ANYOF(evtGemBuilding)
    (integer whoGUID integer killerGUID)
    {
        create objhandle who
        create integer temp
        create integer i

        GUIDtoObjHandle(whoGUID, who)
        GetObjLocation (who, gTempLoc)
        set gTempLoc^z = gTempLoc^z + 0.7

//      IceDisplay( "..................... Gem!!! \n")

        fDGemCreateLoc(Random(3), gTempLoc)
        set gGemCount = gGemCount + 1
    }

    ANYOF(evtTBoat)
    (void void)
    {
        if (gTBoatCount < 4) then
        BEGIN
            AddObjectPOI(gModelHandle, "TransportBoat", "TBoatSpawnPoi")
            SetMovementSpeed(gModelHandle, 1.0)
            SetObjIceHandler(gModelHandle, ICEOBJHANDLER_DEATH, evtDeadTBoat)
            SetObjIceHandler(gModelHandle, ICEOBJHANDLER_PAD, evtTBoatPad)
            SetDragonSight(gModelHandle, 0)
            SetBehaviorPatrol(gModelHandle, "TBoatPath", PATH_ONEWAY_FORWARD_NEVERSLEEP)
            AssignTeamID( gModelHandle, TEAM_TBOAT+gNextBoat)

            fZap( "TBoatSpawnPoi")

            set gNextBoat = gNextBoat + 1
            if (gNextBoat = 10) then
            BEGIN
                set gNextBoat = 0
            END
            set gTBoatCount = gTBoatCount + 1
        END
    }

    ANYOF(evtDeadTBoat)
    (integer whoGUID integer killerGUID)
    {
        create integer temp
        create objhandle who
        GUIDtoObjHandle(whoGUID, who)

        set temp = GetTeamMemberNumber(who)
        
        if (gTBoatGemFlag[temp] == TRUE) then
        BEGIN
            GetObjLocation (who, gTempLoc)
            set gTempLoc^z = gTempLoc^z + 2.0
            if ((gZBaseDead == FALSE) AND (gAirVO = TRUE)) then
            BEGIN
//              IceDisplay ("..................Creating AirGem \n")
                fDGemCreateLoc(Air, gTempLoc)
                set gAirVO = TRUE
            END
            ELSE
            BEGIN
//              IceDisplay ("..................Random GEM!! \n")
                if (gGemCount < 20) then
                BEGIN
                    fDGemCreateLoc(Random(3), gTempLoc)
                    set gGemCount = gGemCount + 1
                END
            END
            set gTBoatGemFlag[temp] = FALSE
        END
        set gTBoatCount = gTBoatCount - 1
    }

    ANYOF(evtGemDied)
    (void void)
    {
        set gGemCount = gGemCount - 1
    }

    ANYOF( evtTBoatPad)
    (integer whoGUID string padName)
    {
        create integer temp
        create ObjHandle who

        GUIDtoObjHandle( whoGUID, who)

        set temp = GetTeamMemberNumber(who)

        if (StringsEqual(padName,"TBoatEndPad") == TRUE) then  //edge of map
        BEGIN
            RemoveObject(who)
            set gTBoatCount = gTBoatCount - 1
            fZap( "TBoatEndPoi")
        END
        ELSE if (StringsEqual(padName,"Border1Pad") == TRUE) then  //beyond the Dragon turn around zone
        BEGIN
//          IceDisplay ("..................TBoat is in range!!!! \n")
            set gTBoatGemFlag[temp] = TRUE
        END
        ELSE if (StringsEqual(padName,"Border2Pad") == TRUE) then  //back into the Dragon turn around zone
        BEGIN
//          IceDisplay ("..................TBoat is out of range!!!! \n")
            set gTBoatGemFlag[temp] = FALSE
        END
    }

    ANYOF(evtMandekEscape)
    (integer whoGUID string padName)
    {
        create objhandle who
        GUIDtoObjHandle(whoGUID, who)

        if (StringsEqual(padName,"MandekExitPad") == TRUE) then 
        BEGIN
            RemoveObject(who)
        END
    }

    ANYOF(evtDragonPad)
    (integer whoGUID string padName)
    {
        create objhandle who
        GUIDtoObjHandle(whoGUID, who)

        if (StringsEqual(padName,"AirWardVOPad") == TRUE) AND (gAirVO == FALSE) then
        BEGIN
            fVO_Player( VO_AIRGEMCLUE )
            //fAdaraVO( VO_AIRGEMCLUE, 8000 )
            set gAirVO = TRUE
        END
        ELSE if (StringsEqual(padName,"DarkWardVOPad") == TRUE) AND (gDarkVO == FALSE) then
        BEGIN
            if (gZBaseDead == FALSE) then
            BEGIN
                fVO_Player( VO_DARKKEYCLUE )
                //fAdaraVO( VO_DARKKEYCLUE, 10000 )
                fDRadarObj (PRIMARY, gZeppelinBaseHandle)
                set gCoveMarker = fDRadarObj(SECONDARY, gDarkWardGeneratorHandle)
            END
            set gDarkVO = TRUE
        END
    }

    ONCE ANYOF (evtItemReleased) 
    (integer playerNum integer itemType)
    {
        fVO_Player( VO_MANDEKTAUNT)
        set gTauntVO = TRUE
//      IceDisplay("The Dark Ward Is Down \n")
        //HudRadarDisableMarker( gCoveMarker, DRAGON1)
        fDRadarObj (PRIMARY, gCoveBase1Handle)
        fDRadarObj (PRIMARY, gCoveBase2Handle)
        fDRadarObj (PRIMARY, gCoveBase3Handle)
        EnableWeapon(gCoveDefender1Handle)
        EnableWeapon(gCoveDefender2Handle)
        EnableWeapon(gCoveDefender3Handle)
        EnableWeapon(gCoveDefender4Handle)
        EnableWeapon(gCoveDefender5Handle)
        EnableWeapon(gFireTurret1Handle)
        EnableWeapon(gFireTurret2Handle)
        EnableWeapon(gFireTurret3Handle)
        EnableWeapon(gFireTurret4Handle)
        EnableWeapon(gFireTurret5Handle)
        EnableWeapon(gFireTurret6Handle)
        EnableWeapon(gFireTurret7Handle)
        EnableWeapon(gFireTurret8Handle)
        SetBehaviorPatrol(gMandekHandle, "MandekPath", PATH_ONEWAY_FORWARD_NEVERSLEEP)
    }

    ONCE ANYOF(evtMakeDarkKey)
    (integer whoGUID integer killerGUID)
    {
        create objhandle who
        GUIDtoObjHandle(whoGUID, who)

        GetObjLocation (who, gGemLoc)
        set gGemLoc^z = gGemLoc^z + 1.4
        AddObjectLOC(gDarkKeyHandle, "DarkKey", gGemLoc, gOrientation)
        fDRadarObj (PRIMARY, gDarkKeyHandle)
        MakeWardKey(gDarkKeyHandle)
        set gZBaseDead = TRUE
        //set gCoveMarker = fDRadarObj(SECONDARY, gDarkWardGeneratorHandle)
    }

    ANYOF(evtCoveBase)
    (void void)
    {
        set gBaseCount = gBaseCount - 1
        if (gBaseCount == 0) then
        BEGIN
            KillObject(gCoveDefender1Handle)
            KillObject(gCoveDefender2Handle)
            KillObject(gCoveDefender3Handle)
            KillObject(gCoveDefender4Handle)
            KillObject(gCoveDefender5Handle)
            KillObject(gCoveDefender6Handle)
            KillObject(gCoveDefender7Handle)
            KillObject(gCoveDefender8Handle)
            KillObject(gFireTurret1Handle)
            KillObject(gFireTurret2Handle)
            KillObject(gFireTurret3Handle)
            KillObject(gFireTurret4Handle)
            KillObject(gFireTurret5Handle)
            KillObject(gFireTurret6Handle)
            KillObject(gFireTurret7Handle)
            KillObject(gFireTurret8Handle)
            AddObjectPoi(gSprite2Handle, "SpriteWater", "SpritePoi")
            GetPoiLoc( "SpritePoi", gGemLoc )
            TriggerPulse( 1000, evtSpriteFlutter, gSprite2Handle )
            if (gGotUpgrade == TRUE) then
            BEGIN
                fVO_Player( VO_COVEDESTROYED )
                //fAdaraVO( VO_COVEDESTROYED, 5000 )
//              IceDisplay ("..................Upgrades!!!! \n")
                fDUpgradeCreate()
            END
            ELSE
            BEGIN
                fAltEnd(WIN)
//D             TriggerDelay (2*SECOND, evtDEnd)
            END
        END
    }

    ONCE ANYOF (evtItemAquired) 
    (integer playerNum integer itemType)
    {
        set gCoveMarker = fDRadarObj(PRIMARY, gDarkWardGeneratorHandle)
        fVO_Player( VO_GOTDARKKEY )
        //fAdaraVO( VO_GOTDARKKEY, 5000 )
    }