7.2 Control Freak Example File

This is the control_types.cfg file that comes with Dark Reign 2:


//////////////////////////////////////////////////////////////////////////
//
// Copyright 1997-2000 Pandemic Studios
//
// Dark Reign II - Rule Type File - Control Freak
//
// Comments in this file are here to help ya figure stuff out :)

 

// displays the objective in the window.
CreateObjectType("control.objective", "Objective")
{
 Condition("TRUE");
 Action()
 {
  DisplayObjective("Add", "objectives")
   {
    Text("#mods.ruleset.control.objective");
   }
 }
}

// blips the minimap every 20 seconds.
CreateObjectType("control.blip.timer", "Objective")
{
  Condition("Timer")
  {
   Time(20);
  }
 Action()
 {
  NewObjective("control.A.blip");
  NewObjective("control.B.blip");
  NewObjective("control.C.blip");
  NewObjective("control.D.blip");
  NewObjective("control.E.blip");
  NewObjective("control.blip.timer");
 }
}

CreateObjectType("control.A.blip", "Objective")
{
 Condition("TRUE");
  Action()
  {
    TriggerTeamRadio("control.blip")
    {
      Region("CP-A");
    }
  }
}

CreateObjectType("control.B.blip", "Objective")
{
 Condition("TRUE");
  Action()
  {
    TriggerTeamRadio("control.blip")
    {
      Region("CP-B");
    }
  }
}

CreateObjectType("control.C.blip", "Objective")
{
 Condition("TRUE");
  Action()
  {
    TriggerTeamRadio("control.blip")
    {
      Region("CP-C");
    }
  }
}

CreateObjectType("control.D.blip", "Objective")
{
 Condition("TRUE");
  Action()
  {
    TriggerTeamRadio("control.blip")
    {
      Region("CP-D");
    }
  }
}

CreateObjectType("control.E.blip", "Objective")
{
 Condition("TRUE");
  Action()
  {
    TriggerTeamRadio("control.blip")
    {
      Region("CP-E");
    }
  }
}


CreateObjectType("control.A.take", "Objective")
{
  Condition("AND")
  {
   // prevents taking point from ally or self
    Condition("InRegion")
    {
      Region("CP-A");
      Type("special.control.camera.A")
      {
        Operator("==");
        Amount(0);
      }
      Relation("Ally");
      Combine(1);
    }
    // you must have at least one person in
    Condition("InRegion") 
    {
      Region("CP-A");
      Type("*")
      {
        Operator(">");
        Amount(0);
      }
    }
    // no enemies in area (camera = 1 enemy.)
    Condition("InRegion")
    {
      Region("CP-A");
      Type("*")
      {
        Operator("<");
        Amount(2);
      }
      Relation("Enemy");
      Combine(1);
    }
  }
  Action()
  {
    Op("~.CP-temp", "=", "A");
  Delete()
  {
   Tag("camera-A");
  }
   SpawnObjects()
    {
      Formation("Box");
      Direction(0);
      Region("CP-A");
      AddType("special.control.camera.A");
      Tag("camera-A");
    }
    TriggerFX()
    {
     Tag("CP-A");
     Effect("sprawler.fx.mojo.rage.unit");
    }
    TriggerTeamRadio("control.taken")
    {
      Region("CP-A");
    }
    NewObjective("control.A.lose");
  }
}

CreateObjectType("control.B.take", "Objective")
{
  Condition("AND")
  {
    Condition("InRegion")
    {
      Region("CP-B");
      Type("special.control.camera.B")
      {
        Operator("==");
        Amount(0);
      }
      Relation("Ally");
      Combine(1);
    }
    Condition("InRegion")
    {
      Region("CP-B");
      Type("*")
      {
        Operator(">");
        Amount(0);
      }
    }
    Condition("InRegion")
    {
      Region("CP-B");
      Type("*")
      {
        Operator("<");
        Amount(2);
      }
      Relation("Enemy");
      Combine(1);
    }
  }
  Action()
  {
    Op("~.CP-temp", "=", "B");
  Delete()
  {
   Tag("camera-B");
  }
   SpawnObjects()
    {
      Formation("Box");
      Direction(0);
      Region("CP-B");
      AddType("special.control.camera.B");
      Tag("camera-B");
    }
    TriggerFX()
    {
     Tag("CP-B");
     Effect("sprawler.fx.mojo.rage.unit");
    }
    TriggerTeamRadio("control.taken")
    {
      Region("CP-B");
    }
    NewObjective("control.B.lose");
  }
}


CreateObjectType("control.C.take", "Objective")
{
  Condition("AND")
  {
    Condition("InRegion")
    {
      Region("CP-C");
      Type("special.control.camera.C")
      {
        Operator("==");
        Amount(0);
      }
      Relation("Ally");
      Combine(1);
    }
    Condition("InRegion")
    {
      Region("CP-C");
      Type("*")
      {
        Operator(">");
        Amount(0);
      }
    }
    Condition("InRegion")
    {
      Region("CP-C");
      Type("*")
      {
        Operator("<");
        Amount(2);
      }
      Relation("Enemy");
      Combine(1);
    }
  }
  Action()
  {
    Op("~.CP-temp", "=", "C");
  Delete()
  {
   Tag("camera-C");
  }
   SpawnObjects()
    {
      Formation("Box");
      Direction(0);
      Region("CP-C");
      AddType("special.control.camera.C");
      Tag("camera-C");
    }
    TriggerFX()
    {
     Tag("CP-C");
     Effect("sprawler.fx.mojo.rage.unit");
    }
    TriggerTeamRadio("control.taken")
    {
      Region("CP-C");
    }
    NewObjective("control.C.lose");
  }
}


CreateObjectType("control.D.take", "Objective")
{
  Condition("AND")
  {
    Condition("InRegion")
    {
      Region("CP-D");
      Type("special.control.camera.D")
      {
        Operator("==");
        Amount(0);
      }
      Relation("Ally");
      Combine(1);
    }
    Condition("InRegion")
    {
      Region("CP-D");
      Type("*")
      {
        Operator(">");
        Amount(0);
      }
    }
    Condition("InRegion")
    {
      Region("CP-D");
      Type("*")
      {
        Operator("<");
        Amount(2);
      }
      Relation("Enemy");
      Combine(1);
    }
  }
  Action()
  {
    Op("~.CP-temp", "=", "D");
  Delete()
  {
   Tag("camera-D");
  }
   SpawnObjects()
    {
      Formation("Box");
      Direction(0);
      Region("CP-D");
      AddType("special.control.camera.D");
      Tag("camera-D");
    }
    TriggerFX()
    {
     Tag("CP-D");
     Effect("sprawler.fx.mojo.rage.unit");
    }
    TriggerTeamRadio("control.taken")
    {
      Region("CP-D");
    }
    NewObjective("control.D.lose");
  }
}


CreateObjectType("control.E.take", "Objective")
{
  Condition("AND")
  {
    Condition("InRegion")
    {
      Region("CP-E");
      Type("special.control.camera.E")
      {
        Operator("==");
        Amount(0);
      }
      Relation("Ally");
      Combine(1);
    }
    Condition("InRegion")
    {
      Region("CP-E");
      Type("*")
      {
        Operator(">");
        Amount(0);
      }
    }
    Condition("InRegion")
    {
      Region("CP-E");
      Type("*")
      {
        Operator("<");
        Amount(2);
      }
      Relation("Enemy");
      Combine(1);
    }
  }
  Action()
  {
    Op("~.CP-temp", "=", "E");
  Delete()
  {
   Tag("camera-E");
  }
   SpawnObjects()
    {
      Formation("Box");
      Direction(0);
      Region("CP-E");
      AddType("special.control.camera.E");
      Tag("camera-E");
    }
    TriggerFX()
    {
     Tag("CP-E");
     Effect("sprawler.fx.mojo.rage.unit");
    }
    TriggerTeamRadio("control.taken")
    {
      Region("CP-E");
    }
    NewObjective("control.E.lose");
  }
}


// check to see if you (not your ally) still has point.
CreateObjectType("control.A.lose", "Objective")
{
  Condition("InRegion")
  {
    Region("CP-A");
    Type("special.control.camera.A")
    {
      Operator("==");
      Amount(0);
    }
  }
 Action()
 {
  NewObjective("control.A.take");
 }
}

CreateObjectType("control.B.lose", "Objective")
{
  Condition("InRegion")
  {
    Region("CP-B");
    Type("special.control.camera.B")
    {
      Operator("==");
      Amount(0);
    }
  }
 Action()
 {
  NewObjective("control.B.take");
 }
}

CreateObjectType("control.C.lose", "Objective")
{
  Condition("InRegion")
  {
    Region("CP-C");
    Type("special.control.camera.C")
    {
      Operator("==");
      Amount(0);
    }
  }
 Action()
 {
  NewObjective("control.C.take");
 }
}

CreateObjectType("control.D.lose", "Objective")
{
  Condition("InRegion")
  {
    Region("CP-D");
    Type("special.control.camera.D")
    {
      Operator("==");
      Amount(0);
    }
  }
 Action()
 {
  NewObjective("control.D.take");
 }
}

CreateObjectType("control.E.lose", "Objective")
{
  Condition("InRegion")
  {
    Region("CP-E");
    Type("special.control.camera.E")
    {
      Operator("==");
      Amount(0);
    }
  }
 Action()
 {
  NewObjective("control.E.take");
 }
}

 

//check to see if you or your allies have all five points
CreateObjectType("control.wincheck", "Objective")
{
  Condition("AND")
  {
    Condition("InRegion")
    {
      Region("CP-A");
      Type("special.control.camera.A")
      {
        Operator("==");
        Amount(1);
      }
      Relation("Ally");
      Combine(1);
    }
    Condition("InRegion")
    {
      Region("CP-B");
      Type("special.control.camera.B")
      {
        Operator("==");
        Amount(1);
      }
      Relation("Ally");
      Combine(1);
    }
    Condition("InRegion")
    {
      Region("CP-C");
      Type("special.control.camera.C")
      {
        Operator("==");
        Amount(1);
      }
      Relation("Ally");
      Combine(1);
    }
    Condition("InRegion")
    {
      Region("CP-D");
      Type("special.control.camera.D")
      {
        Operator("==");
        Amount(1);
      }
      Relation("Ally");
      Combine(1);
    }
    Condition("InRegion")
    {
      Region("CP-E");
      Type("special.control.camera.E")
      {
        Operator("==");
        Amount(1);
      }
      Relation("Ally");
      Combine(1);
    }
  }
  Action()
  {
   // twinkles everything blue! woo-hoo!
    TriggerFX()
    {
     Tag("CP-A");
     Effect("sprawler.fx.mojo.rage.unit");
    }
    TriggerFX()
    {
     Tag("CP-B");
     Effect("sprawler.fx.mojo.rage.unit");
    }
    TriggerFX()
    {
     Tag("CP-C");
     Effect("sprawler.fx.mojo.rage.unit");
    }
    TriggerFX()
    {
     Tag("CP-D");
     Effect("sprawler.fx.mojo.rage.unit");
    }     
    TriggerFX()
    {
     Tag("CP-E");
     Effect("sprawler.fx.mojo.rage.unit");
    }
    TriggerTeamRadio("control.win");
    NewObjective("common.timer.win");
  }
}

////////////////////////////////////////////////////////////////////////////////
////////////////////// CONTROL FREAK MESSAGE CONFIGURATION /////////////////////
////////////////////////////////////////////////////////////////////////////////

ConfigureRadioEvent("control.blip")
{
  Messages()
  {
    LocationMessage::Self("control.blip");
 }
}

ConfigureRadioEvent("control.taken")
{
  Messages()
  {
    LocationMessage::Self("control.s_taken", "~.CP-temp");
    LocationMessage::Ally("control.a_taken", "~.CP-temp");
    LocationMessage::Enemy("control.e_taken", "~.CP-temp");
  }
}

ConfigureRadioEvent("control.win")
{
  Messages()
  {
    GameMessage::Self("control.win");
    GameMessage::Enemy("control.e_win");
  }
}

ConfigureGameMessage("control.win")
{
  Interval();
  Sound()
  {
    Type("Sound::Primary");
    Add("control_win.wav");
  }
  Message();
}

ConfigureGameMessage("control.e_win")
{
  Interval();
  Sound()
  {
    Type("Sound::Primary");
    Add("control_lose.wav");
  }
  Message();
}

ConfigureLocationMessage("control.blip")
{
  Interval();
  Sound();
  Message();
  BlipColor(255, 255, 255, 100);
}

ConfigureLocationMessage("control.blip_e")
{
  Interval();
  Sound();
  Message();
  BlipColor(255, 100, 0, 100);
}

ConfigureLocationMessage("control.s_taken")
{
  Interval();
  Sound()
  {
    Type("Sound::Primary");
    Add("control_taken.wav");
  }
  Message()
  {
    Type("Message::Console");
    Add("#mods.ruleset.control.s_taken");
  }
}

ConfigureLocationMessage("control.a_taken")
{
  Interval();
  Sound();
  Message()
  {
    Type("Message::Console");
    Add("#mods.ruleset.control.a_taken");
  }
}

ConfigureLocationMessage("control.e_taken")
{
  Interval();
  Sound();
  Message()
  {
    Type("Message::Console");
    Add("#mods.ruleset.control.e_taken");
  }
}

////////////////////////////////////////////////////////////////////////////////
////////////////////// CONTROL FREAK OBJECTS CONFIGURATION /////////////////////
////////////////////////////////////////////////////////////////////////////////


CreateObjectType("special.control.post", "Unit")
{
  GameObj()
  {
    ThinkInterval(1);
    Properties()
    {
      Add("Filter::SpecialProp");
    }
  }

  MapObj()
  {
    GodFile("jda_forcewall.god");
    PhysicsModel("building");
    TractionType("traction_building");
    GenericFX()
    {
      Add("MapObj::Armour::Damaged", "jda.armor.hit");
      Add("MapObj::Armour::Lost", "jda.armor.lose");
    }
  }

  UnitObj()
  {
    SeeingRange(80);
    NightModifier(100%);
    Power()
    {
      Required(0);
    }
    Efficiency()
    {
      Green(100%);
      Yellow(100%);
      Red(100%);
    }
  }
}

CreateObjectType("special.control.camera.A", "Unit")
{
  GameObj()
  {
    Properties()
    {
      Add("Filter::SpecialProp");
    }
  }

  MapObj()
  {
    Mesh();
    PhysicsModel("building");
    HitPoints(750);
    TractionType("traction_building");
    TypeDisplay();
  }

  UnitObj()
  {
    SeeingRange(60);
    NightModifier(100%);
  }
}

CreateObjectType("special.control.camera.B", "Unit")
{
  GameObj()
  {
    Properties()
    {
      Add("Filter::SpecialProp");
    }
  }

  MapObj()
  {
    Mesh();
    PhysicsModel("building");
    HitPoints(750);
    TractionType("traction_building");
    TypeDisplay();
  }

  UnitObj()
  {
    SeeingRange(60);
    NightModifier(100%);
  }
}

CreateObjectType("special.control.camera.C", "Unit")
{
  GameObj()
  {
    Properties()
    {
      Add("Filter::SpecialProp");
    }
  }

  MapObj()
  {
    Mesh();
    PhysicsModel("building");
    HitPoints(750);
    TractionType("traction_building");
    TypeDisplay();
  }

  UnitObj()
  {
    SeeingRange(60);
    NightModifier(100%);
  }
}

CreateObjectType("special.control.camera.D", "Unit")
{
  GameObj()
  {
    Properties()
    {
      Add("Filter::SpecialProp");
    }
  }

  MapObj()
  {
    Mesh();
    PhysicsModel("building");
    HitPoints(750);
    TractionType("traction_building");
    TypeDisplay();
  }

  UnitObj()
  {
    SeeingRange(60);
    NightModifier(100%);
  }
}

CreateObjectType("special.control.camera.E", "Unit")
{
  GameObj()
  {
    Properties()
    {
      Add("Filter::SpecialProp");
    }
  }

  MapObj()
  {
    Mesh();
    PhysicsModel("building");
    HitPoints(750);
    TractionType("traction_building");
    TypeDisplay();
  }

  UnitObj()
  {
    SeeingRange(60);
    NightModifier(100%);
  }
}